Spring Boot 初級入門教程(十八) —— 整合 MyBatis 另外一種開發方式
在前面兩篇文章《Spring Boot 初級入門教程(十五) —— 整合 MyBatis》和《Spring Boot 初級入門教程(十七) —— 通過 Oracle 資料庫測試已整合 MyBatis(附原始碼)》中,介紹瞭如何在 SpringBoot 中整合 MyBatis 以及通過 MySQL 和 Oracle 資料庫來測試,這篇簡單再聊聊整合 MyBatis 後的另外一種開發方式。
一、新增 MyBatis 依賴包
在 pom 檔案中,新增支援 MyBatis 的依賴包,和教程十五中一樣,不再贅述。
二、新建存放 xml 的目錄
在 resources 目錄下,建立目錄,和教程十七中一樣,不再贅述。
三、配置讀取 xml 檔案的路徑
在 properties 檔案中,配置讀取 xml 檔案的路徑資訊,和教程十七中一樣,不再贅述。
四、建立包
為了讓程式碼目錄更加資訊明瞭,需要建立幾個包。這裡不需要原來的 mapper 包,只需要 service,以及在 service 包下再建立存放實現類的包 Impl(大寫是IMPL,小寫是impl),另外建立一個 common 包,用來存放共通程式碼,如圖:
五、編寫測試程式碼
實體類 UserInfo.java 複用教程十五中的類即可。
SQL 指令碼 mybati-mapper2.xml(這裡通過 Oracle 資料庫測試,所以放在 mapper/oracle 下):
<?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.menglanglang.test.springboot.mapper.MyBatisMapper2"> <resultMap id="UserMap" type="com.menglanglang.test.springboot.entity.UserInfo"> <result column="ID" property="id" jdbcType="INTEGER" /> <result column="NAME" property="name" jdbcType="VARCHAR" /> <result column="AGE" property="age" jdbcType="INTEGER" /> </resultMap> <select id="selectUserList2" resultMap="UserMap"> select * from user_info </select> <select id="selectUser2" parameterType="java.lang.Integer" resultMap="UserMap"> select * from user_info where id = #{id,jdbcType=INTEGER} </select> </mapper>
注意:Mapper 介面 MyBatisMapper.java 不需要建立了。
資料庫介面查詢封裝類 DaoHelper.java,放在 common 包下:
package com.menglanglang.test.springboot.common;
import java.util.List;
import java.util.Map;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @desc 資料庫查詢封裝
*
* @see 封裝了基本的查詢方法,包括增刪改查分頁查等。 使用此類時,使用 @Resource 或 @Autowired 註解注入。
* @author 孟郎郎
* @blog http://blog.csdn.net/tzhuwb
* @version 1.0
* @date 2018年10月19日下午4:25:20
*/
@Component
public class DaoHelper {
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
public DaoHelper(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
}
/**
* 根據條件刪除記錄
*
* @param _mybitsId
* @param obj
* @return
*/
public <T> int delete(String _mybitsId, T obj) {
return sqlSessionTemplate.delete(_mybitsId, obj);
}
/**
* 將指定的物件插入到資料庫
*
* @param _mybitsId
* @param obj
* @return
*/
public <T> int insert(String _mybitsId, T obj) {
return sqlSessionTemplate.insert(_mybitsId, obj);
}
/**
* 更新
*
* @param _mybitsId
* @param obj
* @return
*/
public <T> int update(String _mybitsId, T obj) {
return sqlSessionTemplate.update(_mybitsId, obj);
}
/**
* 查詢一條記錄
*
* @param _mybitsId
* @param object
* @return
*/
public Object queryOne(String _mybitsId, Object object) {
return sqlSessionTemplate.selectOne(_mybitsId, object);
}
/**
* 無條件查詢結果集,返回List<T>
*
* @param _mybitsId
* @return
*/
public <T> List<T> queryForList(String _mybitsId) {
return sqlSessionTemplate.selectList(_mybitsId);
}
/**
* 查詢結果集,查詢引數為Map,返回List<T>
*
* @param _mybitsId
* @param _params
* @return
*/
public <T> List<T> queryForList(String _mybitsId, Map<String, Object> _params) {
return sqlSessionTemplate.selectList(_mybitsId, _params);
}
/**
* 查詢結果集,查詢引數為Object,返回List<T>
*
* @param _mybitsId
* @param _params
* @return
*/
public <T> List<T> queryForList(String _mybitsId, Object _params) {
return sqlSessionTemplate.selectList(_mybitsId, _params);
}
}
服務介面類 MyBatisService2.java:
package com.menglanglang.test.springboot.service;
import java.util.List;
import com.menglanglang.test.springboot.entity.UserInfo;
/**
* @desc MyBatis服務介面類
*
* @author 孟郎郎
* @blog http://blog.csdn.net/tzhuwb
* @version 1.0
* @date 2018年10月19日下午4:30:23
*/
public interface MyBatisService2 {
/**
* 查詢使用者資訊列表
*
* @return 使用者資訊列表
*/
List<UserInfo> getUserList();
/**
* 查詢指定使用者
*
* @param id
* 使用者ID
* @return 使用者資訊
*/
UserInfo getUser(int id);
}
服務實現類 MyBatisServiceImpl2.java:
package com.menglanglang.test.springboot.service.Impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.menglanglang.test.springboot.common.DaoHelper;
import com.menglanglang.test.springboot.entity.UserInfo;
import com.menglanglang.test.springboot.service.MyBatisService2;
/**
* @desc MyBatis服務實現類
*
* @author 孟郎郎
* @blog http://blog.csdn.net/tzhuwb
* @version 1.0
* @date 2018年10月19日下午4:29:57
*/
@Service
public class MyBatisServiceImpl2 implements MyBatisService2 {
@Autowired
private DaoHelper daoHelper;
@Override
public List<UserInfo> getUserList() {
return daoHelper.queryForList("com.menglanglang.test.springboot.mapper.MyBatisMapper2.selectUserList2");
}
@Override
public UserInfo getUser(int id) {
return (UserInfo) daoHelper.queryOne("com.menglanglang.test.springboot.mapper.MyBatisMapper2.selectUser2", id);
}
}
測試類 MyBatisController2.java:
package com.menglanglang.test.springboot.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.menglanglang.test.springboot.entity.UserInfo;
import com.menglanglang.test.springboot.service.MyBatisService2;
/**
* @desc MyBatis測試控制類
*
* @author 孟郎郎
* @blog http://blog.csdn.net/tzhuwb
* @version 1.0
* @date 2018年10月19日下午4:35:18
*/
@RestController
@RequestMapping("/mybatis2")
public class MyBatisController2 {
@Autowired
private MyBatisService2 myBatisService2;
@RequestMapping("/getUsers")
public List<UserInfo> getUsers() {
List<UserInfo> list = myBatisService2.getUserList();
return list;
}
@RequestMapping("/getUser")
public UserInfo getUser() {
UserInfo user = myBatisService2.getUser(3);
return user;
}
}
六、啟動專案並測試
啟動專案,瀏覽器訪問 http://localhost:8080/mybatis/getUser 和 http://localhost:8080/mybatis/getUsers 測試結果如下: