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);