IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mybatis介绍与搭建 -> 正文阅读

[大数据]Mybatis介绍与搭建

Mybatis介绍与搭建

1、Mybatis简介:

? MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

官方地址:https://mybatis.org/mybatis-3/zh/index.html

2、Mybatis流程

Mybatis流程图

3、Mybatis搭建流程

  • 依赖
<!--数据库连接-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>
<!--引入Mybatis-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>
  • 配置mybatis.properties文件:将configer中的参数进行集中配置
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/school?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=1234
  • 配置Mybatis-configer.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<!--因为参数配置文件-->
    <properties resource="mybatis.properties"/>
	<!--配置setting参数,设置运行时行为,具体设置参数参考官方文档-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
        <setting name="cacheEnabled" value="true"/>
    </settings>
	
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--mapper接口与xml绑定配置-->
    <mappers>
        <mapper resource="com/cn/mapper/CourseMapper.xml"/>
    </mappers>
</configuration>
  • 编写SqlSession连接获取工具类
package com.cn.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class SqlSessionFactoryUtil {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            // 单例模式保证工厂只有一个
            if (sqlSessionFactory == null){
                synchronized (SqlSessionFactoryUtil.class){
                    if (sqlSessionFactory == null){
                        String resource = "mybatis-config.xml";
                        InputStream inputStream = 				Resources.getResourceAsStream(resource);
                        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}
  • 编写Mapper接口以及Mapper.xml文件,此处是CRUD相关实现代码;同时需要注意:
    • xml文件中的namespace指定路径需要与mapper接口对应
    • xml文件可以和mapper接口在一个路径下,也可以放于resources/mapper中,不管哪种方式,都需要在Mybatis-config.xml文件中的mapper指定正确
    • 如果xml文件在java包下,那么需要在pom文件的build中,配置相关的resource
<!--配置resource,防止资源导出失败:class文件中没有xml-->
<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

以下是select示例代码

// 数据库实体类,默认日志输出需要Serializable
@Data
public class Course implements Serializable{
    private int cno;
    private String cname;
}

// mapper接口方法,
public interface CourseMapper {
    List<Course> selectALL();
}

// 测试类
public class TestDemo {
    @Test
    public void test(){
        SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSession();
        try{
            CourseMapper mapper = sqlSession.getMapper(CourseMapper.class);
            List<Course> list = mapper.selectALL();
            System.out.println(list);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
    }
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cn.mapper.CourseMapper">
    <select id="selectALL" resultType="com.cn.pojo.Course">
        select * from course;
    </select>
</mapper>

4、日志工厂与log4j集成

? Mybatis框架在setting配置中,有各种配置运行时行为的参数,其中,logImpl参数控制日志输出模式;STDOUT_LOGGING 属于标准输出日志模式,该模式只需要配置setting一个参数就行,但缺点是无法进行自制日志打印,打印信息与自己需求可能存在出入

设置名描述有效值默认值
logImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找。SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | NO_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING未设置?

集成LOG4J日志:

  • 导入依赖
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
  • 设置Mybatis日志输出模式
<settings>
    <setting name="logImpl" value="LOG4J"/>
</settings>
  • 定制log4j日志打印配置
log4j.rootLogger=DEBUG,CONSOLE,file

# 配置CONSOLE输出到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
# 配置CONSOLE日志的输出格式  [frame] 2019-08-22 22:52:12,000  %r耗费毫秒数 %p日志的优先级 %t线程名 %C所属类名通常为全类名 %L代码中的行号 %x线程相关联的NDC %m日志 %n换行
log4j.appender.CONSOLE.layout.ConversionPattern=[frame] %d{yyyy-MM-dd HH:mm:ss,SSS} - %-4r %-5p [%t] %C:%L %x - %m%n

# 配置logfile输出到文件中 文件大小到达指定尺寸的时候产生新的日志文件
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.File=./logs/root.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=3
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n

5、缓存

Mybatis框架中自带缓存,sql查询时优先在缓存中查询,当未命中时,再在数据库中进行查找,减少数据压力;Mybatis缓存分为一级缓存和二级缓存。

  • 一级缓存:Mybatis默认开启的缓存,只在一个SqlSession会话中有效,无法取消;
  • 二级缓存:以namespace空间为界限,整个接口层下所有接口共享数据,当以及SqlSession会话结束时,一级缓存中的数据会被拷贝到二级缓存中;

注意:

>- 无论是一级缓存还是二级缓存,缓存命中的前提都是查询sql一致的情况下,不论是条件还是查询字段不一致,两个sql的数据都无法共享;
>
>- 映射语句文件中的所有 select 语句的结果将会被缓存。
>- 所有 insert、update 和 delete 语句会刷新缓存,导致已有缓存失效
>- 缓存会自动清除不需要的缓存。
>- 缓存不会定时进行刷新(也就是说,没有刷新间隔)。
>- 缓存会被视为读/写缓存,这意味着获取到的对象并不是共享的,可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

可用的清除策略有:

  • LRU – 最近最少使用:移除最长时间不被使用的对象。
  • FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
  • SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
  • WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:08:20  更:2022-01-16 13:08:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:40:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码