Mybatis-Plus myBatis的增强工具
1. mybatis-plus简介
1.1. 什么是mybatis-plus
mybatis-plus(简称 mp)是一个 mybatis 的增强工具,在 mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
1.2. 为什么要学习mybatis-plus
我们已经学习过mybatis这个框架,我们只需要在dao层定义抽象接口,基于mybatis零实现的特性,就可以实现对数据库的crud操作。
如下两个接口:
usermapper接口
public interface usermapper {
int deletebyprimarykey(long id); int insert(user user); list<user> selectlist(); user selectbyprimarykey(long id); } |
ordermapper接口
public interface ordermapper {
int deletebyprimarykey(long id); int insert(order order); list<order> selectlist(); user selectbyprimarykey(long id); } |
在上面两个业务接口中,我们发现:它们定义了一组类似的crud方法。
在业务类型比较多的时候,我们需要重复的定义这组功能类似的接口方法。
如何解决这个问题呢?
使用mybatis-plus工具,我们只需要将我们定义的抽象接口,继承一个公用的basemapper<t>接口,就可以获得一组通用的crud方法,来操作数据库!!!
使用mybatis-plus时,甚至都不需要任何的xml映射文件或者接口方法注解,真正的dao层零实现。
public interface ordermapper extends basemapper<user> { //basemapper已经实现了通用的curd的方法了。如果有需要非通用的操作,才在这里自定义 } |
1.3. mybatis-plus小结
mybatis-plus只是在mybatis的基础上,实现了功能增强,让开发更加简洁高效。
mybatis-plus并没有修改mybatis的任何特性!!!
2. 入门示例
2.1. 需求
使用mybatis-plus实现对用户的crud操作。
2.2. 配置步骤说明
(1)搭建环境(创建项目、导入包)
(2)配置mybaits-plus(基于spring实现)
(3)编写测试代码
2.3. 配置步骤
2.3.1. 第一部分:搭建环境
2.3.1.1. 前提
已经创建好了数据库环境:
create table `tb_user` ( `id` bigint(20) not null comment '主键id', `name` varchar(30) default null comment '姓名', `age` int(11) default null comment '年龄', `email` varchar(50) default null comment '邮箱', primary key (`id`) ) |
2.3.1.2. 说明
(1)mybatis-plus并没有提供单独的jar包,而是通过maven(或者gradle)来管理jar依赖。本教程需要使用maven构建项目。
(2)mybatis-plus是基于spring框架实现的,因此使用mybatis-plus,必须导入spring相关依赖。
2.3.1.3. 第一步:创建一个maven项目
因为我们只是测试mybatisplus框架,所以创建一个jar项目就可以了
|
2.3.1.4. 第二步:配置pom.xml构建文件
--需要导入依赖,并且配置项目的编码,jdk版本等构建信息
<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/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>org.chu.mybatisplus</groupid> <artifactid>mybatisplus-demo-01-start</artifactid> <version>1.0</version>
<!-- 依赖 --> <dependencies> <!-- spring依赖 -->
<dependency> <groupid>org.springframework</groupid> <artifactid>spring-jdbc</artifactid> <version>4.3.24.release</version> </dependency>
<dependency> <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> <version>4.3.24.release</version> </dependency>
<!-- mybatis plus --> <dependency> <groupid>com.baomidou</groupid> <artifactid>mybatis-plus</artifactid> <version>2.3.3</version> </dependency>
<!-- mysql driver --> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>5.1.47</version> </dependency>
</dependencies>
<!-- 只有配置了build标签里面的内容,配置后都需要强制更新项目 --> <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>3.8.1</version> <configuration> <!-- 设置编码 --> <encoding>utf-8</encoding> <!-- jdk版本 --> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <!-- 安装install命令的时候跳过单元测试 -->
<plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-surefire-plugin</artifactid> <version>2.22.2</version> <configuration> <skiptests>true</skiptests> </configuration> </plugin> </plugins> </build> </project> |
2.3.2. 第二部分:配置整合部分
整合mybatisplus与spring的配置。创建一个spirng-data.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: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-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- 第一步:配置数据源 --> <bean name="datasource" class="com.alibaba.druid.pool.druiddatasource"> <property name="driverclassname" value="com.mysql.jdbc.driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/mybatis-plus"></property> <property name="username" value="root"></property> <property name="password" value="123456"></property> <!-- 最大激活的连接数 --> <property name="maxactive" value="10"></property> <!-- 最大空闲连接数据 --> <!-- <property name="maxidle" value="5"></property> --> <!-- 超时毫秒数 --> <property name="maxwait" value="30000"></property> </bean> <!-- 第二步:获得会话工厂 --> <bean name="sqlsessionfactory" class="com.baomidou.mybatisplus.spring.mybatissqlsessionfactorybean"> <!-- 指定数据源 --> <property name="datasource" ref="datasource"></property> </bean>
<!-- 第三步:扫描动态映射对象到spring容器 --> <bean class="org.mybatis.spring.mapper.mapperscannerconfigurer"> <!-- 指定会话工厂 --> <property name="sqlsessionfactorybeanname" value="sqlsessionfactory"></property> <!-- 指定扫描的映射包 --> <property name="basepackage" value="org.chu.mybatisplus.mapper"></property> </bean>
<!-- 第四步:配置事务代理 --> <bean name="tx" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource"></property> </bean> <tx:annotation-driven transaction-manager="tx"/> </beans> |
2.3.3. 第三部分:实现操作功能
说明:完成实验mybatisplus对数据库增删改查。
2.3.3.1. 第一步:编写pojo
说明:使用mybatis-plus不使用xml文件,而是基于一组注解来解决实体类和数据库表的映射问题。
@tablename(value="tb_user") |
指定对应的表,表名和类名一致时,可以省略value属性。 |
@tableid |
指定表的主键。value属性指定表的主键字段,和属性名一致时,可以省略。type指定主键的增长策略。 |
@tablefield |
指定类的属性映射的表字段,名称一致时可以省略该注解。 |
package org.chu.mybatisplus.pojo;
import com.baomidou.mybatisplus.annotations.tablefield; import com.baomidou.mybatisplus.annotations.tableid; import com.baomidou.mybatisplus.annotations.tablename; import com.baomidou.mybatisplus.enums.idtype;
@tablename(value="tb_user") public class user {
/*-- auto->`0`("数据库id自增") input->`1`(用户输入id") id_worker->`2`("全局唯一id") uuid->`3`("全局唯一id") none-> 4 ("不需要id") --*/ @tableid(value="id",type=idtype.auto) private long id;//bigint(20) not null auto_increment comment '主键id', //如果属性名与数据库表的字段名相同可以不写 @tablefield(value="name") private string name;//varchar(30) null default null comment '姓名', @tablefield(value="age") private integer age;//int(11) null default null comment '年龄', @tablefield(value="email") private string email;//varchar(50) null default null comment '邮箱', //补全get/set方法 }
|
2.3.3.2. 第二步:编写mapper接口
package org.chu.mybatisplus.mapper; import org.chu.mybatisplus.pojo.user; import com.baomidou.mybatisplus.mapper.basemapper; public interface usermapper extends basemapper<user> {
} |
2.3.3.3. 第三步:测试增删改查
package org.chu.test.mapper; import java.util.list;
import org.chu.mybatisplus.mapper.usermapper; import org.chu.mybatisplus.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.junit4.springjunit4classrunner;
import com.baomidou.mybatisplus.mapper.entitywrapper; import com.baomidou.mybatisplus.mapper.wrapper; //注意事项:maven的单元测试包必须放置测试源码包里面 @runwith(springjunit4classrunner.class) @contextconfiguration(locations="classpath:spring-data.xml") public class usermappertest {
@autowired private usermapper usermapper;
@test public void insert() { try { user user=new user(); user.setname("wangwu"); user.setage(20); user.setemail("wangwu@163.com"); integer insert = usermapper.insert(user); system.out.println(insert); } catch (exception e) { // todo auto-generated catch block e.printstacktrace(); } }
@test public void deletebyid() { try { integer count = usermapper.deletebyid(1l); system.out.println(count); } catch (exception e) { // todo auto-generated catch block e.printstacktrace(); } }
@test public void deletebycondition() { try { //设置条件 entitywrapper<user> wrapper=new entitywrapper<>(); wrapper.like("name", "%wang%"); integer count = usermapper.delete(wrapper); system.out.println(count); } catch (exception e) { e.printstacktrace(); } }
@test public void update() { user user=new user(); user.setname("wangwu"); user.setemail("wangwu@163.com"); user.setid(2l); usermapper.updatebyid(user);
}
@test public void findall() { list<user> users = usermapper.selectlist(null); for (user user : users) { system.out.println(user.getname()); } }
}
|
3. 常用配置
3.1. 实体类全局配置
如果在配置文件指定实体类的全局配置,那么可以不需要再配置实体类的关联注解。
--配置文件spring-data.xml的修改
<!-- 第二步:获得会话工厂 --> <bean name="sqlsessionfactory" class="com.baomidou.mybatisplus.spring.mybatissqlsessionfactorybean"> <!-- 指定数据源 --> <property name="datasource" ref="datasource"></property> <!-- 全局实体类配置 --> <property name="globalconfig" > <bean class="com.baomidou.mybatisplus.entity.globalconfiguration"> <!-- auto->`0`("数据库id自增") input->`1`(用户输入id") id_worker->`2`("全局唯一id") uuid->`3`("全局唯一id") --> <property name="idtype" value="0"></property> <!-- 实体类名与表名的关联规则是,忽略前缀 --> <property name="tableprefix" value="tb_"></property> </bean> </property> </bean> |
--实体类就可以去掉关联的注解了
package org.chu.mybatisplus.pojo; public class user { private long id; private string name; private integer age; private string email; //补全get、set方法 } |
3.2. 插件配置
mybatis默认情况下,是不支持物理分页的。默认提供的rowbounds这个分页是逻辑分页来的。
所谓的逻辑分页,就是将数据库里面的数据全部查询出来后,在根据设置的参数返回对应的记录。(分页是在程序的内存中完成)。【表数据过多时,会溢出】
所谓的物理分页,就是根据条件限制,返回指定的记录。(分页在数据库里面已经完成)
mybatisplus是默认使用rowbounds对象是支持物理分页的。但是需要通过配置mybatis插件来开启。
配置代码
<!-- 第二步:获得会话工厂 --> <bean name="sqlsessionfactory" class="com.baomidou.mybatisplus.spring.mybatissqlsessionfactorybean"> <!-- 指定数据源 --> <property name="datasource" ref="datasource"></property> <!-- 全局实体类配置 --> <property name="globalconfig" > <bean class="com.baomidou.mybatisplus.entity.globalconfiguration"> <!-- auto->`0`("数据库id自增") input->`1`(用户输入id") id_worker->`2`("全局唯一id") uuid->`3`("全局唯一id") --> <property name="idtype" value="0"></property> <!-- 实体类名与表名的关联规则是,忽略前缀 --> <property name="tableprefix" value="tb_"></property> </bean> </property> <!-- 配置插件 --> <property name="plugins"> <list> <!-- 分页的支持 --> <bean class="com.baomidou.mybatisplus.plugins.paginationinterceptor"> <!-- 方言 --> <!-- 我们使用的是mysql数据库,所以需要配置mysql的方言 --> <property name="dialectclazz" value="com.baomidou.mybatisplus.plugins.pagination.dialects.mysqldialect"></property> </bean> <!-- 配置支持sql输出 --> <bean class="com.baomidou.mybatisplus.plugins.performanceinterceptor"> <property name="format" value="true"></property> </bean> </list> </property> </bean> |
3.3. 自定义sql语句支持
--实现代码
package org.chu.mybatisplus.mapper; import java.util.list; import org.apache.ibatis.annotations.select; import org.chu.mybatisplus.pojo.user; import com.baomidou.mybatisplus.mapper.basemapper; public interface usermapper extends basemapper<user> { @select(value="select * from tb_user") list<user> findall(); } |
--测试代码
package org.chu.test.mapper; import java.util.list;
import org.chu.mybatisplus.mapper.usermapper; import org.chu.mybatisplus.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.junit4.springjunit4classrunner; //注意事项:maven的单元测试包必须放置测试源码包里面 @runwith(springjunit4classrunner.class) @contextconfiguration(locations="classpath:spring-data.xml") public class usermappertest { @autowired private usermapper usermapper; @test public void findall() {
try { list<user> users = usermapper.findall(); for (user user : users) { system.out.println(user.getname()); } } catch (exception e) { e.printstacktrace(); } } } |
上一篇: Map.Entry 接口
下一篇: 跨域配置
推荐阅读
-
springboot工程中各个层次的作用+springboot连接数据库的工具汇总+Mybatis的开发方式/语法
-
Mybatis-Plus 多表联查分页的实现代码
-
Mybatis-Plus 多表联查分页的实现代码
-
VMware Workstation/Fusion 中安装 Fedora 23/24 及其他 Linux 系统时使用 Open VM Tools 代替 VMware Tools 增强工具的方法
-
Mybatis-Plus自动填充的实现示例
-
mybatis-plus如何使用的一些问题经验总结
-
Mybatis-plus 代码生成器的使用
-
VMware Workstation/Fusion 中安装 Fedora 23/24 及其他 Linux 系统时使用 Open VM Tools 代替 VMware Tools 增强工具的方法
-
Mybatis-Plus myBatis的增强工具
-
详解mybatis-plus的 mapper.xml 路径配置的坑