TIP

记录一下Mybatis的入门环境配置。

# 基本环境

使用工具

  • IDEA商业版 2020.1

项目类型

  • maven项目

首先需要构建一个maven项目

在pom.xml添加所需要的依赖。持久层就是访问数据库,所以必须得有jdbc的驱动和mybatis支持。

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.19</version>
</dependency>

在src/main/java目录中如果有目录文件就删除,没有就继续。

在src/main/java中创建如下目录

  • com/demo/controller 用于存放业务代码

  • com/demo/dao 用于存放持久层代码

  • com/demo/domain 用于存放javabean

  • com/demo/utils 用于简化生成SqlSession对象

# 创建核心配置文件

在src/main中创建资源文件resources目录,并在里面创建mybatis的核心配置文件mybatis-config.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="db.properties"/>
    <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>
    <mappers>
        <mapper resource="com/demo/dao/StudentMapper.xml"/>
    </mappers>
</configuration>

也可以使每个Mapper自动被加载,但是前提要求是,接口名需要和xml名相同。

<mappers>
    <package name="com.demo.dao"/>
</mappers>

# 创建数据库连接配置外部文件

在resources目录下创建db.properties文件,用于存放访问数据库的身份信息。使用需要注册。

driver=com.mysql.cj.jdbc.Driver
url=mysql://localhost:3306/srcrs?useSSL=false&amp;serverTimezone=UTC
username=root
password=123456

我觉得这个外部文件还挺不错的,当项目已经上线得时候,如果需要修改数据库连接,不需要动核心配置文件,只需要修改这个文件就行了。

# 创建javabean

准备访问数据库的student表,在domain目录中创建相应的javabean。

public class Student {
    private String sno;
    private String sname;
    private String sgender;
    private Integer sage;
    public String getSno() {
        return sno;
    }
    public void setSno(String sno) {
        this.sno = sno;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getSgender() {
        return sgender;
    }
    public void setSgender(String sgender) {
        this.sgender = sgender;
    }
    public Integer getSage() {
        return sage;
    }
    public void setSage(Integer sage) {
        this.sage = sage;
    }
    @Override
    public String toString() {
        return "Student{" +
                "sno='" + sno + '\'' +
                ", sname='" + sname + '\'' +
                ", sgender='" + sgender + '\'' +
                ", sage=" + sage +
                '}';
    }
}

这里需要注意的就是,数据库表的名字需要和javabean的名字相同,或者符合驼峰命名法,好像得需要在配置中开启,最好名称相同,也可以使用resultMap做结果集映射,就可以随便起名字了。

# 创建生成SqlSession对象类

在utils目录下创建MybatisUtils.java

public class MybatisUtils {
    static SqlSessionFactory sqlSessionFactory;
    static {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (Exception e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

简化获取SqlSession对象,每次需要用到的时候,直接从这个类的getSqlSession方法获取对象就行。

# 创建数据库查询接口

在dao中创建StudentDao.java

public interface StudentDao {
    List<Student> getStudentList();
}

# 创建接口对应的xml

在resources目录中创建com/demo/dao/StudentMapper.xml

<?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.demo.dao.StudentDao">
    <select id="getStudentList" resultType="com.demo.domain.Student">
        select * from Student
    </select>
</mapper>

注意要在mybatis-config.xml中注册。

可以给javabean设置别名,就不需要写javabean的全路径名了。

在mybatis-config.xml中加入

<typeAliases>
  <package name="domain.blog"/>
</typeAliases>

每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。

# 创建业务代码

在controller中创建App.java

public class App {
    public static void main(String[] args) {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> studentList = mapper.getStudentList();
        for (Student student : studentList) {
            System.out.println(student);
        }
        sqlSession.close();
    }
}

# 开启日志

mybatis自带有输出到控制台的日志,如果需要使用直接到mybatis-config.xml中配置就可以,需要注意位置放置的位置。

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

这样日志就会有日志输出了。

同样也可以自己配置mybatis日志实现。例如使用log4j。

在pom.xml中导入log4j依赖包。

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

创建log4j日志配置文件log4j.properties,放到资源目录resources中。

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file
#控制台输出相关配置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.comsole.Target = System.out
log4j.appender.comsole.Threshold = DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%c]-%m%n
#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = ./log/srcrs.log
log4j.appender.file.MaxFileSize = 10mb
log4j.appender.file.Threshold = DEBUG
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = [%p][%d{yy-MM-dd}][%c]%m%n
#日志输出级别
log4j.logger.org.mybatis = DEBUG
log4j.logger.java.sql = DEBUG
log4j.logger.java.sql.Statement = DEBUG
log4j.logger.java.sql.ResultSet = DEBUG
log4j.logger.java.sql.PreparedStatement = DEBUG

在mybatis-config.xml中配置相应的日志实现标签。

<settings>
    <setting name="logImpl" value="LOG4J"/>
</settings>

sqlSession每次使用完都需要关闭,另外进行增删改的时候还得提交事务,也可以设置成自动提交事务。

# 参考链接

maven中央仓库 (opens new window)

mybatis官方文档 (opens new window)

mybatis狂神版 (opens new window)