mybaits-plus和git

mybatisplus

git的工具使用

远程获取项目文件

[图片上传失败...(image-16ee41-1662884245296)]

进入到项目后设置文件编码格式,如图就可以了

[图片上传失败...(image-a8cb93-1662884245296)]

设置一下maven仓库

[图片上传失败...(image-5eb7bc-1662884245296)]

创建分支来编写自己的代码,并将该分支提交到本地仓库,这样master主分支就不会有我刚才编写的代码了

创建分支

·

[图片上传失败...(image-594fb1-1662884245296)]

分支编写自己的代码

·

[图片上传失败...(image-a87c51-1662884245296)]

提交分支代码到本地仓库

· 添加到临时仓库

[图片上传失败...(image-17be4e-1662884245296)]

· 再提交到本地窗口,并设置版本号

[图片上传失败...(image-ee0b58-1662884245295)]

[图片上传失败...(image-5a5b3a-1662884245295)]

在我没有提交到远程仓库时,已经有人提交了代码,并且占用了我的分支代码位置

[图片上传失败...(image-ef4ac9-1662884245295)]

此时我要切换到我的主分支master,拉取远程仓库的最新代码

切换到主分支

·

[图片上传失败...(image-ab5859-1662884245295)]

拉取远程最新带项目文件

·

[图片上传失败...(image-280e84-1662884245295)]

·

[图片上传失败...(image-c764f4-1662884245295)]

拉取完可以看到有人已经提交过的代码

·

[图片上传失败...(image-22dd46-1662884245295)]

拉取最新的代码后,利用主分支将子分支合并,合并后会自动提交到本地仓库,合并过程中会有一个框可以处理冲突问题

提交主分支到临时仓库再提交到本地仓库

·

[图片上传失败...(image-5d5bf3-1662884245295)]

·

[图片上传失败...(image-515381-1662884245295)]

设置本地创库版本

·

[图片上传失败...(image-e6d40f-1662884245295)]

合并子分支

·

[图片上传失败...(image-6258d9-1662884245295)]

·

[图片上传失败...(image-4b950d-1662884245295)]

合并过程冲突问题处理

·

[图片上传失败...(image-a6a949-1662884245295)]

·

[图片上传失败...(image-f7e819-1662884245295)]

·

[图片上传失败...(image-6fdc0-1662884245295)]

处理完冲突,最后再提交master到本地仓库,然后继续提交master代码到远程仓库了

[图片上传失败...(image-27aa01-1662884245295)]

子分支dev更新后可以继续编写,编写完成继续按上面流程走

子分支更新

·

[图片上传失败...(image-68dfca-1662884245295)]

·

[图片上传失败...(image-b25d2e-1662884245295)]

idea配置忽略类型

安装ignore插件

·

[图片上传失败...(image-67d1e6-1662884245295)]

配置忽略类型

·

[图片上传失败...(image-aeeaeb-1662884245295)]

项目创建.gitignore

[图片上传失败...(image-1f8beb-1662884245295)]

[图片上传失败...(image-7cb7ae-1662884245295)]

[图片上传失败...(image-3be92d-1662884245295)]

mybatis-plus

依赖

<artifactId>mybatis-plus-boot-starter</artifactId>

配置文件:忽略下滑线以及驼峰sql语句的日志扫描编写sql语句的xml配置文件

mybatis-plus: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mapper-locations: classpath:mapper/*Mapper.xml

dao层(一般内置方法的都是select upadate insert )没有注解,只有继承BaseMapper接口,添加泛型即对象自定义的的方法

public interface UserMapper extends BaseMapper<User> { List<User> selectUserBylike(@Param("name") String name) ;}

业务层实现类(一般内置方法都是get save)有service注解,目标添加都ioc容器中继承ServiceImpl<dao层接口, 操作的对象> 自定义的方法实现业务的接口

@Servicepublic class UserServerImpl extends ServiceImpl<UserMapper, User>implements UserServer { @Override public List<User> getUserBylike(String name) { List<User> users =baseMapper.selectUserBylike(name); return users; }}

业务层接口没有注解,继承了IService<操作的对象>

public interface UserServer extends IService<User> { List<User> getUserBylike(String name);}

启动类有扫描dao层的注解@MapperScan

@SpringBootApplication@MapperScan(basePackages = "com.atguigu.mybatisplus.mapper")public class MybatisPlusApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusApplication.class,args); }}

实体类,只有Javabean

@Datapublic class User { private Long id; private String name; private Integer age; private String email;}

sql语句的配置文件由于user对象没有添加到ioc容器中,使用写类型时写全限定名模糊查询的%可以在这里添加 ""来进行转义

<?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.atguigu.mybatisplus.mapper.UserMapper"> <select id="selectUserBylike" resultType="com.atguigu.mybatisplus.pojo.entity.User"> select * from user where name like "%"#{name}"%" </select></mapper>

** mybatis注解**

自动填充@TableField(fill = FieldFill.INSERT_UPDATE)

数据库设置为日期格式

·

[图片上传失败...(image-d4ac16-1662884245294)]

映射表字段设置注解,添加日期自动填充以及日期格式@TableField(fill = FieldFill.INSERT_UPDATE) LocalDateTime

·

[图片上传失败...(image-f96872-1662884245294)]

创建配置类@Component添加IOC容器 MetaObjectHandler 实现接口this.strictInsertFill 插入自动填充this.strictUpdateFill 更新自动填充

·

[图片上传失败...(image-142666-1662884245294)]

更新用basemapper的updateById,且更新是调用了配置类的更新方法,更新时间

实现逻辑删除没有使用逻辑删除前是物理删除userMapper.deleteById(16+i);

仓库设置默认值为0,表示不删除

·

[图片上传失败...(image-4afa37-1662884245294)]

实体映射表字段添加逻辑注解 @TableLogic

·

[图片上传失败...(image-55d4e5-1662884245294)]

直接调用删除操作,只是逻辑删除

·

[图片上传失败...(image-d152c3-1662884245294)]

id自增长或者id唯一

雪花算法,如果不设置就是默认的@TableId(type = IdType.ASSIGN_ID)

·

[图片上传失败...(image-8633c6-1662884245294)]

自增注解 @TableId(type = IdType.AUTO) 数据库要设置自增

·

[图片上传失败...(image-98edca-1662884245294)]

分页插件

自动分页

创建分页对象,设置分页并进行分页查询Page<User> userPage = new Page<>();userMapper.selectPage(userPage, null);

·

[图片上传失败...(image-45a7ab-1662884245294)]

创建一个配置类@Configuration @BeanMybatisPlusInterceptor 容器addInnerInterceptor 添加对象的方法new PaginationInnerInterceptor()分页

·

[图片上传失败...(image-590898-1662884245294)]

特点,自动配置逻辑删除条件,即逻辑删除的数据不会被选中

手动分页

在配置类的基础上,在dao层添加分页参数Page<User>page

·

[图片上传失败...(image-92335d-1662884245294)]

sql操作的xml文件配置忽略分页参数正常编写,这里编写没有编写逻辑删除

·

[图片上传失败...(image-fcb594-1662884245294)]

创建分页对象并设置放到方法参数中

·

[图片上传失败...(image-2cfe0a-1662884245294)]

特点:由于sql语句没有添加逻辑删除,所以会将逻辑删除的数据也查询出来进行分页

乐观锁插件

配置一个配置类new OptimisticLockerInnerInterceptor()锁@Configuration @BeanMybatisPlusInterceptor 容器addInnerInterceptor 添加对象的方法

[图片上传失败...(image-6ff0ee-1662884245294)]

映射表的JavaBean字段配置每次修改一次,该字段就会进行增加一

[图片上传失败...(image-c63b68-1662884245294)]

同时进行操作,后拿到是数据更新会失败,就是因为我们添加的版本注解的字段值改变了

[图片上传失败...(image-408698-1662884245294)]

条件构造器Wrapper

QueryWrapper

查询操作

· 创建构造器QueryWrappe

• QueryWrapper<User> wrapper = new QueryWrapper<>();

· 添加交集连接,也就是and连接,用链式方法将多个条件添加

[图片上传失败...(image-b77dcc-1662884245294)]

· 提交查询语句

• List<User> users = userMapper.selectList(wrapper);

带有内部条件查询操作 new Consumer<QueryWrapper<User>>()

· 方法一

• 创建构造对象QueryWrapper

• QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();

• 创建内部条件对象并设置条件new Consumer<QueryWrapper<User>>

• Consumer<QueryWrapper<User>> consumer = new Consumer<QueryWrapper<User>>() { @Override public void accept(QueryWrapper<User> user) { user.le("age",18).or().isNotNull("email"); }

• 构造对象添加内部条件以及外部条件.and

• userQueryWrapper.like("name", "a").and(consumer)

• 提交查询

• userMapper.selectList(userQueryWrapper);

· 方法二

• 创建构造对象QueryWrapper

• QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();

• 利用拉姆达表达式添加内部对象

• userQueryWrapper.like("name","a").and(consumer->consumer.le("age",30).or().isNull("create_time"));

• 提交查询

• userMapper.selectList(userQueryWrapper);

· 两个方法代码图

[图片上传失败...(image-6c18fc-1662884245293)]

查询字段.selectMapsselect("name","age")

· 查询语句

• public void test5(){ //查询所有用户的用户名和年龄 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); //只查询字段select queryWrapper.select("name","age"); List<Map<String, Object>> list = userMapper.selectMaps(queryWrapper); list.forEach(System.out::println); }

· 结果

[图片上传失败...(image-18e3fa-1662884245293)]

字查询单个字段selectObjs.inSql或者in

· 代码

• public void test6(){ //查询id不大于3的所有用户的id列表 QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();//userQueryWrapper.in("id",3,4,5); userQueryWrapper.inSql("id","select id from user where id>=3"); //查询返回一列 List<Object> objects = userMapper.selectObjs(userQueryWrapper); objects.forEach(System.out::println); }

• queryWrapper.in("id", 1, 2, 3 );// 或queryWrapper.le("id", 3 );

· 结果

[图片上传失败...(image-8b76bd-1662884245293)]

注意:字段是数据库的字段,如果是javabean的字段进行操作会失败

UpdateWrapper

更新流程

· 创建更新对象UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();

· 更新可以设置字段以及条件.set("age"!=null,"age",18) .like("name","n")

· 更新语句userMapper.update(null, userUpdateWrapper);

· 代码

• public void test7(){ //查询名字中包含n,且(年龄小于18或email为空的用户),并将这些用户的年龄设置为18, // 邮箱设置为 user@atgg.com //创建更新对象 UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>(); //设置更新的数据以及更新条件 //import com.baomidou.mybatisplus.core.toolkit.StringUtils; userUpdateWrapper.set("age"!=null,"age",18) .set(StringUtils.isNotBlank("email"),"email","user@atgg.com") .like("name","n") .and(consumer->consumer.le("age",18).or().isNotNull("email")); int update = userMapper.update(null, userUpdateWrapper); System.out.println("update = " + update); }

动态组装查询条件

代码

· public void test8(){ //查询名字中包含n,年龄大于10且小于20的用户,查询条件来源于用户输入,是可选的 String name=null; Integer le=20; Integer ge=10; //创建查询对象 QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(); userQueryWrapper.like(StringUtils.isNotBlank(name),"name",name) .le(le!=null,"age",le) .ge(ge!=null,"age",ge); //提交查询 List<User> users = userMapper.selectList(userQueryWrapper); users.forEach(System.out::println);

条件由外面输入String name=null; Integer le=20; Integer ge=10;

字段中定义字段条件.like(StringUtils.isNotBlank(name),"name",name) .le(le!=null,"age",le)

提交查询语句,要是条件不符合的字段就会去掉,以条件成立的字段做查询条件

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,302评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,563评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,433评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,628评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,467评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,354评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,777评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,419评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,725评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,768评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,543评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,387评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,794评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,032评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,305评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,741评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,946评论 2 336

推荐阅读更多精彩内容