一、添加启动依赖
在SpringBoot工程的maven文件里面添加依赖如下:
<properties>
<java.version>1.8</java.version>
<druid.version>1.1.13</druid.version>
<mybatis.version>2.1.0</mybatis.version>
<druid.version>1.1.21</druid.version>
</properties>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
这个启动器相关依赖如下
二、配置
1.在启动类*Application配置@MapperScan注解,告诉Spring Boot扫描哪些包下面的Mapper接口。如下
@SpringBootApplication
@MapperScan(basePackages = "com.soft.fireadmin.platform.*.dao")
public class FireAdminApplication {
public static void main(String[] args) {
SpringApplication.run(FireAdminApplication.class, args);
}
}
mybatis-spring提供的注解@MapperScan会自动扫描指定包下面的Java接口,把这些类装配到Spring IoC容器中。
或者在每个Mapper接口上标注@Mapper注解,这样SpringBoot就会自动扫描包下面的Java接口,并且Spring会自动创建对应Mapper接口的实现类,注册为Spring Bean。
(2)简单 配置application.properties 如下
#如果接口方法对应的XML放在resources目录下 需要告诉Mybatis哪里扫描Mapper
mybatis.mapper-locations=classpath:mapper/**/*.xml
#定义别名扫描的包 需要与@Alias一起使用
mybatis.type-aliases-package=com.soft.admin
#指定Mybatis配置文件 复杂配置可以单独写在 一个xml
mybatis.config-location=classpath:mybatis/mybatis-config.xml
#配置Mybatis插件 和拦截器
mybatis.configuration.interceptors=.....
#级联加载属性配置 当开启时,任何方法的调用都会加载该对象的所有属性。 否则,每个属性会按需加载
#在 3.4.1 及之前的版本默认值为 true
mybatis.configuration.aggressive-lazy-loading=false
#配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements);
# BATCH 执行器将重用语句并执行批量更新。
mybatis.executor-type=simple
三、编写代码
(1)在controller包下编写控制器类 EmpController.java
/**
* 员工控制器
*
* @author David Lin
* @version: 1.0
* @date 2019-11-10 22:35
*/
@RestController
@RequestMapping("/emp")
public class EmpController {
@Resource
private EmpService empService;
@RequestMapping("/findall")
public List<Emp> findAllEmpList(HttpServletRequest request) {
return empService.findAllEmpList();
}
}
(2)在service包下编写业务逻辑处理类 EmpService.java 和EmpServiceImpl.java
/**
* 员工业务接口
*
* @author David Lin
* @version: 1.0
* @date 2019-11-10 22:33
*/
public interface EmpService {
/**
* 查询所有员工列表
* @return
*/
List<Emp> findAllEmpList();
/**
* 根据员工编号获取员工信息
* @param empno
* @return
*/
Emp getEmpById(String empno);
}
------------------------------
/**
* 员工业务接口实现
*
* @author David Lin
* @version: 1.0
* @date 2019-11-10 22:32
*/
@Service("empService")
public class EmpServiceImpl implements EmpService {
/**
* 员工数据操作对象
*/
@Resource
private EmpMapper empMapper;
@Override
public List<Emp> findAllEmpList() {
return empMapper.findAllEmpList();
}
@Override
public Emp getEmpById(String empno) {
return empMapper.getEmpById(empno);
}
}
(3)在dao包下编写 数据访问接口和 Mapper XML映射文件 EmpMapper.java 和EmpMapper.xml
/**
* 员工数据操作接口
*
* @author David Lin
* @version: 1.0
* @date 2019-11-10 22:12
*/
public interface EmpMapper {
/**
* 查询所有员工列表
* @return
*/
List<Emp> findAllEmpList();
/**
* 根据员工编号获取员工信息
* @param empno
* @return
*/
Emp getEmpById(String empno);
}
<?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.soft.fireadmin.platform.emp.dao.EmpMapper">
<resultMap id="BaseResultMap" type="com.soft.fireadmin.platform.emp.model.Emp">
<id column="empno" property="empno" jdbcType="DOUBLE"/>
<result column="ename" property="ename" jdbcType="VARCHAR"/>
<result column="job" property="job" jdbcType="VARCHAR"/>
<result column="mgr" property="mgr" jdbcType="DOUBLE"/>
<result column="hiredate" property="hiredate" jdbcType="DATE"/>
<result column="sal" property="sal" jdbcType="DOUBLE"/>
<result column="comm" property="comm" jdbcType="DOUBLE"/>
<result column="deptno" property="deptno" jdbcType="DOUBLE"/>
</resultMap>
<select id="findAllEmpList" resultMap="BaseResultMap">
select e.* from emp e
</select>
<select id="getEmpById" resultMap="BaseResultMap">
select e.* from emp e where e.empno=#{empno,jdbcType=VARCHAR}
</select>
</mapper>
(4)在model包下 编写 持久化类 Emp.java
/**
* 雇员实体对象
*
* @author David Lin
* @version: 1.0
* @date 2019-03-17 11:30
*/
@Setter
@Getter
@ToString
public class Emp {
/**
* 员工编号
*/
private int empno;
/**
* 员工姓名
*/
private String ename;
/**
* 工作岗位
*/
private String job;
/**
* 领导者编号
*/
private int mgr ;
/**
* 入职时间
* 自定义输出格式
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
private Timestamp hiredate;
/**
* 薪水
*/
private double sal;
/**
* 奖金
*/
private double comm;
/**
* 所在部门编号
*/
private int deptno;
}
四、注意点
(1)Mapper XML映射文件如果和Mapper接口放在一起 就会被自动扫描到,但是Maven项目打包时会被略掉,这时候需要再maven配置文件pom.xml增加如下配置,避免打包时java目录下的Mapper XML映射文件被自动忽略掉。
<resources>
<!--Maven java目录下的xml资源在项目打包时会被忽略,所以配置如下, 防止mybatis的xml文件被忽略-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
如果Mapper XML映射文件放在resources目录下 则需要配置扫描mapper xml路径
(2)如果实体对象的时间类型是java.util.Date类型,保存和查询需要精确到时分秒的可以在XML里面的插入、更新方法和结果集 中配置 jdbcType=TIMESTAMP,这样日期保存时就会精确到时分秒。