IT科技

SpringBoot整合MyBatis完全使用注解方式定义Mapper

时间:2010-12-5 17:23:32  作者:应用开发   来源:IT科技类资讯  查看:  评论:0
内容摘要:环境:springboot2.3.11 + MyBatis3.5.6依赖<dependency><groupId>org.springframework.boot</gr

环境:springboot2.3.11 + MyBatis3.5.6

依赖

<dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency>   <groupId>org.mybatis.spring.boot</groupId>   <artifactId>mybatis-spring-boot-starter</artifactId>   <version>2.1.4</version> </dependency> <dependency>   <groupId>com.github.pagehelper</groupId>   <artifactId>pagehelper-spring-boot-starter</artifactId>   <version>1.3.0</version> </dependency> 

 应用配置

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 

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

分页配置:

mybatis配置:

启动类添加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注解的云南idc服务商全使类。

Mapper接口定义

public interface UsersMapper {    /**    *  <p>查询所有数据</p>    *  <p>时间:2021年4月21日-上午9:18:54</p>    * @author xg    * @return List<Users>    */   @Select("SELECT * FROM t_users")   @Results(id = "users",用注义 value = { @Result(property = "name", column = "name", javaType = String.class),    @Result(property = "password", column = "password")})   List<Users> findAll() ;   /**    *  <p>根据主键ID查询</p>    *  <p>时间:2021年4月21日-上午9:19:34</p>    * @author xg    * @param id 主键ID    * @return Users    */   @Select("SELECT * FROM t_users WHERE id = #{ id}")   @ResultMap("users")   Users findById(String id) ;   /**    *  <p>保存数据</p>    *  <p>时间:2021年4月21日-上午9:21:14</p>    * @author xg    * @param users    * @return int 影响行数    */   @Insert("insert into t_users values(#{ id}, #{ password}, #{ username})")   int saveUsers(Users users) ;   /**    *  <p>更新数据</p>    *  <p>时间:2021年4月21日-上午9:22:19</p>    * @author xg    * @param users    * @return int 影响行数    */   @Update("UPDATE t_users SET username = #{ username}, password = #{ password} WHERE id = #{ id}")   int updateUsers(Users users) ;   /**    *  <p>根据主键ID删除</p>    *  <p>时间:2021年4月21日-上午9:23:36</p>    * @author xg    * @param id 主键ID    * @return int 影响行数    */   @Delete("DELETE FROM t_users where id = #{ id}")   int deleteById(String id) ;   /**    *  <p>通过SelectProvider实现动态SQL语句查询</p>    *  <p>时间:2021年5月21日-上午9:30:00</p>    * @author xg    * @param users    * @return List<Users>    */   @SelectProvider(type = UsersProvider.class, method = "selectLikeUsers")   @ResultMap("users")   List<Users> selectLikeUsers(Users users) ;   /**    *  <p>通过UpdateProvider实现动态SQL更新操作</p>    *  <p>时间:2021年5月21日-上午9:36:48</p>    * @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<Users> 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)) ;   } } 

 完毕!!!

copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap