# 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); } } ```