您现在的位置是:亿华云 > 域名
SpringBoot整合MyBatis完全使用注解方式定义Mapper
亿华云2025-10-09 03:53:33【域名】8人已围观
简介环境: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的。很多的b2b信息网解方第三方库都是通过实现该接口来动态注册Bean,比如EnableFeignClients用来扫描指定包下所有类上带有@FeignClient注解的式定类。
ImportBeanDefinitionRegistrar需要结合ClassPathBeanDefinitionScanner使用ClassPathBeanDefinitionScanner用来扫描那些类需要被动态注册为Bean。整合比如Mybatis中使用AutoConfiguredMapperScannerRegistrar来动态注册具有@Mapper注解的香港云服务器全使类。
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)) ; } }完毕!!!
很赞哦!(442)
热门文章
站长推荐
互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。
别人申请域名的好方法是什么?申请域名技巧须知
SAP UI5 Web Component React应用如何在Component之间跳转
2020年底网站域名续费贵吗?网站域名续费麻烦吗?
其次,一般域名注册有一个获取密码的按钮,域名注册商点击后会向您发送密码。在得到域名注册商发送的密码后,将其传输到域名服务提供商网站,然后输入密码,此时域名呈现申请状态。提交申请后,原注册人通常会向您发送一封电子邮件,询问您是否同意转让。此时,您只需点击同意转移按钮,域名注册商就可以成功转移。
女朋友还是游戏?一起来分析下游戏的开发与销售情况
NPM 实用命令与快捷方式
Redis vs Tendis:冷热混合存储版架构揭秘