日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

MyBatisPuls入门案例

發(fā)布時(shí)間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatisPuls入门案例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MyBatisPuls入門案例

1.業(yè)務(wù)需求

Mybaits缺點(diǎn):

? 1.Mybatis操作數(shù)據(jù)庫(kù)的過程中,需要編輯大量的sql語(yǔ)句.無(wú)論該sql是否復(fù)雜或者簡(jiǎn)單.

2.Mybatis操作時(shí)在xml配置文件中需要額外記憶單獨(dú)的標(biāo)簽.

需求:能否實(shí)現(xiàn)單表操作的CRUD的全自動(dòng)的實(shí)現(xiàn).能否實(shí)現(xiàn)真正的ORM映射?

2.ORM

要求: 利用面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫(kù).

特點(diǎn):

? 1.操作數(shù)據(jù)庫(kù)的面向?qū)ο?

? userMapper.insert(user對(duì)象); ------->自己編輯sql語(yǔ)句

? 2.查詢數(shù)據(jù)庫(kù)的面向?qū)ο?

? userMapper.selectByWhere(user對(duì)象); ------>動(dòng)態(tài)的生成Sql------>自動(dòng)實(shí)現(xiàn)結(jié)果集封裝.

3.ORM實(shí)現(xiàn)單表操作原理

要求:實(shí)現(xiàn)單表的自動(dòng)的CRUD操作.

例子:

User user = new Uesr();user.setId(xx).setName(xx).setAge(xx).setSex(xx);userMapper.insertUser(user);

框架內(nèi)部實(shí)現(xiàn)過程:

? 核心:數(shù)據(jù)庫(kù)只能識(shí)別sql語(yǔ)句.框架需要將對(duì)象轉(zhuǎn)化為sql.

核心配置:

? 1.User對(duì)象與數(shù)據(jù)庫(kù)的表 一一映射!

? 解決方法: 自定義注解標(biāo)識(shí)表與對(duì)象的關(guān)系

? 2.User對(duì)象的屬性與數(shù)據(jù)表中的字段一一映射!

解決方法:自定義注解完成屬性與字段的映射

? 3.將CURD的方法進(jìn)行統(tǒng)一的定義.形成工具API接口

解決方法:利用公共的mapper接口 BaseMapper,在其中定義幾乎所有的單表的CURD操作.

? 4.將接口方法按照數(shù)據(jù)庫(kù)方式轉(zhuǎn)化為特定的sql語(yǔ)句.

? 1.用戶的調(diào)用 userMapper.insert(user)

? 2.拼接特定的sql:

insert into 表名(字段名......) values(屬性值......);

一般利用反射技術(shù),可以通過對(duì)象或者有關(guān)對(duì)象的全部信息(注解,屬性,屬性值)

4.MybatisPlus介紹(MP)

MyBatis-Plus(簡(jiǎn)稱 MP)是一個(gè) MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā)、提高效率而生

4.1MP特性

  • 無(wú)侵入:只做增強(qiáng)不做改變,引入它不會(huì)對(duì)現(xiàn)有工程產(chǎn)生影響,如絲般順滑
  • 損耗小:啟動(dòng)即會(huì)自動(dòng)注入基本 CURD,性能基本無(wú)損耗,直接面向?qū)ο蟛僮?/li>
  • 強(qiáng)大的 CRUD 操作:內(nèi)置通用 Mapper、通用 Service,僅僅通過少量配置即可實(shí)現(xiàn)單表大部分 CRUD 操作,更有強(qiáng)大的條件構(gòu)造器,滿足各類使用需求
  • 支持 Lambda 形式調(diào)用:通過 Lambda 表達(dá)式,方便的編寫各類查詢條件,無(wú)需再擔(dān)心字段寫錯(cuò)
  • 支持主鍵自動(dòng)生成:支持多達(dá) 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實(shí)體類只需繼承 Model 類即可進(jìn)行強(qiáng)大的 CRUD 操作
  • 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 內(nèi)置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來(lái)使用
  • 內(nèi)置分頁(yè)插件:基于 MyBatis 物理分頁(yè),開發(fā)者無(wú)需關(guān)心具體操作,配置好插件之后,寫分頁(yè)等同于普通 List 查詢
  • 分頁(yè)插件支持多種數(shù)據(jù)庫(kù):支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數(shù)據(jù)庫(kù)
  • 內(nèi)置性能分析插件:可輸出 Sql 語(yǔ)句以及其執(zhí)行時(shí)間,建議開發(fā)測(cè)試時(shí)啟用該功能,能快速揪出慢查詢
  • 內(nèi)置全局?jǐn)r截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規(guī)則,預(yù)防誤操作
  • 4.2MP的入門案例

    4.2.1導(dǎo)入數(shù)據(jù)庫(kù)

    使用的數(shù)據(jù)庫(kù)是mysql

    數(shù)據(jù)庫(kù)sql文件 jtdb .sql 在下方的百度網(wǎng)盤地址 點(diǎn)擊下載即可

    百度網(wǎng)盤 鏈接: https://pan.baidu.com/s/1OOKgsltlItJ-lIy-F9EFuw 提取碼: cpih

    導(dǎo)入方式:

    1.通過cmd的方式打開mysql數(shù)據(jù)庫(kù)

    2.找到sql文件的儲(chǔ)存位置

    3.通過命令source + sql文件位置的方式 即可導(dǎo)入完成

    4.2.2創(chuàng)建項(xiàng)目

    使用STS創(chuàng)建一個(gè)spring項(xiàng)目

    4.2.3pom.xml文件 導(dǎo)入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測(cè)試方法 --><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 自動(dòng)的set/get/構(gòu)造方法插件 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--引入數(shù)據(jù)庫(kù)驅(qū)動(dòng) --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version><scope>runtime</scope></dependency><!--springBoot數(shù)據(jù)庫(kù)連接 --><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創(chuàng)建pojo文件

    注意包路徑

    @Data @Accessors(chain=true) //鏈?zhǔn)郊虞d @TableName //標(biāo)識(shí)對(duì)象與表之間的關(guān)聯(lián)關(guān)系 public class User {//簡(jiǎn)化步驟:如果屬性的名稱與映射的名稱一致,則可以省略不寫@TableId(type=IdType.AUTO) //定義主鍵 主鍵自增private Integer id;//對(duì)象的屬性與表中的字段.//@TableField(value="name")private String name;private Integer age;private String sex;}

    注解:

    1.@Date @Accessors(chain=true) 是來(lái)著lombox插件的方法 是幫助我們生成Get,Set方法 沒有安裝lombox的 需要手寫get set方法

    2.@TableName 是mybatisPuls的注解 是標(biāo)識(shí)對(duì)象與表之間的關(guān)聯(lián)關(guān)系 如果數(shù)據(jù)庫(kù)的表名 和 我們家的類名并不相同 可在注解后指定關(guān)聯(lián)數(shù)據(jù)庫(kù)的表名 如:@TableName(“db_user”)

    3.@TableId(type=IdType.AUTO) 是指定主鍵 而后面的type=IdType.AUTO 屬性 表示 數(shù)據(jù)庫(kù)中表的id屬性是自增的

    4.2.5創(chuàng)建接口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 并且在泛型內(nèi)指定 此接口映射的pojo類

    4.2.6編輯YML配置文件

    找到spring配置文件 按F2將文件后綴更改為 application.yml


    編輯yml配置文件

    spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=trueusername: rootpassword: 123456 #寫自己家mysql數(shù)據(jù)庫(kù)的賬號(hào)密碼#mybatis-plush配置 mybatis-plus:#配置文件的資源加載路徑#mapper-locations: classpath:/mybatis/mappers/*.xml#開啟駝峰映射configuration:map-underscore-to-camel-case: true

    4.2.7入門案例測(cè)試

    創(chuàng)建測(cè)試方法

    書寫TestUserMapper測(cè)試方法

    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 //添加測(cè)試注解 public class TestUserMapper {@Autowired //注入mapper對(duì)象private UserMapper userMapper;/*** 1.入門案例* 要求:查詢?nèi)康挠脩粜畔? 不需要寫where條件* 注意事項(xiàng):利用MP的方法和自己的接口方法 名稱不能重復(fù).* * 參數(shù)說明:queryWrapper 動(dòng)態(tài)生成sql語(yǔ)句中的where條件*/@Test public void test01() {List<User> userList = userMapper.selectList(null);System.out.println(userList);} }

    解析:

    利用MP調(diào)用其中的方法,可以動(dòng)態(tài)生成sql語(yǔ)句查詢數(shù)據(jù)庫(kù)

    這里選用的是

    userMapper.selectList(null);

    其方法內(nèi)傳入的參數(shù) queryWrapper 是條件構(gòu)造器 目的是生成sql語(yǔ)句 where 之后的條件

    如 :select * from user where id =1;

    而這里我們傳入的是null值 表示查詢所有

    其sql語(yǔ)句是 select * from user

    4.2.8 selectBatchIds

    /*** 練習(xí)1: 查詢id信息為1,3,4,5,6用戶數(shù)據(jù)* sql: select * from user where id in (1,2,3,4,5,6);* 思考:id可以利用數(shù)組進(jìn)行接收 利用數(shù)組查詢數(shù)據(jù)*/@Testpublic void test02() {List<Integer> idList = new ArrayList<Integer>();idList.add(1);idList.add(3);idList.add(4);idList.add(5);idList.add(6);//以對(duì)象的方式進(jìn)行數(shù)據(jù)庫(kù)操作List<User> userList = userMapper.selectBatchIds(idList);System.out.println(userList);}

    4.2.9 selectByMap

    說明:根據(jù)字段查詢用戶信息

    /*** 練習(xí)2: 根據(jù)name="黑熊精" age="3000"查詢數(shù)據(jù)信息* SelectByMap:根據(jù)具體的字段查詢用戶信息.* sql語(yǔ)句: select * from user where name="黑熊精" and age=3000* 規(guī)則:默認(rèn)使用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 條件構(gòu)造器查詢

    /*** 4.name屬性中包含"精"的數(shù)據(jù),并且為女性* sql: SELECT * FROM USER WHERE NAME LIKE "%精%" AND sex = "女"* queryWrapper: 條件構(gòu)造器* 作用 動(dòng)態(tài)拼接sql的where條件* 邏輯運(yùn)算符: >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練習(xí)

    /*** 條件: 查詢名稱以"喬"結(jié)尾的,并且性別為女,并且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="孫尚香"的性別相同的的用戶數(shù)據(jù).* 分析: 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

    /*** 需求: 有時(shí)可能不需要查詢?nèi)康臄?shù)據(jù)庫(kù)的表字段* 查詢age為18歲的用戶的名稱和id.* select:挑選字段的屬性.* 查詢結(jié)果: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的數(shù)據(jù)當(dāng)做where條件.* condition作用:* 判斷參數(shù)是否拼接為where條件* 結(jié)果true, 動(dòng)態(tài)拼接參數(shù)* 結(jié)果false, 參數(shù)不會(huì)動(dòng)態(tài)拼接* 應(yīng)用場(chǎng)景:* 接收前臺(tái)的參數(shù)時(shí),參數(shù)可能為null或者其他的數(shù)值類型時(shí)* 需要添加判斷.* 業(yè)務(wù)需求:* 如果age>18時(shí),才能查詢年齡*/@Testpublic void test10() {String name = null;int age = 18;QueryWrapper<User> queryWrapper = new QueryWrapper<>();//name屬性的值,不為null時(shí),才會(huì)拼接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 根據(jù)對(duì)象查詢

    /*** 根據(jù)對(duì)象查詢數(shù)據(jù)庫(kù)* 條件:根據(jù)對(duì)象中不為null的屬性充當(dāng)where條件* 需求:查詢age=18的用戶信息 性別=女* 說明:利用對(duì)象的方式查詢時(shí),邏輯運(yùn)算符都是"="號(hào)*/@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

    說明:只查詢主鍵信息(第一列)數(shù)據(jù)

    /*** 需求:只查詢主鍵的信息. * 類比: select * sql: SELECT id FROM USER where age >18*/@Testpublic void test12() {QueryWrapper<User> queryWrapper2 = new QueryWrapper<User>();queryWrapper2.select("id");//查詢的List<User>對(duì)象信息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);//獲取全部的對(duì)象信息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("外國(guó)人永久居住權(quán)").setSex("男").setAge(30);userMapper.insert(user);}

    4.2.21 刪除用戶

    /*** 刪除用戶信息*/@Testpublic void test15() {QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.eq("name", "外國(guó)人永久居住權(quán)");//根據(jù)多個(gè)條件 刪除用戶數(shù)據(jù).userMapper.delete(queryWrapper);//根據(jù)集合中的數(shù)據(jù).批量刪除用戶信息Integer[] ids = {2000,2001};List<Integer> idList = Arrays.asList(ids);userMapper.deleteBatchIds(idList);//id 代表主鍵信息 根據(jù)主鍵進(jìn)行刪除.userMapper.deleteById(2000);//挑選字段和屬性進(jìn)行刪除.Map<String,Object> columnMap = new HashMap<String, Object>();columnMap.put("name", "疫情");userMapper.deleteByMap(columnMap);}

    4.2.22 修改操作

    /*** 更新操作* updateById: 根據(jù)主鍵信息修改數(shù)據(jù).* 主鍵信息必須添加充當(dāng)where條件, * 根據(jù)對(duì)象中不為null的數(shù)據(jù),充當(dāng)set條件.* sql: update user set name="xx",age=xxx,sex=xx where id=23* * update方法說明:* 參數(shù)1:entity 修改后的數(shù)據(jù)結(jié)果* 參數(shù)2:updateWrapper 修改的條件構(gòu)造器* 案例:* 將楊穎改為范冰冰 修改年齡/性別* 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);}

    總結(jié)

    以上是生活随笔為你收集整理的MyBatisPuls入门案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。