简介
MyBatis-Plus(简称MP)是一个Mabatis的增强工具,在MyBatis的基础上制作增强不做改变,为简化开发、提高效率而生。
官网
特性
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
- 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
- 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
- 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
开始使用
创建数据库 ```java USE test;
— 创建测试表
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)
)
ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
— 插入测试数据
INSERT INTO tb_user (id, user_name, password, name, age, email) VALUES (‘1’, ‘zhangsan’, ‘123456’, ‘张三’, ‘18’, ‘test1@itcast.cn’);
INSERT INTO tb_user (id, user_name, password, name, age, email) VALUES (‘2’, ‘lisi’, ‘123456’, ‘李四’, ‘20’, ‘test2@itcast.cn’);
INSERT INTO tb_user (id, user_name, password, name, age, email) VALUES (‘3’, ‘wangwu’, ‘123456’, ‘王五’, ‘28’, ‘test3@itcast.cn’);
INSERT INTO tb_user (id, user_name, password, name, age, email) VALUES (‘4’, ‘zhaoliu’, ‘123456’, ‘赵六’, ‘21’, ‘test4@itcast.cn’);
INSERT INTO tb_user (id, user_name, password, name, age, email) VALUES (‘5’, ‘sunqi’, ‘123456’, ‘孙七’, ‘24’, ‘test5@itcast.cn’);
SELECT * FROM tb_user;
创建工程<br /><br />导入依赖```java<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>itcast-mybatis-plus</artifactId><version>1.0-SNAPSHOT</version><modules><module>itcast-mybatis-plus-simple</module></modules><packaging>pom</packaging><dependencies> <!-- mybatis-plus插件依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.1.1</version></dependency> <!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version> </dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.11</version> </dependency><!--简化bean代码的工具包--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional><version>1.18.4</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.4</version> </dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build></project>
Mybatis+MP
创建子Module
导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>itcast-mybatis-plus</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>itcast-mybatis-plus-simple</artifactId>
</project>
log4j.properties
log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%t] [%c]-[%p] %m%n
MyBatis实现查询User
第一步:编写mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--设置日志-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!--配置数据源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///test"/>
<property name="username" value="root"/>
<property name="password" value="liuhuande123"/>
</dataSource>
</environment>
</environments>
<!--指定其他mapper文件的位置:其他mapper文件目的是找到其他文件的sql语句-->
<mappers>
<!--
使用mapper的resource属性指定mapper文件的路径
这个路径是从target/classes路径开启的
使用注意:
resource=“mapper文件的路径,使用/分割路径”
一个mapper resource指定一个mapper文件
-->
<!-- <package name="cn.itcast"/>-->
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
第二步:编写User实体对象
package cn.itcast.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private String email;
}
第三步:编写UserMapper接口
package cn.itcast.mapper;
import cn.itcast.pojo.User;
import java.util.List;
public interface UserMapper {
public List<User> findAll();
}
第四步:编写UserMapper.xml文件
<?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="cn.itcast.mapper.UserMapper">
<select id="findAll" resultType="cn.itcast.pojo.User">
select * from tb_user
</select>
</mapper>
第五步:编写TestMybatis测试用例
package cn.itcast.test;
import cn.itcast.mapper.UserMapper;
import cn.itcast.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestMybatis {
@Test
public void testUserList() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> list = mapper.findAll();
for (User user : list) {
System.out.println(user);
}
}
}
Mybatis+MP实现查询User
第一步:将UserMapper继承BaseMapper,将拥有了BaseMapper中的所有方法
package cn.itcast.mapper;
import cn.itcast.pojo.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
public interface UserMapper extends BaseMapper<User> {
public List<User> findAll();
}
第二步:使用MP中的MybatisSqlSessionFactoryBuilder进程构建
package cn.itcast.test;
import cn.itcast.mapper.UserMapper;
import cn.itcast.pojo.User;
import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestMybatis {
@Test
public void testUserList() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> list = mapper.selectList(null);
for (User user : list) {
System.out.println(user);
}
}
}
第三步:在User对象中添加@TableName,指定数据库表名
package cn.itcast.pojo;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_user")
public class User {
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private String email;
}
Spring+Mybatis+MP
第一步:引入jar包
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!-- $Id: pom.xml 642118 2008-03-28 08:04:16Z reinhard $ -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<name>itcast-mybatis-plus-spring</name>
<groupId>org.example</groupId>
<artifactId>itcast-mybatis-plus-spring</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.7</version>
<configuration>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8888</port>
<maxIdleTime>30000</maxIdleTime>
</connector>
</connectors>
<webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}</webAppSourceDirectory>
<contextPath>/</contextPath>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
</dependencies>
</project>
第二步:编写applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
">
<!--开启注解扫描,希望处理service和dao,controller不需要spring框架去处理-->
<context:component-scan base-package="cn.itcast">
<!--配置哪些注解不扫描-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- Spring整合Mybatis框架-->
<!-- 配置连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///ssm"/>
<property name="username" value="root"/>
<property name="password" value="liuhuande123"/>
</bean>
<!-- 配置SqlSessionFactory工程-->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置AccountDao接口所在包-->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.itcast.mapper"/>
</bean>
</beans>
第三步:编写User对象以及UserMapper接口
package cn.itcast.pojo;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_user")
public class User {
private Integer id;
private String user_name;
private String password;
private String name;
private Integer age;
private String email;
}
第四步:编写测试用例
package cn.itcast.test;
import cn.itcast.mapper.UserMapper;
import cn.itcast.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestMabitisPlus {
@Autowired
UserMapper userMapper;
@Test
public void test1(){
List<User> users = userMapper.selectList(null);
for (User user : users) {
System.out.println(user);
}
}
}
Springboot+Mybatis+MP
CRUD
插入
需要在User类中添加注解使。Id变为自增长的
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_user")
public class User {
@TableId(type = IdType.AUTO)
private Integer id;
private String userName;
private String password;
private String name;
private Integer age;
private String email;
}
@Test
public void testInsert() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User();
user.setUserName("caocao");
user.setPassword("123");
user.setName("曹操");
user.setAge(30);
user.setEmail("caocao@qq.com");
mapper.insert(user);
System.out.println(user.getId());
}
@TableField
在MP中通过@TableField注解可以指定字段的一些属性,常常解决的问题有2个:
1、对象中的属性名和字段名不一致的问题(非驼峰)
2、对象中的属性字段在表中不存在的问题
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_user")
public class User {
@TableId(type = IdType.AUTO)
private Integer id;
private String userName;
@TableFile(select=false) //查询时不返回值
private String password;
private String name;
private Integer age;
@TableField(value = "email")
private String mail;//数据库中为email
@TableField(exist =false)
private String address;//在数据库中不存在
}
更新操作
@Test
public void testupdate() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User();
user.setId(1);
user.setAge(20);
mapper.updateById(user);
System.out.println(user.getAge());
}
@Test
public void testupdate() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User();
user.setAge(20);
user.setPassword("88888");
//设置更新条件
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("user_name","zhangsan");
mapper.update(user,wrapper);
System.out.println(user);
}
@Test
public void testupdate() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.set("age",29).set("password","4648758").eq("user_name","zhangsan");
mapper.update(null,wrapper);
}
删除操作
@Test
public void testDeleteById() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
int result = mapper.deleteById(8);
System.out.println(result);
}
@Test
public void testDeleteByMap() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<>();
map.put("user_name","lisi");
map.put("age",20);
System.out.println(map);
int result = mapper.deleteByMap(map);
System.out.println(result);
}
@Test
public void testDelete() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("user_name", "zhaoliu").eq("age", 21);
int result = mapper.delete(wrapper);
System.out.println(result);
}
@Test
public void testDeleteBatchIds() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
int result = mapper.deleteBatchIds(Arrays.asList(6,7));
System.out.println(result);
}
查询
@Test
public void testSelect() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectById(1);
System.out.println(user);
}
@Test
public void testSelect() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.selectBatchIds(Arrays.asList(1, 3));
System.out.println(users);
}
@Test
public void testSelect() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("user_name","wangwu").eq("age",28);
User user = mapper.selectOne(wrapper);
System.out.println(user);
}
@Test
public void testSelect() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age",20);//年龄大于20岁
Integer integer = mapper.selectCount(wrapper);
System.out.println(integer);
}
@Test
public void testSelect() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession(true);
UserMapper mapper = session.getMapper(UserMapper.class);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age",20);//年龄大于20岁
List<User> users = mapper.selectList(wrapper);
System.out.println(users);
}
配置
条件构造器
allEq
- map传递参数
- map传递参数时过滤控制
条件过滤器
@Test public void testAlleq() throws IOException { InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is); SqlSession session = sessionFactory.openSession(true); UserMapper mapper = session.getMapper(UserMapper.class); HashMap<String, Object> map = new HashMap<>(); map.put("name","lisi"); map.put("age",28); map.put("password",null); QueryWrapper<User> wrapper = new QueryWrapper<>(); //设置查询条件 //SELECT id,user_name,password,name,age,email FROM tb_user WHERE password is null AND name = ? AND age = ? //wrapper.allEq(map); //SELECT id,user_name,password,name,age,email FROM tb_user WHERE name = ? AND age = ? //wrapper.allEq(map,false); //SELECT id,user_name,password,name,age,email FROM tb_user WHERE age = ? wrapper.allEq((k,v)->(k.equals("age")||k.equals("id")),map); List<User> users = mapper.selectList(wrapper); System.out.println(users); }基本比较操作
eq等于
- ne不等于
- gt大于
- ge大于等于
- lt小于
- le小于等于
- between 值1 and 值2
- NOT BETWEEN 值1 AND 值2
- in 字段 IN (value.get(0), value.get(1), …)
-
模糊查询
like
- LIKE ‘%值%’
- 例: like(“name”, “王”) —-> name like ‘%王%’
- notLike
- NOT LIKE ‘%值%’
- 例: notLike(“name”, “王”) —-> name not like ‘%王%’
- likeLeft
- LIKE ‘%值’
- 例: likeLeft(“name”, “王”) —-> name like ‘%王’
- likeRight
- LIKE ‘值%’
- 例: likeRight(“name”, “王”) —-> name like ‘王%’
排序
- orderBy
- 排序:ORDER BY 字段, …
- 例: orderBy(true, true, “id”, “name”) —-> order by id ASC,name ASC
- orderByAsc
- 排序:ORDER BY 字段, … ASC
- 例: orderByAsc(“id”, “name”) —-> order by id ASC,name ASC
- orderByDesc
- 排序:ORDER BY 字段, … DESC
- 例: orderByDesc(“id”, “name”) —-> order by id DESC,name DESC
逻辑查询
- or
- 拼接 OR
- 主动调用 or 表示紧接着下一个方法不是用 and 连接!(不调用 or 则默认为使用 and 连接)
and
- AND 嵌套
例: and(i -> i.eq(“name”, “李白”).ne(“status”, “活着”)) —-> and (name = ‘李白’ and status <> ‘活着’)
select
用来指定查询的字段
@Test public void testAlleq() throws IOException { InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sessionFactory = new MybatisSqlSessionFactoryBuilder().build(is); SqlSession session = sessionFactory.openSession(true); UserMapper mapper = session.getMapper(UserMapper.class); HashMap<String, Object> map = new HashMap<>(); map.put("name","lisi"); map.put("age",28); map.put("password",null); QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.allEq((k,v)->(k.equals("age")||k.equals("id")),map).select("id","name"); List<User> users = mapper.selectList(wrapper); System.out.println(users); }
