# springboot2-mybatis
**Repository Path**: knowz/springboot2-mybatis
## Basic Information
- **Project Name**: springboot2-mybatis
- **Description**: springboot2集成mybatis框架
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2018-04-18
- **Last Updated**: 2023-06-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# springboot2-mybatis
springboot2集成mybatis框架。
## 实现步骤
### 1. 在pom.xml文件中导入依赖
```
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.1
mysql
mysql-connector-java
```
### 2. 配置 application.yml文件
```
mybatis:
# 配置xml文件的位置
mapper-locations: classpath:mapper/*.xml
logging:
level:
# 打印sql
com.bici.mapper: debug
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/springbootdb
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
```
### 3. 编写mapper层代码
```
@Mapper
@Repository
public interface UserMapper {
/**
* 保存数据
*
* @param user
*/
void save(User user);
/**
* 通过ID查询数据
*
* @param id
* @return
*/
User getById(Integer id);
/**
* 查询所有数据
*
* @return
*/
void update(User user);
/**
* 通过ID删除数据
*
* @param id
*/
void delete(Integer id);
}
```
### 4. 编写xml文件,sql代码都是在这里面编写
- xml文件的namespace属性值为dao层的全类名
- id 为dao层的方法
```
SELECT LAST_INSERT_ID()
insert into `user`(`name`, age) values (#{name}, #{age})
UPDATE `user` SET `name` = #{name}, age = #{age} WHERE id = #{id}
DELETE FROM `user` WHERE id = #{id}
```
## 实现分页功能
1.在pom.xml文件中导入依赖
```
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.3
```
2.使用分页功能
PageInfo封装了很多分页需要用到的数据
**PageHelper.startPage()方法后面紧跟的mybatis的查询才有分页查询功能**
```
@Test
public void test1() {
// 查询第一页,一页2条数据
PageHelper.startPage(1, 2);
List users = userMapper.list();
PageInfo pageInfo = PageInfo.of(users);
System.out.println(pageInfo);
}
```
## 使用redis进行缓存查询
### 1. 在pom.xml文件中导入依赖
```
org.springframework.boot
spring-boot-starter-data-redis
```
### 2. 在启动类中添加使用缓存的注解
```
@EnableCaching
```
### 3. 在application.yml中配置redis的信息
```
spring:
redis:
host: localhost
port: 6379
```
### 4. 在service层配置缓存注解
- 注意:配置在dao层会抛出找不到key的错误
- 解决方式1:配置在service层
- 解决方式2:自定义一种key的生成策略
```
/**
* 使用@CacheConfig是一个类级别的注解,允许共享缓存的名称、KeyGenerator、CacheManager 和CacheResolver。
*
* @author: keluosi@bicitech.cn
* @date: 2018/5/17
*/
@Service
@CacheConfig(cacheNames = "user")
public class UserService {
@Autowired
private UserMapper userMapperr;
/**
* 使用@CachePut:在新增对象时就放入缓存中,一般不建议这么做,因为会造成缓存过多,也没有必要每条新增数据都放入缓存
*
* @param user
*/
public void save(User user) {
userMapperr.save(user);
}
/**
* 通过ID查询数据
* unless:true表示不保存到缓存,与condition相反
*
* @param id
* @return
*/
@Cacheable(key = "#id", unless = "#result == null")
public User getById(Integer id) {
return userMapperr.getById(id);
}
/**
* 使用@CacheEvict消除缓存,在每次对数据进行删除时,就清除缓存。
*
* @param id
*/
@CacheEvict(key = "#id")
public void delete(Integer id) {
userMapperr.delete(id);
}
/**
* 修改时建议清除缓存,而不是重新放入缓存,这样可以避免多个线程修改相同数据时,
* 最后有效的修改不是放入缓存的数据,造成数据不是最新数据。
*
* @param user
*/
@CacheEvict(key = "#user.id")
public void update(User user) {
userMapperr.update(user);
}
}
```