MyBatis3使用

2021-01-13 15:42:01 浏览数 (1)

一、MyBatis介绍

以下来自官方介绍:

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

说简单点,MyBatis是一个持久化框架,用于Java程序高效访问数据库,不用我们去访问原生相对繁琐的JDBC等Api,提升开发效率。

二、MyBatis环境准备

作为这一系列文章的第1篇,今天先讲述MyBatis的使用。

使用前先做下环境准备,以 Mysql为例,先创建数据库,假设名字为mybatis,然后创建表,表结构如下:

代码语言:javascript复制
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

很简单的一张表,包含几个字段:姓名,手机和创建时间

可以再加点数据:

代码语言:javascript复制
INSERT INTO `user` VALUES ('1', 'edward', '13612345678', '2020-10-28 10:20:30');
INSERT INTO `user` VALUES ('2', 'howard', '13912345678', '2020-10-28 10:20:40');

三、具体使用步骤

1、引入jar包

代码语言:javascript复制
 <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.3.0</version>
  </dependency>

使用的版本为3.3.0,后续都以这个版本讲述。

2、编写主配置文件

使用Xml描述,命名随意,根据公司规范,如mybatis-config.xml,以下为样例:

代码语言:javascript复制
<?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>
    <settings>
        <setting name="lazyLoadingEnabled" value="false"/>
    </settings>

    <typeAliases>
    </typeAliases>
    <mappers>
        <mapper resource="dal/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

可以看到Xml中顶层节点为configuration,有以下子元素:settings、typeAliases、mappers,当然还可以有其它子节点,后面单独讲述。

其中settings用来配置一些参数,mappers设置mapper文件, mapper文件就是我们编写Sql的地方,后面会讲。

3、配置数据源

可以在上面的主文件中配,以下为例:

代码语言:javascript复制
<?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>
<environments default="dev" >
    <environment id="dev">
      <transactionManager type="JDBC">
        <property name="" value="" />
      </transactionManager>
      <dataSource type="UNPOOLED">
        <property name="driver" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&amp;characterEncoding=UTF-8" />
        <property name="username" value="root" />
        <property name="password" value="123456" />
      </dataSource>
    </environment>
  </environments>
  
  </configuration>

如果是SpringBoot的程序一般在application.properties中配置,Spring会自动帮我们装配:

代码语言:javascript复制
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=UTF-8
spring.datasource.username = root
spring.datasource.password =123456

4、编写实体类

用于返回数据

代码语言:javascript复制
public class UserEntity {
    private Long id;
    private String name;
    private Date createTime;
    private String phone;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

}

5、编写接口类

代码语言:javascript复制
@Repository
public interface UserMapper {
    List<UserEntity> listAllUser();
}

上面我们只定义了一个方法。

6、编写Sql

前面我们在主配置文件中引入的Mapper文件:

代码语言:javascript复制
 <mappers>
        <mapper resource="dal/mapper/UserMapper.xml"/>
    </mappers>

现在相应目录编写文件内容:

代码语言:javascript复制
<?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.liujh.mapper.UserMapper">
    <sql id="userFields">
      id,name, phone,create_time
    </sql>

    <select id="listAllUser"  resultType="com.liujh.entity.UserEntity" >
        select
        <include refid="userFields"/>
        from user
    </select>

</mapper>

Mapper文件的顶层节点为mapper,其中namespace属性对应第4步编写的接口类的命名空间。

每一个sql语句都有相应的节点,查询语句对应select节点,其中重点的属性为id,和第4步编写的接口对应的方法:

代码语言:javascript复制
List<UserEntity> listAllUser();

这里为了重用把查询字段单独用一个节点表示。

resultType表示查询结果返回的类型,对应前面定义的UserEntity。

四、测试

代码语言:javascript复制
  @Resource
    private UserMapper userMapper;

    @Test
    public void testMapper(){
        List<UserEntity> userEntities = userMapper.listAllUser();
        Assert.assertEquals(userEntities.size(), 2);
    }

在一个测试类中注入UserMapper,当然可以手动new一个也行,然后debug下就可以看到userEntities的数据了

0 人点赞