1、Mybatis-Plus 簡介
1.1、什么是 Mybatis-Plus
Mybatis-Plus(簡稱 MP)是一個 Mybatis 的增強工具,在 Mybatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。
1.2、Mybatis-Plus有什么用?
使用 Mybatis-Plus 工具,我們只需要將我們定義的抽象接口,繼承一個公用的 BaseMapper<T> 接口,就可以獲得一組通用的 crud 方法來操作數據庫!!!
使用 Mybatis-Plus 時,甚至不需要任何的 xml 映射文件或者接口方法注解,真正的 dao 層零實現。
1.3、Mybatis-Plus 小結
Mybatis-Plus 只是在 Mybatis 的基礎上,實現了功能增強,讓開發更加簡潔高效。
Mybatis-Plus 並沒有修改 Mybatis 的任何特性。
2 入門示例
2.1、需求
使用 Mybatis-Plus 實現對用戶的 crud 操作
2.2、配置步驟說明
(1)搭建環境(創建項目、導入包)
(2)配置 Mybatis-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 創建項目
2.3.1.4 添加依賴
修改 pom.xml 文件,添加 Mybatis-Plus 相關依賴:
<dependencies> <!-- Spring的支撐包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.23.RELEASE</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.1.10</version> </dependency> <!-- 測試 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.23.RELEASE</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- 導入切面依賴包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.3.23.RELEASE</version> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>2.3</version> </dependency> <!-- spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.23.RELEASE</version> </dependency> </dependencies>
2.3.2 第二步:創建 User 實體類
說明:使用 Mybatis-Plus 可以不使用 xml 文件,而是基於一組注解來解決實體類和數據庫表的映射問題。
@TableName(value="tb_user") | 指定對應的表,表名和類名一致時,可以省略 value 屬性。 |
@TableId | 指定表的主鍵。Value 屬性指定表的主鍵字段,和屬性名一致時,可以省略。Type指定主鍵的增長策略。 |
@TableField | 指定類的屬性映射的表字段,名稱一致時可以省略該注解。 |
User 類如下:
package cn.mgy.pojo; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableName; @TableName("tb_user") public class User { // @TableId(value="id",type=IdType.AUTO) private Long id;// bigint(20) NOT NULL COMMENT '主鍵ID', @TableField(value="name") private String name;// varchar(30) DEFAULT NULL COMMENT '姓名', private Integer age;// int(11) DEFAULT NULL COMMENT '年齡', private String email;// varchar(50) DEFAULT NULL COMMENT '郵箱', public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
2.3.3 第三步:創建 UserMapper 接口
說明:繼承 BaseMapper 公共接口即可。
package cn.mgy.mapper; import com.baomidou.mybatisplus.mapper.BaseMapper; import cn.mgy.pojo.User; public interface UserMapper extends BaseMapper<User> { }
2.3.4 第四步:Mybatis-Plus 整合 Spring
<?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"> <!-- 掃描包 --> <context:component-scan base-package="cn.mgy" /> <!-- 1、創建數據源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <!-- 四要素 --> <property name="driverClassName" value="org.gjt.mm.mysql.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis_plus" /> <property name="username" value="root" /> <property name="password" value="root" /> <!-- 其他元素 --> <property name="maxActive" value="20" /> <property name="minIdle" value="5" /> </bean> <!-- 2、mybatits-plus 整合 Spring 任何的數據庫的框架,要使用 Spring 的事務代理,必須使用 Spring 提供 的數據源,必須整合 Spring 才可以使用 --> <bean name="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean"> <!-- 加載數據源 --> <property name="dataSource" ref="dataSource" /> <!-- 指定 pojo 目錄 --> <property name="typeAliasesPackage" value="cn.mgy.pojo" /> <!-- 配置 mybatis-plus 插件 --> <property name="plugins"> <list> <!-- 配置分頁插件 --> <bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor" /> <!-- 配置攔截器屬性 --> <bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor" > <!-- 配置 sql 響應時間,開發階段方便做調優 --> <property name="maxTime" value="1000" /> <!-- 配置 sql 語句的格式化 --> <property name="format" value="true" /> </bean> </list> </property> <property name="globalConfig" ref="globalConfiguration" /> </bean> <!-- 配置 mybatis-plus 全局屬性 --> <!-- 定義 MybatisPlus 的全局策略配置 --> <bean id="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration"> <!-- 在 2.3 版本以后,dbColumnUnderline 默認值是 true,即 pojo 屬性開啟駝峰標識 --> <property name="dbColumnUnderline" value="true" /> <!-- 全局的主鍵策略 --> <!-- AUTO ->`0`("數據庫ID自增") INPUT ->`1`("用戶輸入ID") ID_WORKER ->`2`("全局唯一ID") UUID ->`3`("全局唯一ID") --> <!-- <property name="idType" value="0" /> --> <!-- 全局的表前綴策略配置 --> <property name="tablePrefix" value="tb_" /> </bean> <!-- 3、配置 mybatis 的動態代理 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean" /> <property name="basePackage" value="cn.mgy.mapper" /> </bean> <!-- 4、配置事務代理管理器 --> <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 5、開啟注解聲明式事務 --> <tx:annotation-driven/> </beans>
2.3.5 第五步:編寫測試代碼
package cn.mgy.test; import java.util.List; import org.apache.ibatis.session.RowBounds; 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 cn.mgy.mapper.UserMapper; import cn.mgy.pojo.User; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations= {"classpath:config.xml"}) public class UserMapperTest { @Autowired private UserMapper userMapper; //插入一條記錄 @Test public void insert(){ User user = new User(); user.setAge(18); user.setEmail("zhangsan@163.com"); user.setName("張三"); userMapper.insert(user); } //根據id查詢 @Test public void selectById(){ User user = userMapper.selectById(1); System.out.println("用戶id:"+user.getId()+",用戶姓名:"+user.getName()+",用戶郵箱:"+user.getEmail()); } //根據用戶名查找 @Test public void selectByName(){ EntityWrapper<User> wrapper = new EntityWrapper<User>(); wrapper.eq("name", "張三"); List<User> users = userMapper.selectList(wrapper); for (User user : users) { System.out.println("用戶id:"+user.getId()+",用戶姓名:"+user.getName()+",用戶郵箱:"+user.getEmail()); } } //查詢用戶列表 @Test public void selectAll(){ List<User> users = userMapper.selectList(null); for (User user : users) { System.out.println("用戶id:"+user.getId()+",用戶姓名:"+user.getName()+",用戶郵箱:"+user.getEmail()); } } //分頁查詢,第2頁,每頁3條 @Test public void selectAndPage(){ RowBounds rowBounds = new RowBounds((2-1)*3, 3); List<User> users = userMapper.selectPage(rowBounds, null); for (User user : users) { System.out.println("用戶id:"+user.getId()+",用戶姓名:"+user.getName()+",用戶郵箱:"+user.getEmail()); } } //模糊查詢 @Test public void selectByLike(){ EntityWrapper<User> wrapper = new EntityWrapper<User>(); wrapper.like("name", "%張%"); List<User> users = userMapper.selectList(wrapper); for (User user : users) { System.out.println("用戶id:"+user.getId()+",用戶姓名:"+user.getName()+",用戶郵箱:"+user.getEmail()); } } }