MybatisPlus入门

MybatisPlus入门

  • MybatisPlus
    • 简介
    • 特性
        • 代码托管
    • 2. MP快速入门
    • CRUD
      • EntityWrapper 条件构造器
        • 3.1 EntityWrapper 简介
        • 3.2 EntityWrapper 使用

MybatisPlus

简介

Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

我们的愿景是成为 Mybatis 最好的搭档,就像 魂斗罗 中的1P、2P,基友搭配,效率翻倍。

特性

  • 无侵入**:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性
  • 依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 预防Sql注入:内置 Sql 注入剥离器,有效预防Sql注入攻击
  • 通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题
  • 支持热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
  • 支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作
  • 支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词
  • 内置分页插件:基于 Mybatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作
    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

代码托管

官方网站:http://mp.baomidou.com/

Gitee | Github

2. MP快速入门

  1. 创建数据库
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `teacher_id` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '小学生', '安徽', 1);
INSERT INTO `user` VALUES (2, '小学生', '安徽', 1);
INSERT INTO `user` VALUES (3, '小学生', '安徽', 1);
INSERT INTO `user` VALUES (4, '小学生', '安徽', 1);
INSERT INTO `user` VALUES (5, '小学生', '北京', 2);
INSERT INTO `user` VALUES (6, '小学生', '北京', 2);
INSERT INTO `user` VALUES (7, '小学生', '北京', 2);
INSERT INTO `user` VALUES (8, '小学生', '北京', 2);
INSERT INTO `user` VALUES (9, '小学生', '北京', 2);
INSERT INTO `user` VALUES (10, '小学生', '北京', 2);
INSERT INTO `user` VALUES (11, '小学生', '北京', 3);
INSERT INTO `user` VALUES (12, '小学生', '上海', 3);
INSERT INTO `user` VALUES (13, '小学生', '上海', 3);
INSERT INTO `user` VALUES (14, '小学生', '上海', 3);
  1. 引入Maven
<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.1</version>
		</dependency>
		<!--mybatis Plus-->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus</artifactId>
			<version>2.3</version>
		</dependency>
		<!--mybatis puls 整合Springboot-->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>2.3</version>
		</dependency>
  1. 修改配置文件
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mptest?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# 加载Mybatis映射文件
#mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis-plus.type-aliases-package=com.csdn.po
mybatis-plus.mapper-locations=classpath:mapper/*Mapper.xml
mybatis-plus.configuration.map-underscore-to-camel-case=true
  1. 实体类
    @TableId(value = “id”, type = IdType.AUTO)
    表示这个实体类的ID 是自增长.
    extends Model< T>
    需要重写 pkVal
    @Override
    protected Serializable pkVal() {
    return this.id;
    }
    继承Model以后 可以new对象.insert /
    MybatisPlus入门_第1张图片
    MybatisPlus入门_第2张图片

CRUD

  1. 测试数据库中只有user表,使用MP对数据库进行CRUD操作
  2. Mp 只需要写出接口,然后在接口上继承BaseMapper< T >即可
public interface UserMapper extends BaseMapper<User> {

}
@RestController
@RequestMapping("/user")
public class UserController {
	@Autowired
    private UserMapper userMapper;
    public void test(){
        userMapper.insert();
        //delete
        //updatebyid
        //add
        //selectList
        //selectPage
        //省略.
    }
}

以上是基本的 CRUD 操作,如您所见,我们仅仅需要继承一个 BaseMapper 即可实现大部分单表 CRUD 操作。BaseMapper 提供了多达 17 个方法给大家使用, 可以极其方便的实现单一、批量、分页等操作。极大的减少开发负担

EntityWrapper 条件构造器

3.1 EntityWrapper 简介

Mybatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者Condition(与 EW 类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担,能够有效提高开发效率

实体包装器,主要用于处理 sql 拼接,排序,实体参数查询等

注意: 使用的是数据库的字段,不是java的属性名称

条件参数说明:

查询方式 说明
setSqlSelect 设置 SELECT 查询字段
where WHERE 语句,拼接 + WHERE 条件
and AND 语句,拼接 + AND 字段=值
andNew AND 语句,拼接 + AND (字段=值)
or OR 语句,拼接 + OR 字段=值
orNew OR 语句,拼接 + OR (字段=值)
eq 等于=
allEq 基于 map 内容等于=
ne 不等于<>
gt 大于>
ge 大于等于>=
lt 小于<
le 小于等于<=
like 模糊查询 LIKE
notLike 模糊查询 NOT LIKE
in IN 查询
notIn NOT IN 查询
isNull NULL 值查询
isNotNull IS NOT NULL
groupBy 分组 GROUP BY
having HAVING 关键词
orderBy 排序 ORDER BY
orderAsc ASC 排序 ORDER BY
orderDesc DESC 排序 ORDER BY
exists EXISTS 条件语句
notExists NOT EXISTS 条件语句
between BETWEEN 条件语句
notBetween NOT BETWEEN 条件语句
addFilter 自由拼接 SQL
last 拼接在最后,例如:last(“LIMIT 1”)

3.2 EntityWrapper 使用

问题:年龄在 18~50 之间性别为男且姓名为 马 的所有用户

/**
 * 年龄在 18~25 之间性别为男且姓名为 马 的所有用户
 */
@Test
public void testFindListEntityWrapper(){
    CustomerMapper mapper = context.getBean(CustomerMapper.class);

    EntityWrapper<Customer> entityWrapper = new EntityWrapper<Customer>();
    entityWrapper.between("age",18,25)
            .eq("gender",0)
            .like("cust_name","马");
    Page<Customer> page = new Page<Customer>(1,30);
    List<Customer> list = mapper.selectPage(page, entityWrapper);
    for (Customer customer : list) {
        System.out.println(customer);
    }
}

你可能感兴趣的:(MybatisPlus入门)