第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控制檯可以看到相應的列印資訊。