目录
一.快速入门
-
1.编写项目使用springboot,进行自动生成初始化配置:---->Springboot快速入门链接
-
2.导入依赖到pom.xml中,如下三个标签
2.1关于lombok
lombok提供了一个功能完整的jar包,可以很方便的与我们的项目进行集成。
@ToString
用在类上,可以自动覆写toString方法,当然还可以加其他参数,例如@ToString(exclude=”id”)排除id属性,或者@ToString(callSuper=true, includeFieldNames=true)调用父类的toString方法,包含所有属性。
@EqualsAndHashCode
自动生成hashCode() 和 equals()方法。
@Data
注解在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor
@Value
用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法,具体示例可以参考@Data部分
@Log
lombok可以快速生成多种常用日志实例,包括Commonslog、log、log4j、slf4j等等,具体的使用可以依照需求灵活选择。
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.benniu</groupId>
<artifactId>mybatis_plus1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatis_plus1</name>
<packaging>jar</packaging>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- mybatis-plus -->
<!-- mybatis-plus 是自己开发,并非官方的! -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version> </dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
-
3.连接数据库!这一步和 mybatis 相同
此处使用的Springboot,所以导入到application.properties或者.yml文件中
# mysql 5 驱动不同 com.mysql.jdbc.Driver # mysql 8 驱动不同com.mysql.cj.jdbc.Driver、需要增加时区的配置 serverTimezone=GMT%2B8
#DB Configuration:
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db3?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
#UTC是统一标准世界时间,UTF-8,这个是解决中文乱码输入问题
spring.datasource.username=root
spring.datasource.password=root
-
4.配置domain,也即是pojo
package com.benniu.mybatis_plus1.domain;
/**
* Created with IntelliJ IDEA.
* User: Wang
* Date: 2020/8/18
* Time: 9:24
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Configuration
public class User {
//主键,如下标签代表自增
@TableId(type = IdType.AUTO)
private int id;
//用户名
private String username;
//密码
private String password;
//姓名
private String name;
}
-
5.配置mapper接口
package com.benniu.mybatis_plus1.mapper;
/**
* Created with IntelliJ IDEA.
* User: Wang
* Date: 2020/8/18
* Time: 9:27
*/
//在对应的Mapper上面继承基本的类BaseMapper
@Repository
public interface UserMapper extends BaseMapper<User> {
//所有的CRUD操作都已经写好了
//不需要像以前一样配置一大堆文件
}
-
6.在主启动类上去扫描我们的mapper包下的所有接口--->@MapperScan("com.benniu.mybatis_plus1.mapper")
package com.benniu.mybatis_plus1;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.benniu.mybatis_plus1.mapper")
public class MybatisPlus1Application {
public static void main(String[] args) {
SpringApplication.run(MybatisPlus1Application.class, args);
}
}
-
7.测试,普通的crud操作,里面有内置。
以下的测试是在Controller层做的,通过浏览器访问相应的方法即可:http://localhost:8080/queryUser1
package com.benniu.mybatis_plus1.controller;
/**
* Created with IntelliJ IDEA.
* User: Wang
* Date: 2020/8/18
* Time: 9:31
*/
@Controller
public class MapperController {
//继承了BaseMapper,所有的方法都来自自己的父类
//自己也可编写扩展方法
@Autowired
private UserMapper userMapper;
@Autowired
private User user;
@RequestMapping("/queryUser1")
@ResponseBody
public List<User> queryUser1(){
//参数是一个wrapper,条件构造器
//查询所有用户
List<User> users = userMapper.selectList(null);
return users;
}
@RequestMapping("/queryUser2")
@ResponseBody
public void inSertUser(){
//插入操作
//不写id,他会自动填写
user.setName("黄家驹");
user.setPassword("root");
user.setUsername("TSWLife");
userMapper.insert(user);
}
@RequestMapping("/queryUser3")
@ResponseBody
public void upDateUser(){
//更新操作
user.setId(11);
user.setName("怡和堂");
user.setPassword("root");
user.setUsername("TSWLife");
userMapper.updateById(user);
}
@RequestMapping("/deleteUser")
@ResponseBody
public void deleteUser(){
//通过id单条删除
userMapper.deleteById(11);
//通过id批量删除
userMapper.deleteBatchIds(Arrays.asList(1,2));
//通过map删除
HashMap<String, Object> map = new HashMap<>();
map.put("name","王博");
userMapper.deleteByMap(map);
}
-
8.比较复杂的sql语句操作
(1)查询:查询name不为空的用户并且password也不为空,id>3
//Wrapper我们写一些复杂的sql就可以使用它来替代!
@RequestMapping("/mapperTest1")
@ResponseBody
public void mapperTest1(){
//查询name不为空的用户并且password也不为空,id>3
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper
.isNotNull("name")
.isNotNull("username")
.ge("id",3);
userMapper.selectList(wrapper).forEach(System.out::println);
}
(2)查询:查询名字
//Wrapper我们写一些复杂的sql就可以使用它来替代!
@RequestMapping("/mapperTest2")
@ResponseBody
public void mapperTest2(){
//查询名字
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("username","TSWLife");
User user = userMapper.selectOne(wrapper);//查询一个数据,出现多个结果使用List或者Map
System.out.println(user);
}
(3)查询:查询年龄在 20 ~ 30 岁之间的用户
//Wrapper我们写一些复杂的sql就可以使用它来替代!
@RequestMapping("/mapperTest3")
@ResponseBody
public void mapperTest3(){
//查询年龄在 20 ~ 30 岁之间的用户
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.between("id",12,14);//区间包括两边
List<User> users = userMapper.selectList(wrapper);//查询的结果集
Integer integer = userMapper.selectCount(wrapper);//查询的条数
users.forEach(System.out::println);
System.out.println(integer);
}
(4)查询:模糊查询
//Wrapper我们写一些复杂的sql就可以使用它来替代!
@RequestMapping("/mapperTest4")
@ResponseBody
public void mapperTest4(){
//模糊查询
QueryWrapper<User> wrapper = new QueryWrapper<>();
// 左和右 t%
wrapper
.notLike("name","王")//相当于NOT LIKE '%s%'
.likeRight("username","T");//相当于LIKE 's%'
List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
maps.forEach(System.out::println);
}
(5)查询:模糊查询-在子查询中查出来
@RequestMapping("/mapperTest5")
@ResponseBody
public void mapperTest5(){
//模糊查询-在子查询中查出来
QueryWrapper<User> wrapper = new QueryWrapper<>();
//子查询
wrapper.inSql("id","select id from user where id<15");//自己写的sql容易出错
List<Object> objects = userMapper.selectObjs(wrapper);
objects.forEach(System.out::println);
}
(6)查询:查询出来并通过id进行排序
@RequestMapping("/mapperTest6")
@ResponseBody
public void mapperTest6(){
//通过id进行排序
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.orderByAsc("id");
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
二.分页操作
1、原始的 limit 进行分页
2、pageHelper 第三方插件
3、MP 其实也内置了分页插件!
-
1.正常条件配置下
//配置拦截器分页插件
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
(2).直接使用Page对象
@RequestMapping("/queryUser4")
@ResponseBody
public void testPage(){
//参数一:当前页
//参数二:页面大小
Page<User> page = new Page<>(1, 3);
IPage<User> userIPage = userMapper.selectPage(page, null);
page.getRecords().forEach(System.out::println);
System.out.println(page.getTotal());//总条数
}
-
2.在Springboot中进行配置时
需要单独建一个类,com.benniu.xxx./config/MybatisPlusConfig.java
剩下的直接像上面一样进行调用就行。
package com.benniu.mybatis_plus1;
/**
* Created with IntelliJ IDEA.
* User: Wang
* Date: 2020/8/18
* Time: 15:54
*/
//Spring boot方式
@EnableTransactionManagement
@Configuration
@MapperScan("com.benniu.mybatis_plus1.mapper")
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
//paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize());
return paginationInterceptor;
}
}
@MapperScan("com.kuang.mapper")