一、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,然后创建表,表结构如下:
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;
很简单的一张表,包含几个字段:姓名,手机和创建时间
可以再加点数据:
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包
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.3.0</version></dependency>
使用的版本为3.3.0,后续都以这个版本讲述。
2、编写主配置文件
使用Xml描述,命名随意,根据公司规范,如mybatis-config.xml,以下为样例:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//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、配置数据源
可以在上面的主文件中配,以下为例:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//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&characterEncoding=UTF-8" /><property name="username" value="root" ><property name="password" value="123456" ></dataSource></environment></environments></configuration>
如果是SpringBoot的程序一般在application.properties中配置,Spring会自动帮我们装配:
spring.datasource.driverClassName = com.mysql.jdbc.Driverspring.datasource.url = jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8spring.datasource.username = rootspring.datasource.password =123456
4、编写实体类
用于返回数据
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、编写接口类
@Repositorypublic interface UserMapper {List<UserEntity> listAllUser();}
上面我们只定义了一个方法。
6、编写Sql
前面我们在主配置文件中引入的Mapper文件:
<mappers><mapper resource="dal/mapper/UserMapper.xml"/></mappers>
现在相应目录编写文件内容:
<?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步编写的接口对应的方法:
List<UserEntity> listAllUser();
这里为了重用把查询字段单独用一个节点表示。
resultType表示查询结果返回的类型,对应前面定义的UserEntity。
四、测试
@Resourceprivate UserMapper userMapper;@Testpublic void testMapper(){List<UserEntity> userEntities = userMapper.listAllUser();Assert.assertEquals(userEntities.size(), 2);}
在一个测试类中注入UserMapper,当然可以手动new一个也行,然后debug下就可以看到userEntities的数据了





