欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:MybatisPlus學(xué)習(xí)

柚子快報(bào)邀請(qǐng)碼778899分享:MybatisPlus學(xué)習(xí)

http://yzkb.51969.com/

mybatis-plus官網(wǎng)

簡(jiǎn)介 | MyBatis-Plus (baomidou.com)

一? 快速入門

1? 創(chuàng)建項(xiàng)目

導(dǎo)入mysql驅(qū)動(dòng),這里先不做web

2? 導(dǎo)入依賴

我這里用的是springboot 3.3.0版本

注意: SpringBoot 3.0 需要 mybatis-spring 3.0.X 版本,否則會(huì)報(bào)如下錯(cuò)誤:

nvalid value type for attribute 'factoryBeanObjectType'‘': java.lang.String

這里有一個(gè)小坑

com.baomidou

mybatis-plus-boot-starter

3.5.5

org.mybatis

mybatis-spring

3.0.3

?3? 引入例子

package com.demo.learnmybatisplus.Pojo;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import org.springframework.stereotype.Component;

@Data

@Component

@AllArgsConstructor

@NoArgsConstructor

public class Users {

public int id;

private String username;

private String password;

}

數(shù)據(jù)庫(kù)的相應(yīng)信息

4? 編輯持久層

package com.demo.learnmybatisplus.Mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.demo.learnmybatisplus.Pojo.Users;

import org.apache.ibatis.annotations.Mapper;

@Mapper

public interface UserMapper extends BaseMapper {

}

5? 啟動(dòng)?。?! 添加測(cè)試

package com.demo.learnmybatisplus;

import com.demo.learnmybatisplus.Mapper.UserMapper;

import com.demo.learnmybatisplus.Pojo.Users;

import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest

class LearnMybatisPLusApplicationTests {

@Autowired

private UserMapper userMapper;

@Test

public void selectAll(){

List users = userMapper.selectList(null);

System.out.println(users);

}

}

結(jié)果顯示

6? 坑?。?!

SpringBoot 3.0 需要 mybatis-spring 3.0.X 版本,如果沒(méi)導(dǎo)入,就會(huì)報(bào)錯(cuò)。當(dāng)時(shí)我找了好久,哪里沒(méi)加注解呢?!想不到是版本問(wèn)題

二? ?方便快捷的CRUD功能

全部的條件構(gòu)造器可以看這里

條件構(gòu)造器 | MyBatis-Plus (baomidou.com)

1? 簡(jiǎn)單介紹有哪些

2? 前五個(gè)操作,增刪改查以及查全部

package com.demo.learnmybatisplus;

import com.demo.learnmybatisplus.Mapper.UserMapper;

import com.demo.learnmybatisplus.Pojo.Users;

import lombok.extern.slf4j.Slf4j;

import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest

@Slf4j

class LearnMybatisPLusApplicationTests {

@Autowired

private UserMapper userMapper;

@Test

public void selectAll(){

List users = userMapper.selectList(null);

System.out.println(users);

}

@Test

public void TextInsert(){

Users users = new Users(2, "123456", "789789");

log.info("新增用戶:{}", users);

//傳入的是實(shí)體類books

userMapper.insert(users);

}

@Test

public void TextDelete(){

int id = 6;

userMapper.deleteById(id);

}

@Test

public void TextUpdate(){

Users users = new Users();

users.setId(4);

users.setPassword("12356789");

//根據(jù)id鎖定修改對(duì)象,其他值為修改值

userMapper.updateById(users);

}

@Test

public void TextSelectAll(){

List usersList = userMapper.selectList(null);

}

}

3? 分頁(yè)查詢操作

分頁(yè)查詢需要一個(gè)專門的攔截器,來(lái)攔截sql語(yǔ)句,實(shí)現(xiàn)limit的添加

package com.demo.learnmybatisplus.Config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;

import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class MpConfiguation {

@Bean

public MybatisPlusInterceptor pageInterceptor() {

//1 創(chuàng)建一個(gè)攔截器對(duì)象

MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

//2 在攔截器內(nèi)部加入小的分頁(yè)的攔截器

interceptor.addInnerInterceptor(new PaginationInnerInterceptor());

return interceptor;

}

}

配置好攔截器之后,在測(cè)試類測(cè)試分頁(yè)查詢的代碼

@Test

public void TextPageSelect() {

//第一個(gè)參數(shù)代表查詢第幾頁(yè), 第二個(gè)代表每頁(yè)多少個(gè)參數(shù)

IPage page = new Page(2, 3);

userMapper.selectPage(page, null);

System.out.println("當(dāng)前頁(yè)碼:" + page.getCurrent());

System.out.println("每頁(yè)數(shù)據(jù)總量:" + page.getSize());

System.out.println("總頁(yè)數(shù):" + page.getPages());

System.out.println("數(shù)據(jù)總量:" + page.getTotal());

System.out.println("當(dāng)前頁(yè)數(shù)據(jù):" + page.getRecords());

}

開(kāi)啟sql詳細(xì)日志的輸出,來(lái)看看limit是怎么被加上去的。平時(shí)可以注釋掉,避免控制臺(tái)太多東西,在出錯(cuò)時(shí)可以打開(kāi)此配置來(lái)找錯(cuò)

#mybatis日志的輸出

mybatis-plus:

configuration:

log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

4? DQL條件查詢

一共四種方法,主要用第三種方法? 構(gòu)建條件查詢器

//條件查詢

@Test

public void TextSelect(){

//方式一 常規(guī)格式

QueryWrapper qw = new QueryWrapper();

qw.lt("id", 6);//id小于于6

qw.ge("id", 4);//id大于2

List usersList = userMapper.selectList(qw);

System.out.println(usersList);

// 方式二 lambda鏈?zhǔn)骄幊?/p>

QueryWrapper qwU = new QueryWrapper<>();

qwU.lambda().lt(Users::getId, 6).ge(Users::getId,4);

List usersListU = userMapper.selectList(qwU);

System.out.println(usersListU);

//方式三 lambda的簡(jiǎn)化

LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();

lqw.lt(Users::getId, 6).ge(Users::getId,4);

List usersListlqu = userMapper.selectList(lqw);

System.out.println(usersListlqu);

//組合條件,上面的是and的條件,這個(gè)是or的條件

lqw.lt(Users::getId, 6).or().ge(Users::getId,4);

}

}

補(bǔ)充,對(duì)null的判斷

//條件查詢,對(duì)空的判斷

@Test

public void TextNull(){

LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();

Users user1 = new Users();

user1.setId(3);

//如果不為空,及前面的表達(dá)式為true,則條件生效

lqw.lt(user1 != null, Users::getId, 4);

}

5? 查詢投影

他主要有兩個(gè)功能,一個(gè)是查詢部分的信息。

另一個(gè)是可以使用函數(shù)等Users類里面沒(méi)有的信息。因?yàn)橹皩W(xué)到的查詢都是封裝到了實(shí)體類的中,本例是Users,所以他不能顯示Users里面mei

//條件查詢,查詢部分信息,以及使用函數(shù)等Users類里面沒(méi)有的信息

@Test

public void TextSelectPath(){

//查詢部分屬性

LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();

lqw.select(Users::getId);

lqw.lt(Users::getId, 6);

List users = userMapper.selectList(lqw);

System.out.println(users);

//查詢函數(shù)以及其他User類沒(méi)有的值

/*

注意selectMaps和上面LambdaQueryWrapper查詢的selectList是不一樣的,

和之前的也是不一樣的

LambdaQueryWrapper不具有這個(gè)方法

這個(gè)方法有局限,并不是所有的函數(shù)都支持,

則需要時(shí)我們可以像mybatis一樣自己寫(xiě)@Select語(yǔ)句

*/

QueryWrapper qw = new QueryWrapper<>();

qw.select("count(*) as count, id");

qw.groupBy("id");

List> list = userMapper.selectMaps(qw);

System.out.println(list);

//這就是自己定義的方法

List> listByMe = userMapper.TextCount();

System.out.println(listByMe);

}

UserMapper中自己定義的方法,這里有個(gè)sql規(guī)范,用了聚合函數(shù)與非聚合函數(shù)就要用分組,只用聚合函數(shù)就不用一定要分組

package com.demo.learnmybatisplus.Mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.demo.learnmybatisplus.Pojo.Users;

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Select;

import java.util.List;

import java.util.Map;

@Mapper

public interface UserMapper extends BaseMapper {

@Select("select count(*), id from users group by id")

List> TextCount();

}

6? 映射配置兼容性

問(wèn)題一? : 實(shí)體類里面字段名字與數(shù)據(jù)庫(kù)不匹配

問(wèn)題二 :? 編碼中實(shí)體類添加了數(shù)據(jù)庫(kù)沒(méi)有的字段

問(wèn)題三 :? 查詢的權(quán)限擴(kuò)大,有些字段不希望被查詢到

問(wèn)題四:? 實(shí)體類名字與數(shù)據(jù)庫(kù)的表名字不一致

7? 邏輯刪除

情景:在實(shí)際業(yè)務(wù)中,我們刪除數(shù)據(jù)會(huì)對(duì)業(yè)務(wù)造成不可挽回的傷害,所以我們要采取另一種方式來(lái)實(shí)現(xiàn)刪除功能

這里的邏輯:mybatisplus會(huì)提供方法,在表格中添加一欄數(shù)據(jù)來(lái)標(biāo)記此數(shù)據(jù)是否被刪除,從而在其他過(guò)程中不在涉及該數(shù)據(jù)

步驟一 :在數(shù)據(jù)庫(kù)添加字段,這里添加了deleted字段

步驟二 : 在實(shí)體類添加字段,也是deleted

步驟三: 在yml文件內(nèi)讓spring能識(shí)別mybatisplus這個(gè)功能:在表格中添加一欄數(shù)據(jù)來(lái)標(biāo)記此數(shù)據(jù)是否被刪除,若識(shí)別為已經(jīng)刪除,則在其他過(guò)程中不再涉及該數(shù)據(jù)

測(cè)試一把,看看他是怎么實(shí)現(xiàn)的

當(dāng)我執(zhí)行delete方法時(shí)

他的輸出

他底層做的是一個(gè)更新操作,并不是真正的刪除

三? BaseMapper源碼

我們的mapper繼承了這個(gè),從中我們可以看到這個(gè)mybatisplus中到底有什么方法

//

// Source code recreated from a .class file by IntelliJ IDEA

// (powered by FernFlower decompiler)

//

package com.baomidou.mybatisplus.core.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;

import com.baomidou.mybatisplus.core.metadata.IPage;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;

import java.io.Serializable;

import java.util.Collection;

import java.util.List;

import java.util.Map;

import org.apache.ibatis.annotations.Param;

import org.apache.ibatis.exceptions.TooManyResultsException;

import org.apache.ibatis.session.ResultHandler;

public interface BaseMapper extends Mapper {

int insert(T entity);

int deleteById(Serializable id);

int deleteById(T entity);

default int deleteByMap(Map columnMap) {

return this.delete((Wrapper)Wrappers.query().allEq(columnMap));

}

int delete(@Param("ew") Wrapper queryWrapper);

int deleteBatchIds(@Param("coll") Collection idList);

int updateById(@Param("et") T entity);

int update(@Param("et") T entity, @Param("ew") Wrapper updateWrapper);

default int update(@Param("ew") Wrapper updateWrapper) {

return this.update((Object)null, updateWrapper);

}

T selectById(Serializable id);

List selectBatchIds(@Param("coll") Collection idList);

void selectBatchIds(@Param("coll") Collection idList, ResultHandler resultHandler);

default List selectByMap(Map columnMap) {

return this.selectList((Wrapper)Wrappers.query().allEq(columnMap));

}

default void selectByMap(Map columnMap, ResultHandler resultHandler) {

this.selectList((Wrapper)Wrappers.query().allEq(columnMap), resultHandler);

}

default T selectOne(@Param("ew") Wrapper queryWrapper) {

return this.selectOne(queryWrapper, true);

}

default T selectOne(@Param("ew") Wrapper queryWrapper, boolean throwEx) {

List list = this.selectList(queryWrapper);

int size = list.size();

if (size == 1) {

return list.get(0);

} else if (size > 1) {

if (throwEx) {

throw new TooManyResultsException("Expected one result (or null) to be returned by selectOne(), but found: " + size);

} else {

return list.get(0);

}

} else {

return null;

}

}

default boolean exists(Wrapper queryWrapper) {

Long count = this.selectCount(queryWrapper);

return null != count && count > 0L;

}

Long selectCount(@Param("ew") Wrapper queryWrapper);

List selectList(@Param("ew") Wrapper queryWrapper);

void selectList(@Param("ew") Wrapper queryWrapper, ResultHandler resultHandler);

List selectList(IPage page, @Param("ew") Wrapper queryWrapper);

void selectList(IPage page, @Param("ew") Wrapper queryWrapper, ResultHandler resultHandler);

List> selectMaps(@Param("ew") Wrapper queryWrapper);

void selectMaps(@Param("ew") Wrapper queryWrapper, ResultHandler> resultHandler);

List> selectMaps(IPage> page, @Param("ew") Wrapper queryWrapper);

void selectMaps(IPage> page, @Param("ew") Wrapper queryWrapper, ResultHandler> resultHandler);

List selectObjs(@Param("ew") Wrapper queryWrapper);

void selectObjs(@Param("ew") Wrapper queryWrapper, ResultHandler resultHandler);

default

> P selectPage(P page, @Param("ew") Wrapper queryWrapper) {

page.setRecords(this.selectList(page, queryWrapper));

return page;

}

default

>> P selectMapsPage(P page, @Param("ew") Wrapper queryWrapper) {

page.setRecords(this.selectMaps(page, queryWrapper));

return page;

}

}

柚子快報(bào)邀請(qǐng)碼778899分享:MybatisPlus學(xué)習(xí)

http://yzkb.51969.com/

精彩鏈接

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19297048.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄