网站建设 大学生创业网,计算机专业学校全国排名,天水企业网站建设,销售计划方案怎么写MyBatis-Plus
MyBatis-Plus介绍
MyBatis-Plus#xff08;简称MP#xff09;是一个MyBatis的增强工具#xff0c;在MyBatis的基础上只做增强不做改变#xff0c;为简化开发、提高效率而生 特性
无侵入#xff1a;只做增强不做改变#xff0c;引入它不会对现有工程产生影…MyBatis-Plus
MyBatis-Plus介绍
MyBatis-Plus简称MP是一个MyBatis的增强工具在MyBatis的基础上只做增强不做改变为简化开发、提高效率而生 特性
无侵入只做增强不做改变引入它不会对现有工程产生影响损耗小启动既会自动注入基本CRUD性能基本无损耗直接面向对象操作强大的CRUD操作内置通用Mapper、通用Service、仅仅通过少量配置即可实现单表大部分CRUD操作更有强大的条件构造器满足各类使用需求支持Lambda形式调用通过Lambda表达式方便的编写各类查询条件无需再担心字段写错支持多种数据库支持MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre支持主键自动生成支持多达4种主键策略内含分布式唯一ID生成器-Sequence可自由配置完美解决主键问题支持XML热加载Mapper对应的xml支持热加载对于简单的CRUD操作甚至可以无XML启动支持自定义全局通用操作支持全局通用方法注入支持关键词自动转义支持数据库关键词自动转义还可自定义关键词内置代码生成器采用代码或者Maven插件可快速生成Mapper、Model、Service、Controller层代码支持模板引擎更有超多自定义配置内置分页插件基于MyBatis物理分页开发者无需关心具体操作配置好插件之后写分页等同于普通List查询内置性能分析插件可输出Sql语句以及其执行时间建议开发测试时启用该功能能快速揪出慢查询内置全局拦截插件提供全表delete、update操作智能分析阻断也可自定义拦截规则预防误操作内置sql注入剥离器支持Sql注入剥离有效预防Sql注入攻击
架构 快速开始
创建数据库以及表
-- 创建测试表
CREATE TABLE tb_user (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键ID,
user_name varchar(20) NOT NULL COMMENT 用户名,
password varchar(20) NOT NULL COMMENT 密码,
name varchar(30) DEFAULT NULL COMMENT 姓名,
age int(11) DEFAULT NULL COMMENT 年龄,
email varchar(50) DEFAULT NULL COMMENT 邮箱,
PRIMARY KEY (id)
) ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8;-- 插入测试数据
INSERT INTO tb_user (id, user_name, password, name, age, email) VALUES
(1, zhangsan, 123456, 张三, 18, test1itcast.cn);
INSERT INTO tb_user (id, user_name, password, name, age, email) VALUES
(2, lisi, 123456, 李四, 20, test2itcast.cn);
INSERT INTO tb_user (id, user_name, password, name, age, email) VALUES
(3, wangwu, 123456, 王五, 28, test3itcast.cn);
INSERT INTO tb_user (id, user_name, password, name, age, email) VALUES
(4, zhaoliu, 123456, 赵六, 21, test4itcast.cn);
INSERT INTO tb_user (id, user_name, password, name, age, email) VALUES
(5, sunqi, 123456, 孙七, 24, test5itcast.cn);创建工程
导入依赖
dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependency!-- mybatis-plus插件依赖 --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus/artifactIdversion3.1.1/version/dependency!-- MySql --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.47/version/dependency!-- 连接池 --dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.0.11/version/dependency!--简化bean代码的工具包--dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optionalversion1.18.4/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactIdversion1.6.4/version/dependencylog4j.properties
log4j.rootLoggerDEBUG,A1
log4j.appender.A1org.apache.log4j.ConsoleAppender
log4j.appender.A1.layoutorg.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern[%t] [%c]-[%p] %m%nMyBatis实现查询User
1、编写mybatis-config.xml文件
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd
configuration!--读取jdbc.properties--properties resourcejdbc.properties/!--定义别名--typeAliasespackage namecom.dc.domain//typeAliases!--数据库环境--environments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver value${driver}/property nameurl value${url}/property nameusername value${username}/property namepassword value${password}//dataSource/environment/environments!--加载mapper--mapperspackage namecom.dc.mapper//mappers
/configuration2、编写jdbc.properties文件
drivercom.mysql.jdbc.Driver
urljdbc:mysql://localhost:3306/test?useUnicodetrueamp;characterEncodingutf8amp;autoReconnecttrueamp;allowMultiQueriestrueamp;useSSLfalse
usernameroot
passwordroot3、编写User实体类对象
Data
AllArgsConstructor
NoArgsConstructor
public class User {private Long id;private String username;private String password;private String name;private Integer age;private String email;Overridepublic String toString() {return User{ id id , username username \ , password password \ , name name \ , age age , email email \ };}
}4、编写UserMapper接口
public interface UserMapper {ListUser findAll();
}5、编写UserMapper.xml文件
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.dc.mapper.UserMapperselect idfindAll resultTypeuserselect * from tb_user/select
/mapper6、测试
public class Tes {private UserMapper userMapper;Beforepublic void test() throws IOException {InputStream resource Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(resource);SqlSession sqlSession sqlSessionFactory.openSession(true);userMapper sqlSession.getMapper(UserMapper.class);}Testpublic void testUserList(){ListUser userList userMapper.findAll();for (User user : userList) {System.out.println(user);}}
}结果 MyBatisMP实现查询User
1、将UserMapper继承BaseMapper将拥有BaseMapper的所有方法
public interface UserMapper extends BaseMapperUser {ListUser findAll();
}2、使用MP中的MybatisSqlSessionFactoryBuilder进程构建
Testpublic void testUserList1() throws IOException {InputStream resource Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new MybatisSqlSessionFactoryBuilder().build(resource);SqlSession sqlSession sqlSessionFactory.openSession(true);userMapper sqlSession.getMapper(UserMapper.class);// 可以调用BaseMapper中定义的方法ListUser userList userMapper.selectList(null);for (User user : userList) {System.out.println(user);}}这是会报错 解决方案在User对象中添加TableName指定数据库表名 测试结果 简单说明
由于使用了MybatisSqlSessionFactoryBuilder进行了构建继承的BaseMapper中的方法就载入到了SqlSession中所以就可以直接使用相关的方法
SpringMybatisMP
导入依赖
!--spring--dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.1.6.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.1.6.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion5.1.6.RELEASE/version/dependency实现查询user
1、编写jdbc.properties
jdbc.drivercom.mysql.jdbc.Driver
jdbc.urljdbc:mysql://localhost:3306/test?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneAsia/Shanghai
jdbc.usernameroot
jdbc.passwordroot2、编写applicationContext.xml
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd!--配置所有properties文件--context:property-placeholder locationclasspath:jdbc.properties/context:property-placeholder!--定义数据源--bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName value${jdbc.driver}/property nameurl value${jdbc.url}/property nameusername value${jdbc.username}/property namepassword value${jdbc.password}/property namemaxActive value10/property nameminIdle value5//bean!--MP提供的SqlSessionFactory完成了Spring与MP的整合--bean idsqlSessionFactory classcom.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBeanproperty namedataSource refdataSource/property nameconfigLocation valueclasspath:mybatis-config.xml//beanbean classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty namebasePackage valuecom.dc.mapper//beanbeans default-autowirebyType//beans3、编写user对象以及UserMapper接口
Data
AllArgsConstructor
NoArgsConstructor
TableName(tb_user)
public class User {private Long id;private String userName;private String password;private String name;private Integer age;private String email;Overridepublic String toString() {return User{ id id , username userName \ , password password \ , name name \ , age age , email email \ };}
}public interface UserMapper extends BaseMapperUser {}4、测试
RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(locations classpath:applicationContext.xml)
public class TestMybatis {Autowiredprivate UserMapper userMapper;Testpublic void test() {ListUser users userMapper.selectList(null);for (User user : users) {System.out.println(user);}}
}结果 SpringBootMybatisMP
导入依赖
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.5/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.dc/groupIdartifactIdsmp/artifactIdversion0.0.1-SNAPSHOT/versionnamesmp/namedescriptionsmp/descriptionpropertiesjava.version17/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!--mybatis-plus的springboot支持--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.1.1/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactId/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build/project
log4j.properties
log4j.rootLoggerDEBUG,A1
log4j.appender.A1org.apache.log4j.ConsoleAppender
log4j.appender.A1.layoutorg.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern[%t] [%c]-[%p] %m%n编写application.properties
spring.application.namesmp
spring.datasource.driver-class-namecom.mysql.jdbc.Driver
spring.datasource.urljdbc:mysql://localhost:3306/test?useUnicodetruecharacterEncodingutf8autoReconnecttrueallowMultiQueriestrueuseSSLfalse
spring.datasource.usernameroot
spring.datasource.passwordroot编写pojo
Data
AllArgsConstructor
NoArgsConstructor
TableName(tb_user)
public class User {private Long id;private String userName;private String password;private String name;private Integer age;private String email;Overridepublic String toString() {return User{ id id , username userName \ , password password \ , name name \ , age age , email email \ };}
}编写mapper
Mapper
public interface UserMapper extends BaseMapperUser {}编写启动类
MapperScan(com.dc.mapper)
SpringBootApplication
public class SmpApplication {public static void main(String[] args) {SpringApplication.run(SmpApplication.class, args);}}测试用例
RunWith(SpringRunner.class)
SpringBootTest
public class UserMapperTest {Autowiredprivate UserMapper userMapper;Testpublic void test() {ListUser users userMapper.selectList(null);for (User user : users) {System.out.println(user);}}
}结果 通用CRUD
插入操作
方法定义
/**
* 插入一条记录
*
* param entity 实体对象
*/
int insert(T entity);测试用例 Testpublic void testInsert() {User user new User();user.setAge(20);user.setEmail(testdc.com);user.setUserName(caocao);user.setName(曹操);user.setPassword(123456);int insert userMapper.insert(user);System.out.println(result insert);System.out.println(user.getId());}结果 可以看到数据库已经写入到了数据库但是id的值不正确目标是数据库自增长实际是MP生成了id的值写入到了数据库
如何设置id的生成策略
MP支持的id策略
package com.baomidou.mybatisplus.annotation;
import lombok.Getter;
/**
* 生成ID类型枚举类
*/
Getter
public enum IdType {/*** 数据库ID自增*/AUTO(0),/*** 该类型为未设置主键类型*/NONE(1),/*** 用户输入ID* p该类型可以通过自己注册自动填充插件进行填充/p*/INPUT(2),/* 以下3种类型、只有当插入对象ID 为空才自动填充。 *//*** 全局唯一ID (idWorker)*/ID_WORKER(3),/*** 全局唯一ID (UUID)*/UUID(4),/*** 字符串全局唯一ID (idWorker 的字符串表示)*/ID_WORKER_STR(5);private final int key;IdType(int key) {this.key key;}
}修改User对象
Data
AllArgsConstructor
NoArgsConstructor
TableName(tb_user)
public class User {// 指定id类型为自增TableId(type IdType.AUTO)private Long id;private String userName;private String password;private String name;private Integer age;private String email;Overridepublic String toString() {return User{ id id , username userName \ , password password \ , name name \ , age age , email email \ };}
}结果 TableField
在MP中通过TableField注解可以指定字段的一些属性常常解决的问题有2个
对象中的属性名和字段名不一致对象中的属性字段在表中不存在的问题
使用
Data
AllArgsConstructor
NoArgsConstructor
TableName(tb_user)
public class User {// 指定id类型为自增TableId(type IdType.AUTO)private Long id;private String userName;private String password;private String name;private Integer age;// 解决字段名不一致TableId(value email)private String email;// 该字段在数据库中不存在TableField(exist false)private String address;Overridepublic String toString() {return User{ id id , username userName \ , password password \ , name name \ , age age , email email \ };}
}其他用法如某字段不加入查询字段 效果 更新操作
在MP中更新操作有2种一种是根据id更新另一种是根据条件更新
根据id更新
方法定义
/**
* 根据 ID 修改
*
* param entity 实体对象
*/
int updateById(Param(Constants.ENTITY) T entity);测试
Testpublic void testUpdate() {User user new User();// 主键user.setId(1L);// 更新字段user.setAge(21);// 根据id更新更新不为null的字段userMapper.updateById(user);}效果 根据条件更新
方法定义
/**
* 根据 whereEntity 条件更新记录
*
* param entity 实体对象 (set 条件值,可以为 null)
* param updateWrapper 实体对象封装操作类可以为 null,里面的 entity 用于生成 where 语句
*/
int update(Param(Constants.ENTITY) T entity, Param(Constants.WRAPPER) WrapperT
updateWrapper);测试用例
Testpublic void testUpdate2() {User user new User();// 更新字段user.setAge(22);// 更新条件QueryWrapperUser wrapper new QueryWrapper();// id为6的字段wrapper.eq(id, 6);// 执行更新操作int update userMapper.update(user, wrapper);System.out.println(update update);}或者通过UpdateWrapper进行更新
Testpublic void testUpdate3() {// 更新条件UpdateWrapperUser wrapper new UpdateWrapper();wrapper.eq(id, 6).set(age, 23);// 执行更新操作int update userMapper.update(null, wrapper);System.out.println(update update);}测试结果 删除操作
deleteById
方法定义
/**
* 根据 ID 删除
*
* param id 主键ID
*/
int deleteById(Serializable id);测试用例
Testpublic void testDelete() {// 执行删除操作int i userMapper.deleteById(6L);System.out.println(i i);}结果 id为6的数据被删除
deleteByMap
方法定义
/**
* 根据 columnMap 条件删除记录
*
* param columnMap 表字段 map 对象
*/
int deleteByMap(Param(Constants.COLUMN_MAP) MapString, Object columnMap);测试用例
Testpublic void testDeleteByMap() {HashMapString, Object columnMap new HashMap();columnMap.put(age, 21);columnMap.put(name, 张三);// 将column中的元素设置为删除的条件多个之间为and关系int i userMapper.deleteByMap(columnMap);System.out.println(i i);}效果 delete
方法定义
/**
* 根据 entity 条件删除记录
*
* param wrapper 实体对象封装操作类可以为 null
*/
int delete(Param(Constants.WRAPPER) WrapperT wrapper);测试用例
Testpublic void testDelete1() {User user new User();user.setAge(20);user.setName(张三);// 将实体对象进行封装包装为操作条件QueryWrapperUser wrapper new QueryWrapper(user);int delete userMapper.delete(wrapper);System.out.println(delete delete);}效果 deleteBatchIds
方法定义
/**
* 删除根据ID 批量删除
*
* param idList 主键ID列表(不能为 null 以及 empty)
*/
int deleteBatchIds(Param(Constants.COLLECTION) Collection? extends Serializable
idList);测试用例
Testpublic void testDeleteByMap1() {// 根据id集合批量删除int i userMapper.deleteBatchIds(Arrays.asList(6L, 10L, 20L));System.out.println(i i);}效果 查询操作
MP提供了多种查询操作包括根据id查询、批量查询、查询单条数据、查询列表、分页查询等操作
selectById
方法定义
/**
* 根据 ID 查询
*
* param id 主键ID
*/
T selectById(Serializable id);测试用例
Testpublic void testSelectById() {// 根据id查询数据User user userMapper.selectById(2L);System.out.println(result user);}效果 selectBatchIds
方法定义
/**
* 查询根据ID 批量查询
*
* param idList 主键ID列表(不能为 null 以及 empty)
*/
ListT selectBatchIds(Param(Constants.COLLECTION) Collection? extends Serializable
idList);测试用例
Testpublic void testSelectBatchIds() {// 根据id批量查询数据ListUser users userMapper.selectBatchIds(Arrays.asList(2L, 3L, 10L));for (User user : users) {System.out.println(user);}}效果 selectOne
方法定义
/**
* 根据 entity 条件查询一条记录
*
* param queryWrapper 实体对象封装操作类可以为 null
*/
T selectOne(Param(Constants.WRAPPER) WrapperT queryWrapper);测试用例
Testpublic void testSelectOne() {// 根据id批量查询数据QueryWrapperUser wrapper new QueryWrapper();wrapper.eq(name, 李四);// 根据条件查询一条数据如果结果超过一条会报错User user userMapper.selectOne(wrapper);System.out.println(user);}效果 selectCount
方法定义
/**
* 根据 Wrapper 条件查询总记录数
*
* param queryWrapper 实体对象封装操作类可以为 null
*/
Integer selectCount(Param(Constants.WRAPPER) WrapperT queryWrapper);测试用例
Testpublic void testSelectCount() {QueryWrapperUser wrapper new QueryWrapper();wrapper.gt(age, 23);// 根据条件查询数据条数Integer integer userMapper.selectCount(wrapper);System.out.println(integer integer);}效果 selectList
方法定义
/**
* 根据 entity 条件查询全部记录
*
* param queryWrapper 实体对象封装操作类可以为 null
*/
ListT selectList(Param(Constants.WRAPPER) WrapperT queryWrapper);测试用例
Testpublic void testSelectList() {QueryWrapperUser wrapper new QueryWrapper();wrapper.gt(age, 23);// 根据条件查询数据ListUser users userMapper.selectList(wrapper);for (User user : users) {System.out.println(user);}}效果 selectPage
方法定义
/**
* 根据 entity 条件查询全部记录并翻页
*
* param page 分页查询条件可以为 RowBounds.DEFAULT
* param queryWrapper 实体对象封装操作类可以为 null
*/
IPageT selectPage(IPageT page, Param(Constants.WRAPPER) WrapperT queryWrapper);编写配置类
Configuration
MapperScan(com.dc.mapper)
public class MybatisPlusConfig {/*** 分页插件* param* return*/Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}
}测试用例
Testpublic void testSelectPage() {QueryWrapperUser wrapper new QueryWrapper();wrapper.gt(age, 18);PageUser page new Page(1, 1);// 根据条件查询数据IPageUser userIPage userMapper.selectPage(page, wrapper);System.out.println(数据总条数 userIPage.getTotal());System.out.println(总页数 userIPage.getPages());// 获取当前页面记录ListUser records userIPage.getRecords();for (User record : records) {System.out.println(record);}}效果 配置
在MP中有大量配置其中有一部分是MyBatis原生的配置另一部分是MP的配置。
基本配置
configLocation
MyBatis配置文件位置如果有单独的MyBatis配置请将其路径配置到configLocaotion中。
SpringBoot
mybatis-plus.config-location classpath:mybatis-config.xmlSpringMVC:
bean idsqlSessionFactory
classcom.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBeanproperty nameconfigLocation valueclasspath:mybatis-config.xml/
/beanmapperLocations
MyBatis Mapper所对应的xml文件位置如果在Mapper中有自定义方法xml中有自定义实现需要进行该配置告诉Mapper所对应的xml文件位置
SpringBoot
mybatis-plus.mapper-locations classpath*:mybatis/*.xmlSpringMVC
bean idsqlSessionFactory
classcom.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBeanproperty namemapperLocations valueclasspath*:mybatis/*.xml/
/beanMaven多模块项目的扫描路径需以classpath*:开头(即加载多个jar包下的xml文件) typeAliasesPackage
MyBatis别名包扫描路径通过该属性可以给包中的类注册别名注册后再mapper对应的xml文件中可以直接使用类名而不用使用全限定的类名即xml中调用的时候不用包含类名
SpringBoot
mybatis-plus.type-aliases-package cn.itcast.mp.pojoSpringMVC:
bean idsqlSessionFactory
classcom.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBeanproperty nametypeAliasesPackage
valuecom.baomidou.mybatisplus.samples.quickstart.entity/
/bean进阶配置
mapUnderscoreToCamelCase
类型boolean默认值true
是否开启自动驼峰命名规则(camelcase)映射即从经典数据库列名A_COLUMN(下划线命名)到经典java属性名aColumn(驼峰命名)的类似映射 注意此属性在MyBatis中原默认值为false在MyBatis-Plus中此属性也将用于生成最终的SQL的select body。 如果数据库命名符合规则则无需使用TableFiled注释指定数据库字段名 示例SpringBoot
#关闭自动驼峰映射该参数不能和mybatis-plus.config-location同时存在
mybatis-plus.configuration.map-underscore-to-camel-casefalsecacheEnabled
类型boolean默认值true
全局的开启或关闭配置文件中的所有映射器已经配置的任何缓存默认为true
示例
mybatis-plus.configuration.cache-enabledfalseDB策略配置
idType
类型com.baomidou.mybatisplus.annotation.IdType默认值ID_WIRKER
全局默认主键类型设置后即可省略实体对象中的TableId(typeidType.AUTO)配置
示例
SpringBoot
mybatis-plus.global-config.db-config.id-typeautoSpringMVC
!--这里使用MP提供的sqlSessionFactory完成了Spring与MP的整合--
bean idsqlSessionFactory
classcom.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBeanproperty namedataSource refdataSource/property nameglobalConfigbean classcom.baomidou.mybatisplus.core.config.GlobalConfigproperty namedbConfigbean
classcom.baomidou.mybatisplus.core.config.GlobalConfig$DbConfigproperty nameidType valueAUTO//bean/property/bean/property
/beantablePrefix
类型string默认值null
表名前缀全局配置后可省略TableName()配置
SpringBoot
mybatis-plus.global-config.db-config.table-prefixtb_SpringMVC
bean idsqlSessionFactory
classcom.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBeanproperty namedataSource refdataSource/property nameglobalConfigbean classcom.baomidou.mybatisplus.core.config.GlobalConfigproperty namedbConfigbean
classcom.baomidou.mybatisplus.core.config.GlobalConfig$DbConfigproperty nameidType valueAUTO/property nametablePrefix valuetb_//bean/property/bean/property
/bean条件构造器
在MP中Wrapper接口的实现类关系如下 AbstractWrapper和AbstractChainWrapper是重点实现的。 说明 QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper)的父类用于生成sql的where条件entity属性也用于生成sql的where条件。注意entity生成的where条件与使用各个api生成的where条件没有任何关联行为 allEq
说明
allEq(MapR, V params)
allEq(MapR, V params, boolean null2IsNull)
allEq(boolean condition, MapR, V params, boolean null2IsNull)全部eq(或个别isNuLL) 个别参数说明paramskey为数据库字段名value为字段值,nullisnuull为true则在map的value为null时调用isNull方法为false时则忽略value为null的字段 例1allEq({id:1, name:“老王”, age:null}) —id 1 and name ‘老王’ and age is null例2allEq({id:1, name:“老王”, age:null}, false) —id 1 and name ‘老王’ allEq(BiPredicateR, V filter, MapR, V params)
allEq(BiPredicateR, V filter, MapR, V params, boolean null2IsNull)
allEq(boolean condition, BiPredicateR, V filter, MapR, V params, boolean
null2IsNull)个别参数说明filter过滤参数是否允许字段传入比对条件中params与null2isNull同上 例1allEq(k,v)- k.indexOf(“a”) 0, {id:1, name:“老王”, age:null}) -- name ‘老王’ and age is null例2allEq(k,v) - k.indexOf(“a”) 0, {id:1, name:“老王”, age:null}, false) -- name ‘老王’ 测试用例
RunWith(SpringRunner.class)
SpringBootTest
public class UserMapperTest {Autowiredprivate UserMapper userMapper;Testpublic void testWrapper() {QueryWrapperUser wrapper new QueryWrapper();//设置条件MapString,Object params new HashMap();params.put(name, 曹操);params.put(age, 20);params.put(password, null);// wrapper.allEq(params); // SELECT * FROM tb_user WHERE password IS NULL AND name ? AND age ?// wrapper.allEq(params,false); // SELECT * FROM tb_user WHERE name ? AND age ?// wrapper.allEq((k, v) - (k.equals(name) || k.equals(age)),params); // SELECT * FROM tb_user WHERE name ? AND age ?ListUser users this.userMapper.selectList(wrapper);for (User user : users) {System.out.println(user);}}
}基本操作
eq 等于 ne 不等于 ge 大于等于 lt 小于 le 小于等于 between BETWEEN 值1 AND 值2 notBetween NOT BETWEEN 值1 AND 值2 in 字段 IN (value.get(0), value.get(1),…) notIn 字段 NOT IN (v0, v1, …)
测试用例:
Testpublic void testEq() {QueryWrapperUser wrapper new QueryWrapper();wrapper.eq(password, 123456).ge(age, 20).in(name, 李四, 王五, 马六);ListUser users userMapper.selectList(wrapper);for (User user : users) {System.out.println(user);}}效果: 模糊查询
like like ‘%值%’例: like(“name”, “王”) — name like ‘%王%’ notlike NOT LIKE ‘%值%’ likeLeft LIKE ‘%值%’例: likeLeft(“name”, “王”) -- name like ‘%王’ likeRight LIKE ‘值%’例: likeRight(“name”, “王”) -- name like ‘王%’
测试
Testpublic void testLike() {QueryWrapperUser wrapper new QueryWrapper();wrapper.like(name, 王);ListUser users userMapper.selectList(wrapper);for (User user : users) {System.out.println(user);}}效果: 排序
orderBy 排序: ORDER BY 字段…例:orderBy(true, true, “id”, “name”) -- order by id ASC, name ASC orderByAsc 排序: ORDER BY 字段,… ASC例:orderByAsx(“id”, “name”) — order by id ASC, name ASC orderByDesc 排序:ORDER BY 字段,… DESC例:orderByDesc(“id”, “name”) -- order by id DESC, name DESC
测试用例:
Testpublic void testOrder () {QueryWrapperUser wrapper new QueryWrapper();wrapper.orderByDesc(age);ListUser users userMapper.selectList(wrapper);for (User user : users) {System.out.println(user);}}效果: 逻辑查询
or 拼接or主动调用or表示紧接着下一个方法不是用and连接(不调用or, 则默认使用and连接) and ANd嵌套例:and(i - i.eq(“name”, “李白”).ne(“status”, “活着”)) -- and (name ‘李白’ and status ‘活着’)
测试用例:
Testpublic void testOr () {QueryWrapperUser wrapper new QueryWrapper();wrapper.eq(name, 李四).or().eq(age, 24);ListUser users userMapper.selectList(wrapper);for (User user : users) {System.out.println(user);}}效果: select
在MP查询中,默认查询所有的字段,如果有需要也可以通过select方法进行指定字段
Testpublic void testSelect() {QueryWrapperUser wrapper new QueryWrapper();wrapper.select(id, name, age);ListUser users userMapper.selectList(wrapper);for (User user : users) {System.out.println(user);}}效果: