MyBatisPuls入门案例
MyBatisPuls入門案例
1.業務需求
Mybaits缺點:
? 1.Mybatis操作數據庫的過程中,需要編輯大量的sql語句.無論該sql是否復雜或者簡單.
2.Mybatis操作時在xml配置文件中需要額外記憶單獨的標簽.
需求:能否實現單表操作的CRUD的全自動的實現.能否實現真正的ORM映射?
2.ORM
要求: 利用面向對象的方式操作數據庫.
特點:
? 1.操作數據庫的面向對象.
? userMapper.insert(user對象); ------->自己編輯sql語句
? 2.查詢數據庫的面向對象.
? userMapper.selectByWhere(user對象); ------>動態的生成Sql------>自動實現結果集封裝.
3.ORM實現單表操作原理
要求:實現單表的自動的CRUD操作.
例子:
User user = new Uesr();user.setId(xx).setName(xx).setAge(xx).setSex(xx);userMapper.insertUser(user);框架內部實現過程:
? 核心:數據庫只能識別sql語句.框架需要將對象轉化為sql.
核心配置:
? 1.User對象與數據庫的表 一一映射!
? 解決方法: 自定義注解標識表與對象的關系
? 2.User對象的屬性與數據表中的字段一一映射!
解決方法:自定義注解完成屬性與字段的映射
? 3.將CURD的方法進行統一的定義.形成工具API接口
解決方法:利用公共的mapper接口 BaseMapper,在其中定義幾乎所有的單表的CURD操作.
? 4.將接口方法按照數據庫方式轉化為特定的sql語句.
? 1.用戶的調用 userMapper.insert(user)
? 2.拼接特定的sql:
insert into 表名(字段名......) values(屬性值......);一般利用反射技術,可以通過對象或者有關對象的全部信息(注解,屬性,屬性值)
4.MybatisPlus介紹(MP)
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。
4.1MP特性
4.2MP的入門案例
4.2.1導入數據庫
使用的數據庫是mysql
數據庫sql文件 jtdb .sql 在下方的百度網盤地址 點擊下載即可
百度網盤 鏈接: https://pan.baidu.com/s/1OOKgsltlItJ-lIy-F9EFuw 提取碼: cpih
導入方式:
1.通過cmd的方式打開mysql數據庫
2.找到sql文件的儲存位置
3.通過命令source + sql文件位置的方式 即可導入完成
4.2.2創建項目
使用STS創建一個spring項目
4.2.3pom.xml文件 導入jar依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>cn.tedu</groupId><artifactId>Mybatis-pulsdome</artifactId><version>0.0.1-SNAPSHOT</version><name>Mybatis-pulsdome</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><!--添加maven插件 --><maven-jar-plugin.version>3.1.1</maven-jar-plugin.version></properties><dependencies><!--SpringBoot測試方法 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><!--添加屬性注入依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--支持熱部署 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><!--引入插件lombok 自動的set/get/構造方法插件 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--引入數據庫驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version><scope>runtime</scope></dependency><!--springBoot數據庫連接 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--spring整合mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>4.2.4創建pojo文件
注意包路徑
@Data @Accessors(chain=true) //鏈式加載 @TableName //標識對象與表之間的關聯關系 public class User {//簡化步驟:如果屬性的名稱與映射的名稱一致,則可以省略不寫@TableId(type=IdType.AUTO) //定義主鍵 主鍵自增private Integer id;//對象的屬性與表中的字段.//@TableField(value="name")private String name;private Integer age;private String sex;}注解:
1.@Date @Accessors(chain=true) 是來著lombox插件的方法 是幫助我們生成Get,Set方法 沒有安裝lombox的 需要手寫get set方法
2.@TableName 是mybatisPuls的注解 是標識對象與表之間的關聯關系 如果數據庫的表名 和 我們家的類名并不相同 可在注解后指定關聯數據庫的表名 如:@TableName(“db_user”)
3.@TableId(type=IdType.AUTO) 是指定主鍵 而后面的type=IdType.AUTO 屬性 表示 數據庫中表的id屬性是自增的
4.2.5創建接口Mapper文件
package cn.tedu.mapper;import org.apache.ibatis.annotations.Mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import cn.tedu.pojo.User;@Mapper public interface UserMapper extends BaseMapper<User>{}值得注意的是:
使用myBatisPuls 其mapper接口 必須繼承 BaseMapper 并且在泛型內指定 此接口映射的pojo類
4.2.6編輯YML配置文件
找到spring配置文件 按F2將文件后綴更改為 application.yml
 編輯yml配置文件
4.2.7入門案例測試
創建測試方法
書寫TestUserMapper測試方法
package cn.tedu.mapper;import java.util.List; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import cn.tedu.pojo.User;@SpringBootTest //添加測試注解 public class TestUserMapper {@Autowired //注入mapper對象private UserMapper userMapper;/*** 1.入門案例* 要求:查詢全部的用戶信息 不需要寫where條件* 注意事項:利用MP的方法和自己的接口方法 名稱不能重復.* * 參數說明:queryWrapper 動態生成sql語句中的where條件*/@Test public void test01() {List<User> userList = userMapper.selectList(null);System.out.println(userList);} }解析:
利用MP調用其中的方法,可以動態生成sql語句查詢數據庫
這里選用的是
userMapper.selectList(null);其方法內傳入的參數 queryWrapper 是條件構造器 目的是生成sql語句 where 之后的條件
如 :select * from user where id =1;
而這里我們傳入的是null值 表示查詢所有
其sql語句是 select * from user
4.2.8 selectBatchIds
/*** 練習1: 查詢id信息為1,3,4,5,6用戶數據* sql: select * from user where id in (1,2,3,4,5,6);* 思考:id可以利用數組進行接收 利用數組查詢數據*/@Testpublic void test02() {List<Integer> idList = new ArrayList<Integer>();idList.add(1);idList.add(3);idList.add(4);idList.add(5);idList.add(6);//以對象的方式進行數據庫操作List<User> userList = userMapper.selectBatchIds(idList);System.out.println(userList);}4.2.9 selectByMap
說明:根據字段查詢用戶信息
/*** 練習2: 根據name="黑熊精" age="3000"查詢數據信息* SelectByMap:根據具體的字段查詢用戶信息.* sql語句: select * from user where name="黑熊精" and age=3000* 規則:默認使用and連接符.*/@Testpublic void test03() {Map<String,Object> map = new HashMap<>();//key="字段名稱" value="字段值"map.put("name", "黑熊精");map.put("age", 3000);List<User> userList = userMapper.selectByMap(map);System.out.println(userList);}4.2.10 條件構造器查詢
/*** 4.name屬性中包含"精"的數據,并且為女性* sql: SELECT * FROM USER WHERE NAME LIKE "%精%" AND sex = "女"* queryWrapper: 條件構造器* 作用 動態拼接sql的where條件* 邏輯運算符: >gt , <lt, =eq, >=ge, <= le*/@Testpublic void test04() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", "精").eq("sex", "女");List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}4.2.11 Between-and
/*** 查詢年齡在18-35之間的女性用戶.* sql: SELECT * FROM USER WHERE age BETWEEN 18 AND 35 AND sex ="女";*/@Testpublic void test05() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.between("age", 18, 35).eq("sex", "女");List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}4.2.12 order by
/*** 條件: 查詢年齡大于100歲的,并且按照年齡降序排列,* 如果年齡相同按照Id降序排列. * sql:SELECT * FROM USER WHERE age > 100 ORDER BY age DESC,id DESC;*/@Testpublic void test06() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.gt("age", 100).orderByDesc("age","id");List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}4.2.13 like練習
/*** 條件: 查詢名稱以"喬"結尾的,并且性別為女,并且age小于30歲.按照年齡降序排列.* SQL:* SELECT * FROM USER WHERE (NAME LIKE "%喬" AND sex="女" AND age < 30) ORDER BY age DESC;*/@Testpublic void test07() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeLeft("name", "喬").eq("sex", "女").lt("age", 30).orderByDesc("age");List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}4.2.14 inSql
說明:適用于子查詢
/*** 查詢age < 100歲的用戶,并且性別與name="孫尚香"的性別相同的的用戶數據.* 分析: age<100 sex=男/女* sql:SELECT * FROM USER WHERE age < 100 AND sex in(SELECT sex FROM USER WHERE NAME = "孫尚香")*/@Testpublic void test08() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.lt("age", 100).inSql("sex", "select sex from user where name ='孫尚香'");List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}4.2.15 select
/*** 需求: 有時可能不需要查詢全部的數據庫的表字段* 查詢age為18歲的用戶的名稱和id.* select:挑選字段的屬性.* 查詢結果:User(id=12, name=貂蟬, age=null, sex=null)*/@Testpublic void test09() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("name","id").eq("age", 18);List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}4.2.16 condition
/*** 條件判斷* 以name和sex不為null的數據當做where條件.* condition作用:* 判斷參數是否拼接為where條件* 結果true, 動態拼接參數* 結果false, 參數不會動態拼接* 應用場景:* 接收前臺的參數時,參數可能為null或者其他的數值類型時* 需要添加判斷.* 業務需求:* 如果age>18時,才能查詢年齡*/@Testpublic void test10() {String name = null;int age = 18;QueryWrapper<User> queryWrapper = new QueryWrapper<>();//name屬性的值,不為null時,才會拼接where條件queryWrapper.eq(!StringUtils.isEmpty(name), "name", name);queryWrapper.eq(age>18, "age", age);List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}4.2.17 根據對象查詢
/*** 根據對象查詢數據庫* 條件:根據對象中不為null的屬性充當where條件* 需求:查詢age=18的用戶信息 性別=女* 說明:利用對象的方式查詢時,邏輯運算符都是"="號*/@Testpublic void test11() {User user = new User();user.setAge(18).setSex("女");QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}4.2.18 selectObjs
說明:只查詢主鍵信息(第一列)數據
/*** 需求:只查詢主鍵的信息. * 類比: select * sql: SELECT id FROM USER where age >18*/@Testpublic void test12() {QueryWrapper<User> queryWrapper2 = new QueryWrapper<User>();queryWrapper2.select("id");//查詢的List<User>對象信息userMapper.selectList(queryWrapper2);QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.gt("age", 18);//只查詢主鍵信息List<Object> idList = userMapper.selectObjs(queryWrapper);System.out.println(idList);}4.2.19 selectMaps
/*** 獲取任意的字段信息* 需求:查詢用戶信息 只想獲取id和name的值.不想獲取age/sex* sql: select id,name from user where age > 18;*/@Testpublic void test13() {QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.select("id","name").gt("age", 18);//獲取全部的對象信息List<User> userList = userMapper.selectList(queryWrapper);//獲取字段的信息List<Map<String,Object>> listMap = userMapper.selectMaps(queryWrapper);System.out.println(userList);System.out.println(listMap);}4.2.20 新增用戶
@Testpublic void test14() {User user = new User();user.setName("外國人永久居住權").setSex("男").setAge(30);userMapper.insert(user);}4.2.21 刪除用戶
/*** 刪除用戶信息*/@Testpublic void test15() {QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.eq("name", "外國人永久居住權");//根據多個條件 刪除用戶數據.userMapper.delete(queryWrapper);//根據集合中的數據.批量刪除用戶信息Integer[] ids = {2000,2001};List<Integer> idList = Arrays.asList(ids);userMapper.deleteBatchIds(idList);//id 代表主鍵信息 根據主鍵進行刪除.userMapper.deleteById(2000);//挑選字段和屬性進行刪除.Map<String,Object> columnMap = new HashMap<String, Object>();columnMap.put("name", "疫情");userMapper.deleteByMap(columnMap);}4.2.22 修改操作
/*** 更新操作* updateById: 根據主鍵信息修改數據.* 主鍵信息必須添加充當where條件, * 根據對象中不為null的數據,充當set條件.* sql: update user set name="xx",age=xxx,sex=xx where id=23* * update方法說明:* 參數1:entity 修改后的數據結果* 參數2:updateWrapper 修改的條件構造器* 案例:* 將楊穎改為范冰冰 修改年齡/性別* sql : update user set name="xxxx",age=xxx,sex=xxx* where name = "楊穎";* */@Testpublic void test16() {User user = new User();user.setId(23).setName("潘鳳").setAge(35).setSex("男");userMapper.updateById(user);User user2 = new User();user2.setName("范冰冰").setAge(40).setSex("女");UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();updateWrapper.eq("name", "楊穎");userMapper.update(user2, updateWrapper);}總結
以上是生活随笔為你收集整理的MyBatisPuls入门案例的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 《即刻电音》:大张伟遭遇“团灭”危机情绪
- 下一篇: 手机闪存速度排行_什么是手机闪存?怎么测
