当前位置: 首页 > 科技观察

SpringBoot完全使用注解方式集成MyBatis,定义Mapper

时间:2023-03-14 18:23:38 科技观察

环境:springboot2.3.11+MyBatis3.5.6依赖org.springframework.bootspring-boot-starter-weborg.mybatis.spring.bootmybatis-spring-boot-starter2.1.4com.github.pagehelperpagehelper-spring-boot-starter1.3.0应用配置pagehelper:helperDialect:mysqlreasonable:truepageSizeZero:trueoffsetAsPageNum:truerowBoundsWithCount:true---mybatis:type-aliases-package:com.pack.domainconfiguration:lazy-loading-enabled:falseaggressive-lazy-loading:falselogImpl:org.apache.ibatis.logging.stdout.StdOutImplmapUnderscoreToCamelCase:true以上配置请参考官方文档:分页配置:mybatis配置:添加Map每次扫描@Spr到启动类ingBootApplication@MapperScan({"com.pack.mapper"})publicclassSpringBootMyBatisApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringBootMyBatisApplication.class,args);}}添加@MapperScan注解后就不用再添加了在每个Mapper中的@MapperScan注解添加@Mapper注解核心处理类:MapperScannerRegistrar.javapublicclassMapperScannerRegistrariimplementsImportBeanDefinitionRegistrar,ResourceLoaderAware{}ImportBeanDefinitionRegistrar类主要作用是动态注册bean。许多第三方库通过实现此接口来动态注册bean。例如EnableFeignClients用于扫描指定包下所有带有@FeignClient注解的类。ImportBeanDefinitionRegistrar需要和ClassPathBeanDefinitionScanner结合使用ClassPathBeanDefinitionScanner扫描那些需要动态注册为bean的类。例如Mybatis中使用AutoConfiguredMapperScannerRegistrar来动态注册带有@Mapper注解的类。Mapper接口定义publicinterfaceUsersMapper{/***

查询所有数据

*

时间:2021-04-21-9:18:54AM

*@authorxg*@returnList*/@Select("SELECT*FROMt_users")@Results(id="users",value={@Result(property="name",column="name",javaType=String.class),@Result(property="password",column="password")})ListfindAll();/***

根据主键ID查询

*

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

*@authorxg*@paramid主键ID*@returnUsers*/@Select("SELECT*FROMt_usersWHEREid=#{id}")@ResultMap("users")UsersfindById(Stringid);/***

保存数据

*

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

*@authorxg*@paramusers*@returnintaffected行数*/@Insert("insertintot_usersvalues(#{id},#{password},#{username})")intsaveUsers(Usersusers);/***

更新数据

*

时间:2021年4月21日周日-9:22:19AM

*@authorxg*@paramusers*@returnint受影响的行数*/@Update("UPDATEt_usersSETusername=#{username},password=#{password}WHEREid=#{id}")intupdateUsers(Usersusers);/***

根据主键ID删除

*

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

*@authorxg*@paramid主键ID*@returnint受影响的行数*/@Delete("DELETEFROMt_userswhereid=#{id}")intdeleteById(Stringid);/***

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

*

时间:2021-05-21-9:30:00

*@authorxg*@paramusers*@returnList*/@SelectProvider(type=UsersProvider.class,method="selectLikeUsers")@ResultMap("users")ListselectLikeUsers(Usersusers);/***

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

*

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

*@authorxg*@paramusers*@returnintAffectedrows*/@UpdateProvider(type=UsersProvider.class,method="updateByProvider")intupdateByProvider(@Param("users")Usersusers);}说明:@Results注解添加id属性后,@ResultMap("users")可以在其他m中引用@*Provider动态定义SQL语句的方法。publicclassUsersProvider{publicStringselectLikeUsers(Usersusers){StringBuildersql=newStringBuilder("SELECT*FROMt_userstwhere1=1");if(users.getUsername()!=null&&users.getUsername().trim().length()>0){sql.append(String.format("andt.usernamelike'%s'","%"+users.getUsername()+"%"));}returnsql.toString();}publicStringupdateByProvider(@Param("users")Usersusers){SQLsql=newSQL();sql.UPDATE("t_users").SET("username=#{users.username}","password=#{users.password}").WHERE("id=#{users.id}");returnsql.toString();}}元测试@RunWith(SpringRunner.class)@SpringBootTestpublicclassUsersMapperTest{@ResourceprivateUsersMapperusersMapper;@TestpublicvoidtestFindAll(){Pagepage=PageHelper.startPage(1,2);usersMapper.findAll();System.out.println(page.getResult());System.out.println(page.getTotal()+"\n"+page.getPages());}@TestpublicvoidtestFindById(){System.out.println(usersMapper.findById("1"));}@TestpublicvoidtestSaveUsers(){Usersusers=newUsers();users.setId("4");users.setPassword("123456");users.setUsername("zhangsan");System.out.println(usersMapper.saveUsers(users));}@TestpublicvoidtestUpdateUser(){Usersusers=newUsers();users.setId("3");users.setPassword("111111");users.setUsername("zhangsan");System.out.println(usersMapper.updateUsers(users));}@TestpublicvoidtestDeleteById(){System.out.println(usersMapper.deleteById("3"));}@TestpublicvoidtestSelectLikeUsers(){Usersusers=newUsers();users.setUsername("gu");System.out.println(usersMapper.selectLikeUsers(users));}@TestpublicvoidtestUpdateByProvider(){Usersusers=newUsers();users.setId("2");用户。setPassword("111111");users.setUsername("guest");System.out.println(usersMapper.updateByProvider(users));}}完成!!!