1. 程式人生 > >第10章 整合MyBatis

第10章 整合MyBatis

10.1 MyBatis介紹

10.1.1 MyBatis概述

MyBatis是一款優秀的持久層框架,它支援定製化SQL、儲存過程以及高階對映。MyBatis避免了幾乎所有的JDBC程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。

10.2 整合MyBatis

10.2.1 引入依賴

在Spring Boot中整合Mybatis,首先需要在pom.xml檔案中引入所需的依賴,具體程式碼如下:

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>

10.2.2 新增MyBatis配置

在pom檔案新增Mybatis所需的依賴之後,我們需要在application.properties檔案中新增如下的配置資訊:

### mybatis配置
mybatis.mapper-locations=classpath:/mappers/*Mapper.xml
mybatis.type-aliases-package=com.example.demo.dao

mybatis.mapper-locations:Mapper資原始檔存放的路徑。 mybatis.type-aliases-package:Dao介面檔案存放的目錄。

10.2.3 Dao層和Mapper檔案開發

application.properties配置新增完成之後,我們需要根據MyBatis配置新增對應的資料夾。首先,我們需要在/src/main/java/com.example.demo.dao目錄下新建AyUserDao介面,這樣Spring Boot啟動時候,就可以根據application.properties配置mybatis.type-aliases-package,找到AyUserDao介面。AyUserDao具體程式碼如下:

/**
 * 描述:使用者DAO
 * @author Ay
 * @date   2017/11/20.
 */
@Mapper
public interface AyUserDao {

    /**
     *  描述:通過使用者名稱和密碼查詢使用者
     * @param name
     * @param password
     */
    AyUser findByNameAndPassword(@Param("name") String name, 
@Param("password") String password);

}

@Mapper:重要註解, MyBatis根據介面定義與Mapper檔案中的SQL語句動態建立介面實現。 @Param:註解引數,在Mapper.xml配置文件鐘,可以採用#{}的方式對@Param註解括號內的引數進行引用。 findByNameAndPassword:該方法可以通過使用者名稱和密碼查詢使用者。 然後我們在/src/main/resources目錄下新建AyUserMapper.xml檔案,Spring Boot在專案啟動時候,會根據application.properties配置mybatis.mapper-locations找到該檔案。AyUserMapper具體程式碼如下: <?xml version="1.0" encoding="UTF-8" ?>

    <resultMap id="UserResultMap" type="com.example.demo.model.AyUser">
        <id column="id" property="id" jdbcType="VARCHAR"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="password" property="password" jdbcType="VARCHAR"/>
        <result column="mail" property="mail" jdbcType="VARCHAR"/>
    </resultMap>

   <select id="findByNameAndPassword" resultMap="UserResultMap" parameterType="String">
          select * from ay_user u
        <where>
            u.name = #{name}
            and u.password = #{password}
        </where>
    </select>

</mapper>

< mapper>標籤:該標籤的namespace屬性用於繫結繫結Dao介面的。 < select>標籤:用來編寫select語句,對映查詢語句。select標籤有幾個重要的屬性,比如:resultMap < resultMap>:對映管理器resultMap,是Mybatis中最強大的工具,描述瞭如何將資料庫查詢的結果集對映到Java物件,並管理結果和實體類之間的對映關係。 AyUserDao程式碼開發完成之後,我們在之前開發好的AyUserService介面類中新增新增介面findByNameAndPassword。具體程式碼如下:

/**
 * 描述:使用者服務層介面
 * @author 阿毅
 * @date   2017/10/14
 */
public interface AyUserService {
         //此處省略程式碼

    AyUser findByNameAndPassword(String name, String password);

}

然後,我們在AyUserServiceImpl類中實現findByNameAndPassword介面,具體程式碼如下:

/**
 * 描述:使用者服務層實現類
 * @author 阿毅
 * @date   2017/10/14
 */
//@Transactional
@Service
public class AyUserServiceImpl implements AyUserService {

    //此處省略程式碼

    @Resource
    private AyUserDao ayUserDao;

    @Override
    public AyUser findByNameAndPassword(String name, String password) {
        return ayUserDao.findByNameAndPassword(name, password);
    }
}

10.2.4 測試

程式碼開發完成之後,我們在MySpringBootApplicationTests類下新增測試方法,具體程式碼如下:

@Resource
private AyUserService ayUserService;

@Test
public void testMybatis(){
	AyUser ayUser = ayUserService.findByNameAndPassword("阿毅", "123456");
	logger.info(ayUser.getId() + ayUser.getName());

}

執行測試用例,在Intellij IDEA控制檯可以看到相應的列印資訊。