1. 程式人生 > >Spring Boot 初級入門教程(十八) —— 整合 MyBatis 另外一種開發方式

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 測試結果如下: