<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Mybatis-Plus(簡稱MP)是一個 Mybatis 的增強工具,在 Mybatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。這是官方給的定義,關於mybatis-plus的更多介紹及特性,可以參考mybatis-plus官網。那麼它是怎麼增強的呢?其實就是它已經封裝好了一些crud方法,我們不需要再寫xml了,直接呼叫這些方法就行,就類似於JPA。並且3.X系列支援lambda語法,讓我在寫條件構造的時候少了很多的"魔法值",從程式碼結構上更簡潔了.
pom.xml設定
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--springboot程式測試依賴,如果是自動建立專案預設新增--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> <scope>provided</scope> </dependency> <!-- 包含spirng Mvc ,tomcat的包包含requestMapping restController 等註解 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- druid依賴 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.0</version> </dependency> <!-- mybatisPlus 核心庫 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.0</version> </dependency> </dependencies>
application.yml設定
server: port: 10100 # 設定啟動埠號 mybatis: config-location: classpath:mybatis.cfg.xml # mybatis主組態檔所在路徑 type-aliases-package: com.demo.drools.entity # 定義所有操作類的別名所在包 mapper-locations: # 所有的mapper對映檔案 - classpath:mapper/*.xml spring: #springboot的設定 datasource: #定義資料來源 #127.0.0.1為本機測試的ip,3306是mysql的埠號。serverTimezone是定義時區,照抄就好,mysql高版本需要定義這些東西 #useSSL也是某些高版本mysql需要問有沒有用SSL連線 url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&useSSL=FALSE username: root #資料庫使用者名稱,root為管理員 password: 123456 #該資料庫使用者的密碼 # 使用druid資料來源 type: com.alibaba.druid.pool.DruidDataSource # mybatis-plus相關設定 mybatis-plus: # xml掃描,多個目錄用逗號或者分號分隔(告訴 Mapper 所對應的 XML 檔案位置) mapper-locations: classpath:mapper/*.xml # 以下設定均有預設值,可以不設定 global-config: db-config: #主鍵型別 AUTO:"資料庫ID自增" INPUT:"使用者輸入ID",ID_WORKER:"全域性唯一ID (數位型別唯一ID)", UUID:"全域性唯一ID UUID"; id-type: auto #欄位策略 IGNORED:"忽略判斷" NOT_NULL:"非 NULL 判斷") NOT_EMPTY:"非空判斷" field-strategy: NOT_EMPTY #資料庫型別 db-type: MYSQL configuration: # 是否開啟自動駝峰命名規則對映:從資料庫列名到Java屬性駝峰命名的類似對映 map-underscore-to-camel-case: true # 如果查詢結果中包含空值的列,則 MyBatis 在對映的時候,不會對映這個欄位 call-setters-on-nulls: true # 這個設定會將執行的sql列印出來,在開發或測試的時候可以用 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
使用者資訊實體
package com.demo.drools.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:14 */ @Data @TableName("user_info")//@TableName中的值對應著表名 public class UserInfoEntity { /** * 主鍵 * @TableId中可以決定主鍵的型別,不寫會採取預設值,預設值可以在yml中設定 * AUTO: 資料庫ID自增 * INPUT: 使用者輸入ID * ID_WORKER: 全域性唯一ID,Long型別的主鍵 * ID_WORKER_STR: 字串全域性唯一ID * UUID: 全域性唯一ID,UUID型別的主鍵 * NONE: 該型別為未設定主鍵型別 */ @TableId(type = IdType.AUTO) private Long id; /** * 姓名 */ private String name; /** * 年齡 */ private Integer age; /** * 技能 */ private String skill; /** * 評價 */ private String evaluate; /** * 分數 */ private Long fraction; }
config類
package com.demo.drools.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; import org.springframework.context.annotation.Bean; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:14 */ public class MybatisPlusConfig { /** * mybatis-plus SQL執行效率外掛【生產環境可以關閉】 */ @Bean public PerformanceInterceptor performanceInterceptor() { return new PerformanceInterceptor(); } /** * 分頁外掛 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }
spring boot啟動類
package com.demo.drools; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author 於嘉琪 */ @SpringBootApplication //@MapperScan和dao層新增@Mapper註解意思一樣 @MapperScan(basePackages = "com.demo.drools.dao") public class DroolsApplication { public static void main(String[] args) { SpringApplication.run(DroolsApplication.class, args); } }
dao層
package com.demo.drools.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.demo.drools.entity.UserInfoEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * 使用者資訊DAO * * @author Yujiaqi * @date 2020/12/2 19:16 */ @Mapper public interface UserInfoDao extends BaseMapper<UserInfoEntity> { }
service層
package com.demo.drools.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.demo.drools.entity.UserInfoEntity; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:17 */ public interface UserInfoService extends IService<UserInfoEntity> { }
serviceImpl實現類層
package com.demo.drools.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.demo.drools.dao.UserInfoDao; import com.demo.drools.entity.UserInfoEntity; import com.demo.drools.service.UserInfoService; import org.springframework.stereotype.Service; import javax.annotation.Resource; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:18 */ @Service public class UserInfoSerivceImpl extends ServiceImpl<UserInfoDao, UserInfoEntity> implements UserInfoService { }
controller控制層
package com.demo.drools.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.demo.drools.entity.UserInfoEntity; import com.demo.drools.service.UserInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:20 */ @RestController @RequestMapping("/userInfo") public class UserInfoController { @Autowired private UserInfoService userInfoService; /** * 根據ID獲取使用者資訊 * @Author Sans * @CreateTime 2019/6/8 16:34 * @Param userId 使用者ID * @Return UserInfoEntity 使用者實體 */ @RequestMapping("/getInfo") public UserInfoEntity getInfo(String userId){ UserInfoEntity userInfoEntity = userInfoService.getById(userId); return userInfoEntity; } /** * 查詢全部資訊 * @Author Sans * @CreateTime 2019/6/8 16:35 * @Param userId 使用者ID * @Return List<UserInfoEntity> 使用者實體集合 */ @RequestMapping("/getList") public List<UserInfoEntity> getList(){ List<UserInfoEntity> userInfoEntityList = userInfoService.list(); return userInfoEntityList; } /** * 分頁查詢全部資料 * @Author Sans * @CreateTime 2019/6/8 16:37 * @Return IPage<UserInfoEntity> 分頁資料 */ @RequestMapping("/getInfoListPage") public IPage<UserInfoEntity> getInfoListPage(){ //需要在Config設定類中設定分頁外掛 IPage<UserInfoEntity> page = new Page<>(); page.setCurrent(5); //當前頁 page.setSize(1); //每頁條數 page = userInfoService.page(page); return page; } /** * 根據指定欄位查詢使用者資訊集合 * @Author Sans * @CreateTime 2019/6/8 16:39 * @Return Collection<UserInfoEntity> 使用者實體集合 */ @RequestMapping("/getListMap") public Collection<UserInfoEntity> getListMap(){ Map<String,Object> map = new HashMap<>(); //kay是欄位名 value是欄位值 map.put("age",20); Collection<UserInfoEntity> userInfoEntityList = userInfoService.listByMap(map); return userInfoEntityList; } /** * 新增使用者資訊 * @Author Sans * @CreateTime 2019/6/8 16:40 */ @RequestMapping("/saveInfo") public void saveInfo(){ UserInfoEntity userInfoEntity = new UserInfoEntity(); userInfoEntity.setName("小龍"); userInfoEntity.setSkill("JAVA"); userInfoEntity.setAge(18); userInfoEntity.setFraction(59L); userInfoEntity.setEvaluate("該學生是一個在改BUG的碼農"); userInfoService.save(userInfoEntity); } /** * 批次新增使用者資訊 * @Author Sans * @CreateTime 2019/6/8 16:42 */ @RequestMapping("/saveInfoList") public void saveInfoList(){ //建立物件 UserInfoEntity sans = new UserInfoEntity(); sans.setName("Sans"); sans.setSkill("睡覺"); sans.setAge(18); sans.setFraction(60L); sans.setEvaluate("Sans是一個愛睡覺,並且身材較矮骨骼巨大的骷髏小胖子"); UserInfoEntity papyrus = new UserInfoEntity(); papyrus.setName("papyrus"); papyrus.setSkill("JAVA"); papyrus.setAge(18); papyrus.setFraction(58L); papyrus.setEvaluate("Papyrus是一個講話大聲、個性張揚的骷髏,給人自信、有魅力的骷髏小瘦子"); //批次儲存 List<UserInfoEntity> list =new ArrayList<>(); list.add(sans); list.add(papyrus); userInfoService.saveBatch(list); } /** * 更新使用者資訊 * @Author Sans * @CreateTime 2019/6/8 16:47 */ @RequestMapping("/updateInfo") public void updateInfo(){ //根據實體中的ID去更新,其他欄位如果值為null則不會更新該欄位,參考yml組態檔 UserInfoEntity userInfoEntity = new UserInfoEntity(); userInfoEntity.setId(1L); userInfoEntity.setAge(19); userInfoService.updateById(userInfoEntity); } /** * 新增或者更新使用者資訊 * @Author Sans * @CreateTime 2019/6/8 16:50 */ @RequestMapping("/saveOrUpdateInfo") public void saveOrUpdate(){ //傳入的實體類userInfoEntity中ID為null就會新增(ID自增) //實體類ID值存在,如果資料庫存在ID就會更新,如果不存在就會新增 UserInfoEntity userInfoEntity = new UserInfoEntity(); userInfoEntity.setId(1L); userInfoEntity.setAge(20); userInfoService.saveOrUpdate(userInfoEntity); } /** * 根據ID刪除使用者資訊 * @Author Sans * @CreateTime 2019/6/8 16:52 */ @RequestMapping("/deleteInfo") public void deleteInfo(String userId){ userInfoService.removeById(userId); } /** * 根據ID批次刪除使用者資訊 * @Author Sans * @CreateTime 2019/6/8 16:55 */ @RequestMapping("/deleteInfoList") public void deleteInfoList(){ List<String> userIdlist = new ArrayList<>(); userIdlist.add("12"); userIdlist.add("13"); userInfoService.removeByIds(userIdlist); } /** * 根據指定欄位刪除使用者資訊 * @Author Sans * @CreateTime 2019/6/8 16:57 */ @RequestMapping("/deleteInfoMap") public void deleteInfoMap(){ //kay是欄位名 value是欄位值 Map<String,Object> map = new HashMap<>(); map.put("skill","刪除"); map.put("fraction",10L); userInfoService.removeByMap(map); } }
controller層用到lambda語法
package com.demo.drools.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.demo.drools.entity.UserInfoEntity; import com.demo.drools.service.UserInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import java.util.HashMap; import java.util.List; import java.util.Map; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:28 */ public class UserInfoPlusController { @Autowired private UserInfoService userInfoService; /** * MP擴充套件演示 * @Author Sans * @CreateTime 2019/6/8 16:37 * @Return Map<String,Object> 返回資料 */ @RequestMapping("/getInfoListPlus") public Map<String,Object> getInfoListPage(){ //初始化返回類 Map<String,Object> result = new HashMap<>(); //查詢年齡等於18歲的學生 //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE age = 18 QueryWrapper<UserInfoEntity> queryWrapper1 = new QueryWrapper<>(); queryWrapper1.lambda().eq(UserInfoEntity::getAge,18); List<UserInfoEntity> userInfoEntityList1 = userInfoService.list(queryWrapper1); result.put("studentAge18",userInfoEntityList1); //查詢年齡大於5歲的學生且小於等於18歲的學生 //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE age > 5 AND age <= 18 QueryWrapper<UserInfoEntity> queryWrapper2 = new QueryWrapper<>(); queryWrapper2.lambda().gt(UserInfoEntity::getAge,5); queryWrapper2.lambda().le(UserInfoEntity::getAge,18); List<UserInfoEntity> userInfoEntityList2 = userInfoService.list(queryWrapper2); result.put("studentAge5",userInfoEntityList2); //模糊查詢技能欄位帶有"畫"的資料,並按照年齡降序 //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE skill LIKE '%畫%' ORDER BY age DESC QueryWrapper<UserInfoEntity> queryWrapper3 = new QueryWrapper<>(); queryWrapper3.lambda().like(UserInfoEntity::getSkill,"畫"); queryWrapper3.lambda().orderByDesc(UserInfoEntity::getAge); List<UserInfoEntity> userInfoEntityList3 = userInfoService.list(queryWrapper3); result.put("studentAgeSkill",userInfoEntityList3); //模糊查詢名字帶有"小"或者年齡大於18的學生 //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE name LIKE '%小%' OR age > 18 QueryWrapper<UserInfoEntity> queryWrapper4 = new QueryWrapper<>(); queryWrapper4.lambda().like(UserInfoEntity::getName,"小"); queryWrapper4.lambda().or().gt(UserInfoEntity::getAge,18); List<UserInfoEntity> userInfoEntityList4 = userInfoService.list(queryWrapper4); result.put("studentOr",userInfoEntityList4); //查詢評價不為null的學生,並且分頁 //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE evaluate IS NOT NULL LIMIT 0,5 IPage<UserInfoEntity> page = new Page<>(); page.setCurrent(1); page.setSize(5); QueryWrapper<UserInfoEntity> queryWrapper5 = new QueryWrapper<>(); queryWrapper5.lambda().isNotNull(UserInfoEntity::getEvaluate); page = userInfoService.page(page,queryWrapper5); result.put("studentPage",page); return result; } }
以上就是mybatis-plus的小案例,mybatis-plus它像我之前使用的spring data jpa框架不用寫sql語句,就可以實現簡單的增刪改查、批次操作、分頁mybatis-plus功能還是比較強大,能減少我們寫很多程式碼,我個人還是比較喜歡用這個mybatis-plus的
mybatis-plus只是mybatis的增強版,它不影響mybatis的使用,我們可以寫我們自定的方法以及sql,接下來我們看一個小案例
dao層新增方法
/** * 查詢大於該分數的學生 * @Author Sans * @CreateTime 2019/6/9 14:28 * @Param page 分頁引數 * @Param fraction 分數 * @Return IPage<UserInfoEntity> 分頁資料 */ IPage<UserInfoEntity> selectUserInfoByGtFraction( @Param(value = "page") IPage<UserInfoEntity> page, @Param(value = "fraction")Long fraction);
service新增方法
/** * 查詢大於該分數的學生 * @Author Sans * @CreateTime 2019/6/9 14:27 * @Param page 分頁引數 * @Param fraction 分數 * @Return IPage<UserInfoEntity> 分頁資料 */ IPage<UserInfoEntity> selectUserInfoByGtFraction(IPage<UserInfoEntity> page,Long fraction);
serviceImpl層新增方法
/** * 查詢大於該分數的學生 * @Author Sans * @CreateTime 2019/6/9 14:27 * @Param page 分頁引數 * @Param fraction 分數 * @Return IPage<UserInfoEntity> 分頁資料 */ IPage<UserInfoEntity> selectUserInfoByGtFraction(IPage<UserInfoEntity> page,Long fraction);
controller層新增方法
/** * MP自定義SQL * @Author Sans * @CreateTime 2019/6/9 14:37 * @Return IPage<UserInfoEntity> 分頁資料 */ @RequestMapping("/getInfoListSQL") public IPage<UserInfoEntity> getInfoListSQL(){ //查詢大於60分以上的學生,並且分頁 IPage<UserInfoEntity> page = new Page<>(); page.setCurrent(1); page.setSize(5); page = userInfoService.selectUserInfoByGtFraction(page,60L); return page; }
設定我們的mybatis的xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.demo.drools.dao.UserInfoDao"> <!-- Sans 2019/6/9 14:35 --> <select id="selectUserInfoByGtFraction" resultType="com.demo.drools.entity.UserInfoEntity"> SELECT * FROM user_info WHERE fraction > #{fraction} </select> </mapper>
以上設定就是我們的mybatis用法。
mybatis plus強大的條件構造器queryWrapper、updateWrapper
1.QueryWrapper: Entity 物件封裝操作類
2.UpdateWrapper : Update 條件封裝,用於Entity物件更新操作
3.條件構造器使用中的各個方法格式和說明
到此這篇關於SpringBoot整合Mybatis-plus的具體使用的文章就介紹到這了,更多相關SpringBoot整合Mybatis-plus 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45