在前面两篇文章《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 测试结果如下: