SpringBoot2.x学习-集成Mybatis框架

a 夏天 提交于 2020-02-12 11:31:19

一、添加启动依赖

在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,这样日期保存时就会精确到时分秒。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!