引言
最近在工作结束后抽时间学习了一下mybatis的知识,因为之前有学习过,但是经久不用,也未曾踏实地整理,因此有所淡忘。
super meeting会议管理系统是我厂最近开发的一套会议预约平台。持久层框架经讨论,选为灵活优秀的半自动持久层框架Mybatis。
关于mybatis的有点和简介不做本系列学习博客的重点,在此不做记录。
学习的方式采用视频+实践的学练组合方式。结合一直接触的spring boot框架,重温mybatis的使用和各种应用场景的解决方案。
学习的视频连接:https://www.bilibili.com/video/av21272940
项目搭建
pom依赖
项目采用maven管理的spring boot方式,添加pom依赖:
此处需要引入Mybatis的spring boot start包 和 mysql的驱动依赖
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
这两项依赖可以直接在spring boot初始化界面的Search for dependencies 中找到:https://start.spring.io/
如何搭建spring boot项目,请参考《SpringBoot————快速搭建springboot项目》
建库建表
为方便日后学习mapper的使用,此处直接建立两张关联表:dept(部门表),employee(员工表)
插入测试数据:
数据源配置
servert.port=8080
#mysql
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
此处先简单配置数据源,mybatis相关配置稍后介绍。
定义接口与Mapper配置文件
根据mybatis的接口式编程方式,定义数据库操作方法的api可以与Mapper进行动态绑定。
接口与mapper.xml文件进行绑定后,调用接口中的增删改查时,Mybatis会为用户创建一个代理对象,由这个代理对象执行操作。
Mapper接口
@Mapper
public interface EmpDao {/*** 根据员工id查找员工*/Employee getEmpById(Integer empId);
}
@Mapper代表这是一个mybatis可以识别的Mapper接口。
mybatis的mapper-locations配置项、@Mapper注解、<mapper>标签的namespace属性,三者可以使mybatis找到任意目录下的Mapper配置文件以及与其绑定的接口。因此,接口名称可以根据喜好使用Dao或者Mapper结尾,并没有限制。
Mapper.xml配置
添加mybatis 的mapper.xml文件约束:
官网查找地址:http://www.mybatis.org/mybatis-3/getting-started.html
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.EmpDao"><select id="getEmpById" resultType="com.example.demo.entity.Employee">SELECT * FROM employee WHERE emp_id = #{empId}</select>
</mapper>
namespace指定绑定接口的全类名;id标识接口中与之绑定的方法;resultType表示返回值类型;#{empId}此处的empId代表接口中传入的参数(这里注意,如果是一个参数mybatis不会特殊处理;如果是多个参数,参数必须指定参数名,否则会报错!后续文章会说明这个问题。)
小提示:添加dtd约束后,如果在书写xml的时候没有任何提示,则可以在联网状态下Ctrl+左键点击约束中的链接“http://mybatis.org/dtd/mybatis-3-mapper.dtd”,这样可以加载xml的提示内容。
全局配置
最开始的spring 整合 mybatis的版本都是使用mybatis-config.xml配置文件,进行数据源,以及各种配置信息的配置。
当然这些配置项依然不变,变化的是配置项书写的方式,以及去掉了mybatis-config全局配置文件。
官网中提供了有关spring boot需要的mybatis的全部配置信息:
http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/index.html
而configuration属性,更是包含了其他更加详细的settings项:
NOTE configuration property cannot be used at the same time with the config-location.
在configuration中,包含诸如mapUnderscoreToCamelCase(下划线转驼峰)、lazyLoadingEnabled(懒加载)、aggressiveLazyLoading(侵入式懒加载)、cacheEnabled(全局缓存)等配置项都是configuration中的子配置项。
项目搭建所需的简单配置项如下:
#mybatis
mybatis.mapper-locations=classpath:com/example/demo/dao/xml/*.xml
mybatis.configuration.mapUnderscoreToCamelCase=true
mybatis.type-aliases-package=com.example.demo.entity
最后观察一下我们的项目结构:
测试
为了简便测试,我们定义一个controller直接调用dao层的方法,以此来进行方法的测试,web接口采用RESTful 风格。
@RestController
@RequestMapping("/emps")
public class EmpController {@Autowiredprivate EmpDao empDao;@GetMapping("/{empId}")public Employee getEmpById(@PathVariable Integer empId) {return empDao.getEmpById(empId);}
}
浏览器调用接口:
综上,就是关于spring boot + mybatis 的简单整合与使用,后续会进行更加深入的学习和使用。