身为后端程序猿,我们经常打交道的除了Spring全家桶之外,那就是数据库了,现在让我们接着上一篇的SpringBoot快速搭建继续往下讲,SpringBoot如何快速整合MyBatis
上篇文章目录: SpringBoot项目快速搭建
无配置文件注解版
一、新建application.properties文件
二、添加数据库配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/user?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
springBoot会自动加载,然后将数据源信息自动注入sqlSessionFactory中,我们只需要配置即可!
三、添加依赖
<!-- myBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 添加 junit 环境jar包 测试使用 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
四、新建dao接口和类
IUserDao接口代码
@Mapper
public interface IUserDao {
@Select("SELECT id,name,age FROM user")
List<Map<String, Object>> findUsers();
}
UserDao代码
public class UserDao implements IUserDao {
@Autowired
IUserDao userDao;
@Override
public List<Map<String, Object>> findUsers() {
return userDao.findUsers();
}
}
此时要注意,IUserDao接口和实现类的包路径要在启动类(@SpringBootApplication注解标明的类)包的子路径下面,SpringBoot默认找@SpringBootApplication注解的包及子包,如果不在范围内需要使用注解标明,否则注入使用的时候就会报错
新建测试类
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = StartClass.class)
public class TestUserDao {
@Autowired
IUserDao userDao;
@Test
public void userTest() {
List<Map<String, Object>> users = userDao.findUsers();
System.out.println(JSONArray.toJSONString(users));
}
}
数据库数据
此时我们启动userTest方法
看到如下界面则表示成功,而在控制台上,也打印出了我们想得到的数据
上面的这种方式在我们项目中很少用到,一般项目中都是使用的xml配置版本的,将sql写在xml上,这样子代码的耦合会低很多,而且使用xml配置有利于后期的维护和复杂sql的编写
xml配置版本
重复上面一、二、三操作,这个时候我们在IUserDao新建一个findUser()方法
一、新增mybatis配置
application.properties文件
#基础配置文件、映射路径
#mybatis config
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
二、新增findUser方法
IUserDao接口新增findUser()方法
Map<String, Object> findUser(String userId);
UserDao代码
@Override
public Map<String, Object> findUser(String userId) {
return userDao.findUser(userId);
}
新增IUserDao.xml文件(namespace需要与对应接口匹配路径)
<?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.springboot.dao.IUserDao" >
<select id="findUser" parameterType="java.lang.String" resultType="java.util.Map">
SELECT id, name, age
FROM user
Where id = #{param1}
</select>
</mapper>
三、测试配置是否正确
@Test
public void userTest1() {
Map<String, Object> user = userDao.findUser("1");
System.out.println(JSONObject.toJSONString(user));
}
启动后,junit标识成功,并且控制台打印出数据,证明此事整合成功!
需要注意的点一个是,springboot扫描包的路径,还有一个就是IUserDao.xml里的namespace必须是对应IUserDao的接口路径,否则mybatis将会绑定错误的接口,导致报错
这是最终的项目目录