怎么在SpringBoot中整合MyBatis定义Mapper

本篇文章给大家分享的是有关怎么在SpringBoot中整合MyBatis定义Mapper,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

惠农网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联从2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

依赖

   org.springframework.boot   spring-boot-starter-web     org.mybatis.spring.boot   mybatis-spring-boot-starter   2.1.4     com.github.pagehelper   pagehelper-spring-boot-starter   1.3.0 

 应用配置

pagehelper:   helperDialect: MySQL   reasonable: true   pageSizeZero: true   offsetAsPageNum: true   rowBoundsWithCount: true --- mybatis:   type-aliases-package: com.pack.domain   configuration:     lazy-loading-enabled: false     aggressive-lazy-loading: false        logImpl: org.apache.ibatis.logging.stdout.StdOutImpl     mapUnderscoreToCamelCase: true

以上配置请查看官方文档说明:

分页配置:

怎么在SpringBoot中整合MyBatis定义Mapper

mybatis配置:

怎么在SpringBoot中整合MyBatis定义Mapper

启动类添加Mapper扫描

@SpringBootApplication @MapperScan({"com.pack.mapper"}) public class SpringBootMyBatisApplication {    public static void main(String[] args) {     SpringApplication.run(SpringBootMyBatisApplication.class, args);   }  }

添加@MapperScan注解后,就不需要在每个Mapper上添加@Mapper注解了。

核心处理类:

MapperScannerRegistrar.java

public class MapperScannerRegistrar implements ImportBeanDefinitionRegistrar, ResourceLoaderAware { }

ImportBeanDefinitionRegistrar类的主要功能就是用来动态注册Bean的。很多的第三方库都是通过实现该接口来动态注册Bean,比如EnableFeignClients用来扫描指定包下所有类上带有@FeignClient注解的类。

ImportBeanDefinitionRegistrar需要结合ClassPathBeanDefinitionScanner使用ClassPathBeanDefinitionScanner用来扫描那些类需要被动态注册为Bean。比如Mybatis中使用AutoConfiguredMapperScannerRegistrar来动态注册具有@Mapper注解的类。

Mapper接口定义

public interface UsersMapper {        /**    *  

查询所有数据

    *  

时间:2021年4月21日-上午9:18:54

    * @author xg    * @return List    */   @Select("SELECT * FROM t_users")   @Results(id = "users", value = {@Result(property = "name", column = "name", javaType = String.class),    @Result(property = "password", column = "password")})   List findAll() ;        /**    *  

根据主键ID查询

    *  

时间:2021年4月21日-上午9:19:34

    * @author xg    * @param id 主键ID    * @return Users    */   @Select("SELECT * FROM t_users WHERE id = #{id}")   @ResultMap("users")   Users findById(String id) ;        /**    *  

保存数据

    *  

时间:2021年4月21日-上午9:21:14

    * @author xg    * @param users    * @return int 影响行数    */   @Insert("insert into t_users values(#{id}, #{password}, #{username})")   int saveUsers(Users users) ;        /**    *  

更新数据

    *  

时间:2021年4月21日-上午9:22:19

    * @author xg    * @param users    * @return int 影响行数    */   @Update("UPDATE t_users SET username = #{username}, password = #{password} WHERE id = #{id}")   int updateUsers(Users users) ;        /**    *  

根据主键ID删除

    *  

时间:2021年4月21日-上午9:23:36

    * @author xg    * @param id 主键ID    * @return int 影响行数    */   @Delete("DELETE FROM t_users where id = #{id}")   int deleteById(String id) ;        /**    *  

通过SelectProvider实现动态SQL语句查询

    *  

时间:2021年5月21日-上午9:30:00

    * @author xg    * @param users    * @return List    */   @SelectProvider(type = UsersProvider.class, method = "selectLikeUsers")   @ResultMap("users")   List selectLikeUsers(Users users) ;        /**    *  

通过UpdateProvider实现动态SQL更新操作

    *  

时间:2021年5月21日-上午9:36:48

    * @author xg    * @param users    * @return int 影响行数   */   @UpdateProvider(type = UsersProvider.class, method = "updateByProvider")   int updateByProvider(@Param("users") Users users) ; }

说明:

@Results注解添加了id属性后,在其他的方法中可以通过@ResultMap("users")来引用。

@*Provider用来动态的定义SQL语句。

public class UsersProvider {    public String selectLikeUsers(Users users) {     StringBuilder sql = new StringBuilder("SELECT * FROM t_users t where 1=1 ");       if(users.getUsername() != null && users.getUsername().trim().length() > 0) {          sql.append(String.format("and t.username like '%s'", "%" + users.getUsername() + "%"));       }     return sql.toString();     }        public String updateByProvider(@Param("users") Users users) {     SQL sql = new SQL() ;     sql.UPDATE("t_users")       .SET("username = #{users.username}", "password = #{users.password}")       .WHERE("id = #{users.id}") ;     return sql.toString() ;   }      }

 单元测试

@RunWith(SpringRunner.class) @SpringBootTest public class UsersMapperTest {        @Resource   private UsersMapper usersMapper ;        @Test   public void testFindAll() {     Page page = PageHelper.startPage(1, 2) ;     usersMapper.findAll() ;     System.out.println(page.getResult()) ;     System.out.println(page.getTotal() + "\n" + page.getPages()) ;   }        @Test   public void testFindById() {     System.out.println(usersMapper.findById("1")) ;   }        @Test   public void testSaveUsers() {     Users users = new Users() ;     users.setId("4") ;     users.setPassword("123456") ;     users.setUsername("zhangsan") ;     System.out.println(usersMapper.saveUsers(users)) ;   }        @Test   public void testUpdateUser() {     Users users = new Users() ;     users.setId("3") ;     users.setPassword("111111") ;     users.setUsername("zhangsan") ;     System.out.println(usersMapper.updateUsers(users)) ;   }        @Test   public void testDeleteById() {     System.out.println(usersMapper.deleteById("3")) ;   }        @Test   public void testSelectLikeUsers() {     Users users = new Users() ;     users.setUsername("gu") ;     System.out.println(usersMapper.selectLikeUsers(users)) ;   }        @Test   public void testUpdateByProvider() {     Users users = new Users() ;     users.setId("2") ;     users.setPassword("111111") ;     users.setUsername("guest") ;     System.out.println(usersMapper.updateByProvider(users)) ;   }      }

以上就是怎么在SpringBoot中整合MyBatis定义Mapper,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


网站题目:怎么在SpringBoot中整合MyBatis定义Mapper
分享网址:http://ybzwz.com/article/jjdooi.html