SpringBoot学习三:整合Mybatis
2018-07-29 本文已影响19人
yuluo
Mybatis环境搭建
- 配置依赖
将我们第一次创建项目时注释的关于Mybatis与JDBC依赖打开。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>online.suiyu</groupId>
<artifactId>springboot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot-demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-data-redis</artifactId>-->
<!--</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.5.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 修改Controller添加访问路径
package online.suiyu.springbootdemo.controller;
@Api("测试类")
@RestController
@RequestMapping("index")
public class IndexController {
@Autowired
private UserService userService;
@ApiOperation(value = "index", notes = "测试方法", tags = {"hello"})
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String index() {
return "Hello,World!";
}
@ApiOperation(value = "getAllUser", notes = "获取所有的内容", tags = "user")
@RequestMapping(value = "/getalluser", method = RequestMethod.GET)
public List<User> getAllUser() {
return userService.getAllUser();
}
@ApiOperation(value = "getUserBySex", notes = "通过性别获取user", tags = "user")
@RequestMapping(value = "/getuserbysex", method = RequestMethod.GET)
public List<User> getUserBySex(@RequestParam(value = "sex", required = true) String sex) {
return userService.getUserBySex(sex);
}
}
对于上方代码,IDEA针对@Autowired
报了一个警告Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies".
Spring推荐使用构造器来注入bean
所以,程序中的bean引入应该写成这样:
private final UserDao userDao;
@Autowired
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
了解更多,查看知友的解释
- 修改service
package online.suiyu.springbootdemo.service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<User> getAllUser() {
return userMapper.getAllUser();
}
public List<User> getUserBySex(String sex) {
return userMapper.getUserBySex(sex);
}
}
- 创建mybatis的xml配置文件
namespace
名称需要与对应的DAO接口对齐
<?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="online.suiyu.springbootdemo.mapper.UserMapper">
<select id="getAllUser"
resultType="online.suiyu.springbootdemo.vo.User">
SELECT * from user
</select>
</mapper>
- 创建与xml配置文件对应的DAO接口
getUserBySex()
方法使用了注解形式,简单的增删改查可以使用注解方式。
package online.suiyu.springbootdemo.mapper;
@Component
public interface UserMapper {
List<User> getAllUser();
@Select("select * from user where sex = #{sex}")
List<User> getUserBySex(String sex);
}
- 在入口类中添加
@MapperScan
@SpringBootApplication
@MapperScan("online.suiyu.springbootdemo.mapper")
public class SpringbootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
- 在配置文件
application.yml
中配置Mybatis
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: online.suiyu.springbootdemo.vo
可以看出配置的主要是resource中的Mapper.xml文件与javabean文件。
至此,SpringBoot整合Mybatis完成,其项目结构为

如果出现异常,一般都是接口与xml文件对不齐。
添加数据库连接池druid
- 添加druid的maven依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
- 配置数据库连接池的参数

为程序体添加事务管理
- 在主程序中添加注解
@EnableTransactionManagement
开启事务管理 - 在所需的方法体上加上
@Transactional
即可
@Transactional
@Override
public boolean addUsers(List<User> userList) {
logger.info("UserServiceImpl.addUsers开始");
int num = userDao.addUsers(userList);
// int i = 10 / 0;
logger.info("UserServiceImpl.addUsers结束");
return num > 0;
}