Springboot整合Mybatis有两种常用方式:一种是常见的XML方式,一种是全注解
准备
使用的是mysql5.7
添加Mybaits依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
配置文件
spring:
datasource:
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/localhost?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false
注意:使用的mysql版本是5.7。若使用高版本的mysql需要将driver改为
com.mysql.cj.jdbc.Driver
, 加上指定时区serverTimezone=GMT%2B8
数据库User表
CREATE TABLE `user` (
`id` int(13) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(33) DEFAULT NULL COMMENT '姓名',
`age` int(3) DEFAULT NULL COMMENT '年龄',
`money` double DEFAULT NULL COMMENT '账户余额',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
entity实体类
public class User {
private int id;
private String name;
private int age;
private double money;
......Getter和Setter
}
一:使用注解的方式实现
@Mapper
public interface UserDao {
/**
* 通过名字查询用户信息
*/
@Select("SELECT * FROM user WHERE name = #{name}")
User findUserByName(@Param("name") String name);
/**
* 查询所有用户信息
*/
@Select("SELECT * FROM user")
List<User> findAllUser();
/**
* 插入用户信息
*/
@Insert("INSERT INTO user(name, age,money) VALUES(#{name}, #{age}, #{money})")
void insertUser(@Param("name") String name, @Param("age") Integer age, @Param("money") Double money);
/**
* 根据 id 更新用户信息
*/
@Update("UPDATE user SET name = #{name},age = #{age},money= #{money} WHERE id = #{id}")
void updateUser(@Param("name") String name, @Param("age") Integer age, @Param("money") Double money,
@Param("id") int id);
/**
* 根据 id 删除用户信息
*/
@Delete("DELETE from user WHERE id = #{id}")
void deleteUser(@Param("id") int id);
}
UserService
@Service
public class UserService {
@Autowired
private UserDao userDao;
/**
* 根据名字查找用户
*/
public User selectUserByName(String name) {
return userDao.findUserByName(name);
}
/**
* 查找所有用户
*/
public List<User> selectAllUser() {
return userDao.findAllUser();
}
/**
* 插入两个用户
*/
public void insertService() {
userDao.insertUser("zzz", 21, 1111.0);
userDao.insertUser("bbb", 39, 3333.0);
}
/**
* 根据id 删除用户
*/
public void deleteService(int id) {
userDao.deleteUser(id);
}
/**
* 模拟事务。由于加上了 @Transactional注解,如果转账中途出了意外 SnailClimb 和 Daisy 的钱都不会改变。
*/
@Transactional
public void changemoney() {
userDao.updateUser("xxx", 29, 2000.0, 1);
// 模拟转账过程中可能遇到的意外状况
int temp = 1 / 0;
userDao.updateUser("ddd", 19, 4000.0, 2);
}
}
注入UserDao时 红色,显示找不到bean。因为注入UserDao的是接口,不用理会
Controller层
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/query")
public User testQuery() {
return userService.selectUserByName("ccc");
}
@RequestMapping("/insert")
public List<User> testInsert() {
userService.insertService();
return userService.selectAllUser();
}
@RequestMapping("/changemoney")
public List<User> testchangemoney() {
userService.changemoney();
return userService.selectAllUser();
}
@RequestMapping("/delete")
public String testDelete() {
userService.deleteService(2);
return "OK";
}
}
方式二:使用xml文件
修改UserDao
User findUserByName(String name);
添加UserMapp.xml
添加在resources资源文件夹下
<?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.example.demo.dao.UserDao">
<select id="findUserByName" parameterType="String" resultType="com.example.demo.entuty.User">
SELECT * FROM user WHERE name = #{name}
</select>
</mapper>
namespace与UserDao接口对应
修改全局配置文件application.xml
添加mybatis.mapper-locations=classpath:mapper/*.xml
。用于指定扫描mapper路径