当前位置: 首页 > 后端技术 > Java

mybatis_Plus

时间:2023-04-01 15:53:08 Java

1.首先了解Mybatis_Plus:Mybatis_plus(MP):是Mybatis的增强工具。在Mybatis的基础上,只做增强不做改动,以简化开发,提高效率。(是一个插件)官网:https://baomidou.com/作者:Mybatis-Plus由baomidou组织开发,开源。目前,该组织约有30万人。1.2特点:无侵入:只做增强,不做任何改动。引入它不会影响现有项目,顺滑如丝,损失小:启动时会自动注入基础CURD,性能基本无损,面向对象操作直接强大。少量配置即可实现单表的大部分CRUD操作。还有强大的条件构造函数,满足各种使用需求。支持Lambda表单调用:通过Lambda表达式,方便编写各种查询条件,不用担心字段写错支持自动主键生成:最多支持4种主键策略(包括一个分布式唯一ID生成器——Sequence),可自由配置,完美解决主键问题支持ActiveRecord模式:支持ActiveRecord表单调用,实体类只需要继承Model类即可进行强大的CRUD操作内置代码生成器:使用代码或Maven插件快速生成Mapper、Model、Service、Controller层代码,支持模板引擎,更多自定义配置等你使用内置分页插件:基于MyBatis物理分页,开发者无需关心具体操作。配置插件后写分页相当于普通List查询分页插件支持多种数据库:支持MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer等数据库内置性能分析插件-in:可以输出SQL语句及其执行时间。建议在开发测试时开启该功能,可以快速发现慢查询。规则、防止误操作等,详见mybatis-Plus官网支持数据库MySQL、Oracle等,目前只使用这两种数据库架构步骤3注意:springboot项目的创建需要连接到互联网。如果没有联网,则创建不成功。创建完成后会出现这个界面。org.springframework.bootspring-boot-startermysqlmysql-connector-java8.0.30org.projectlomboklombokcom.alibabadruid1.1.6junitjunit4.12测试com.baomidoumybatis-plus-boot-starter3.4.2导入依赖后:配置文件application.ymlspring:datasource:type:com.alibaba.druid.pool.DruidDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/mp用户名:root密码:root然后写实体类和mapper类实体://getset方法可以用@Data注解privateintid;//这个注解映射数据库的字段@TableField(value="user_name")privateString用户名;私有字符串密码;私有字符串名称;私人整数年龄;privateStringemail;//比如实体类中有一个属性remark,但是数据库中没有这个字段,但是在执行插入操作的时候给实体类的remark属性赋值,那么就可以添加到实体类的remark属性中false表示存在,true表示存在@TableField(exist=false)privateIntegerremarkmapper:@MapperpublicinterfaceUserMapperextendsBaseMapper{}//这里继承BaseMapper中的方法然后测试:@AutowiredprivateUserMapperusermapper;//QueryAll@Testvoidtext01(){ListuserList=usermapper.selectList(null);//这里为空,因为没有条件System.out.println(userList);}//根据id查询@Testvoidtext02(){UseruserById=usermapper.selectById(1);}//添加数据@Testvoidtext03(){Useruser=newUser();user.setId(1);user.setUserName("张三");user.setpassword("张三");user.setName("张三");user.setAge(18);user.setEmail("张三@qq.com");System.out.println(usermapper.insert(user));}//修改@Testvoidtext04(){Useruser=newUser();user.setId(1);user.setUserName("lisi");user.setpassword("lisi");user.setName("lisi");user.setAge(20);user.setEmail("lisi@qq.com");System.our.println(usermapper.updateById);}//删除@Testvoidtext05(){System.out.println(usermapper.deleteById(1))}//分页查询@Testvoidtext06(){Ipagepage=newPage(1,2);usermapper.selectPage(page,null);System.out.println("当前页"+page.getCurrent());System.out.println("当前页显示多少条数据"+page.getSize());System.out.println("一共多少页"+page.getPages());系统输出文件rintln("总共有多少条数据"+page.getTotal);System.out.println("Data"+page.getRecords);}//新建类myconfig//测试前需要添加拦截器,如果不加拦截器就是查询所有的sql语句,分页查询是原来加函数时的基础@Configuration//需要加注解,否则publicclassmyconfig{@BeanpublicMybatisPlusInterceptormp(){//定义拦截器MybatisPlusInterceptormp=newMybatisPlusInterceptor();//分页拦截器为PageinationInnerInterceptor,mp.addInnerInterceptor(newPageinationInnerInterceptor());//将分页拦截器封装成一个大拦截器returnmp;}}如果想看到执行的sql语句需要在配置文件配置logmybatis-plus中输入log来显示:configuration:log-impl:org.apache.ibatis.logging.stdout.StdOutImpl2.3:DQL查询2.3.1条件查询Mybatis-Plus条件查询的写法有3种:推荐使用第三种//第一种:QueryWrapper格式条件查询采用字符串形式容易出错。@Testvoidtext(){QueryWrapperqw=newQueryWrapper();//小于。字段、条件qw.lt("age",18);System.out.println(userMapper.selectList(qw));}//第二种:lambda格式条件查询@Testvoidtext(){//需要添加pantypeQueryWrapperqw=newQueryWrapper();qw.lambda().lt(User::getAge,18);System.out.println(userMapper.selectList(qw));}//第三种类型:@Testvoidtext(){LambdaQueryWrapperqw=newLambdaQueryWrapper();//这是18岁以下的查询,qw.lt(User::getAge,18);//这是查询和关系qw.lt(User::getAge,18).gt(User::getAge,1);qw.between(1,18);//或者关系qw.lt(用户::getAge,18)。or().gt(User::getAge,1);System.out.println(userMapper.selectList(qw))}//条件查询空判断,第一个条件为空怎么办?//新建一个实体类继承UserpublicclassUserQueryextendsUser{privateIntegerage2;}//test@testvoidtext(){UserQueryuq=newUserQuery(){uq.setAge(10);uq.setAge2(30);LambdaQueryWrapperqw=newLambdaQueryWrapper();//意思是:当uq.getAge2为空时,不执行“逗号”后面的条件qw.lt(null!=uq.getAge2(),User::getAge,uq.getAge2());qw.gt(null!=uq.getAge(),User::getAge,uq.getAge());System.out.println(userMapper.selectList(qw))}}//查询投影:指的是指定字段//比如只想看id,name,age@Testvoidtext(){LambdaQueryWrapperqw=newLambdaQueryWrapper();qw.select(User::getid,User::getusername,User::getage);System.out,println(userMapper.selectList(qw))}//显示重复值的总数对于这个字段@Testvoidtext(){QueryWrapperqw=newQueryWrapper;qw.select("count(*)ascount,age");qw.groupBy("年龄");System.out.println(userMapper.selectMaps(qw));}id生成策略实体://AUTO:使用数据库自??动生成的id//NONE:不设置id//INPUT:需要手动写入id//ASSIGN_ID:雪花算法@TableId(type=IdType.AUTO)privateintid;私有字符串用户名;私有字符串密码;私有字符串名称;私人整数年龄;