您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關怎么在SpringBoot中整合MyBatis定義Mapper,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
<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配置:
@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注解的類。
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)) ; } }
以上就是怎么在SpringBoot中整合MyBatis定義Mapper,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。