SpringBoot2.x學習-集成Mybatis框架

一、添加啓動依賴

在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,這樣日期保存時就會精確到時分秒。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章