MP从入门到精通
Posted cgblpx皮皮霞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MP从入门到精通相关的知识,希望对你有一定的参考价值。
文章目录
1.MP
1.1 概述
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生.简单的SQL几乎是不需要再写了
1.2 特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作
1.3 支持数据库
mysql 、 mariadb 、 oracle 、 db2 、 postgresql 、 sqlserver 等等…
1.4 常用注解
@TableName(“表名”) :当表名与实体类名不一致时,可以在实体类上加入@TableName()声明
@TableId(type = IdType.AUTO):声明属性为表中的主键(若属性名称不为默认id)
@TableFieId(“字段名”) :当实体类属性与表字段不一致时,可以用来声明
1.5 pom坐标
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
1.6 入门案例
1.6.1 改造实体类
使用注解开发,类上,属性上都要用MP提供的注解
package cn.tedu.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@Accessors(chain = true)
@TableName("user") //这是表名,表明实体对象和表之间的映射关系
public class User extends BasePojo implements Serializable
@TableId(type = IdType.AUTO) //这是主键,且自增,表明字段和主键的映射关系
private Integer id;
// @TableField("user_name") //非主键的字段使用,当属性名和字段名不一样时,要写明字段名,表明字段和属性的映射关系
@TableField //非主键的字段使用,如果属性名和字段名能映射成功(驼峰规则)就可以这样简写
private String username;
private String password;
private String phone;
private String email;
private Integer status; //1是启动,0是停用
1.6.2 修改Mapper层接口
Mapper层的接口,需要继承BaseMapper,并使用泛型!MP简化了单表CRUD的SQL操作,多表最好还是要自己写SQL的
package cn.tedu.dao;
import cn.tedu.pojo.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.*;
import java.util.List;
//继承BaseMapper,并使用泛型!MP简化了单表CRUD的SQL操作,多表最好还是要自己写SQL的!!!!!
public interface UserMapper extends BaseMapper<User>
List<User> findAll();//查找所有用户
User findByNP(User user);//登录,根据账号密码查用户
//MP,省略了去mapper.xml文件中,写SQL的过程
@Select("select count(1) from user")
Long count();//查询总记录数
//根据分页条件,查询分页的数据,多个数据,进行封装,@Param,可以把参数自动封装成map结构,key就是括号里的值
List<User> findUserList(@Param("start") int start,@Param("num") int num,@Param("query") String query);
//删除用户
@Delete("delete from user where id=#id")
void deleteById(Integer id);
//添加用户
@Insert("INSERT INTO USER VALUES(NULL,#username,#password,#phone,#email,#status,#created,#updated)")
void addUser(User user);
//修改用户的 查询回显
@Select("select * from user where id=#id")
User findById(Integer id);
/** 修改用户信息--手机号/邮箱/修改时间 */
@Update("update user set phone=#phone,email=#email,updated=now() where id=#id")
void updateUser(User user);
1.6.3 修改核心配置文件
当前yml中,配置的是Mybatis的信息,要改成Mybatis-Plus就可以了,就是把mybatis: 改成mybatis-plus:
server:
port: 8091
#SpringBoot配置mysql信息
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///cgbtest?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
#SpringBoot整合Mybatis配置
#mybatis:
# 1. SpringBoot整合MybatisPlus配置!!!!
mybatis-plus:
#别名包
type-aliases-package: cn.tedu.pojo
#指定UserMapper.xml文件的位置
mapper-locations: classpath:mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 2. 打印MP自动生成的SQL
1.6.4 测试MP
MP最大的优势就是省略了SQL语句的编写,甚至Mapper.xml文件都可以不存在了,直接调用MP提供的接口,MP会自动发起SQL来执行,我们的学习任务就是把MP提供的方法用熟练就可以了.
package cn.tedu.vo;
import cn.tedu.dao.UserMapper;
import cn.tedu.pojo.User;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class SsmApplicationTests
@Autowired
private UserMapper userMapper;
//测试mp提供的接口,直接调接口,自动发起SQL,不需要自己写简单的SQL了
@Test
void contextLoads()
User user1 = new User(null,"haha","123","13233335555","11@qq.com",1);
userMapper.insert(user1); //新增
userMapper.deleteById(11);//删除
User user = userMapper.selectById(2); //查一个
System.out.println(user+"===========");
List<User> users = userMapper.selectList(null); //查所有
for (User u : users)
System.out.println(u+"~~~~~~~~~~~~~~");
//按条件查询= , SELECT * FROM user WHERE email='11@qq.com'
User uu = new User();
uu.setEmail("11@qq.com");//set的设置就相当于是=的设置
//需用一个条件构造器,他会根据不为空的属性,自动发起查询语句(email='11@qq.com')
QueryWrapper<User> qw = new QueryWrapper(uu);//这里表示where email='11@qq.com'
userMapper.selectList(qw);//按条件查到多个
//按条件查询>= , SELECT * FROM user WHERE id>=3
QueryWrapper<User> qw2 = new QueryWrapper<>();
//>gt <lt =eq >=ge <=le !=ne
qw2.ge("id",3);//这里表示where id>=3
userMapper.selectList(qw2);
//模糊查询,like
QueryWrapper<User> qw3 = new QueryWrapper<>();
// qw3.likeRight("username","a");//这里表示where username like 'a%'
// qw3.likeLeft("username","a");//这里表示where username like '%a'
qw3.like("username","a");//这里表示where username like '%a%'
qw3.orderByDesc("id");//排序,可以升序 降序
userMapper.selectList(qw3);
//in查询
QueryWrapper<User> qw4 = new QueryWrapper<>();
// int[] arr = 1,2,3; //要用引用类型
Integer[] arr = 1,2,3; //要用引用类型
// qw4.in("id",arr); //这里表示where id in(1,2,3)
//也可以添加判断条件,这里表示arr不为空时,才会拼接查询条件
qw4.in(arr!=null&&arr.length!=0,"id",arr);
userMapper.selectList(qw4);
//更新操作
QueryWrapper<User> qw5 = new QueryWrapper<>();
User uu2 = new User();
uu2.setId(1).setEmail("11@163.com").setPhone("110");
userMapper.updateById(uu2);//只会把id的值作为查询条件,其他的都用来set
//批量删
List<Integer> list = Arrays.asList(new Integer[]21,22,23,24,25,26,27,28,29,30,31,32);
userMapper.deleteBatchIds(list);
1.7 ?
以上是关于MP从入门到精通的主要内容,如果未能解决你的问题,请参考以下文章