目 錄java
1 Mybatis-Plus簡介 2mysql
1.1 什麼是Mybatis-Plus 2git
1.2 爲何要學習Mybatis-Plus 2github
1.3 Mybatis-Plus小結 3spring
2 入門示例 3sql
2.1 需求 3數據庫
2.2 配置步驟說明 3apache
2.3 配置步驟 3session
2.3.1 第一步:搭建環境 3mybatis
2.3.2 第二步:建立User實體類 6
2.3.3 第三步:建立UserMapper接口 7
2.3.4 第四步:Mybatis-Plus整合Spring 7
2.3.5 第五步:編寫測試代碼 10
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的加強工具,在 MyBatis 的基礎上只作加強不作改變,爲簡化開發、提升效率而生。
咱們已經學習過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層零實現。
Mybatis-Plus只是在Mybatis的基礎上,實現了功能加強,讓開發更加簡潔高效。
Mybatis-Plus並無修改Mybatis的任何特性!!!
使用Mybatis-Plus實現對用戶的crud操做。
(1)搭建環境(建立項目、導入包)
(2)配置Mybaits-Plus(基於Spring實現)
(3)編寫測試代碼
已經建立好了數據庫環境:
|
建表語句:
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`) ) |
(1)Mybatis-Plus並無提供單獨的jar包,而是經過Maven(或者gradle)來管理jar依賴。本教程須要使用Maven構建項目。
(2)Mybatis-Plus是基於Spring框架實現的,所以使用Mybatis-Plus,必須導入Spring相關依賴。
|
修改pom.xml文件,添加Mybatis-Plus相關依賴:
<dependencies> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>2.3</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.16.RELEASE</version> </dependency>
<!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency>
<!-- 鏈接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.16.RELEASE</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.16.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.16.RELEASE</version> </dependency> </dependencies> |
說明:使用Mybatis-Plus能夠不使用xml文件,而是基於一組註解來解決實體類和數據庫表的映射問題。
@TableName(value="tb_user") |
指定對應的表,表名和類名一致時,能夠省略value屬性。 |
@TableId |
指定表的主鍵。Value屬性指定表的主鍵字段,和屬性名一致時,能夠省略。Type指定主鍵的增加策略。 |
@TableField |
指定類的屬性映射的表字段,名稱一致時能夠省略該註解。 |
User類以下:
package cn.gzsxt.mp.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("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 String age; //int(11) DEFAULT NULL COMMENT '年齡', private String email; //varchar(50) DEFAULT NULL COMMENT '郵箱',
//補全get、set方法
} |
說明:繼承BaseMapper公共接口便可。
package cn.gzsxt.mp.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import cn.gzsxt.mp.pojo.User;
public interface UserMapper extends BaseMapper<User>{
} |
<?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-4.3.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.gzsxt.mp"/>
<!-- 1、建立數據源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mp"/> <property name="username" value="root"/> <property name="password" value="gzsxt"/>
<property name="maxActive" value="20"/> <property name="minIdle" value="5"/> </bean>
<!-- 2、mybatis-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.gzsxt.mp.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"/>
<property name="format" value="true"/>
</bean> </list> </property>
<property name="globalConfig" ref="globalConfiguration"></property>
</bean>
<!-- 3、配置mybatis的動態代理 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
<property name="basePackage" value="cn.gzsxt.mp.mapper"></property>
</bean>
<!-- 4、配置事物管理器 --> <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean>
<!-- 配置mybatis-plus全局屬性 --> <!-- 定義 MybatisPlus 的全局策略配置--> <bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration"> <!-- 在 2.3 版本之後,dbColumnUnderline 默認值是 true,即pojo屬性開啓駝峯標識 --> <property name="dbColumnUnderline" value="true"></property> <!-- 全局的主鍵策略 --> <!-- 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>
<!-- 5、開啓註解聲明式事物 --> <tx:annotation-driven/> </beans>
|
package cn.gzsxt.mp.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.context.annotation.ComponentScan; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import cn.gzsxt.mp.mapper.UserMapper; import cn.gzsxt.mp.pojo.User;
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:spring-data.xml"}) @ComponentScan(basePackages={"cn.gzsxt.mp"}) 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<>(); 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<>(); wrapper.like("name", "%張%");
List<User> users = userMapper.selectList(wrapper); for (User user : users) {
System.out.println("用戶id:"+user.getId()+",用戶姓名:"+user.getName()+",用戶郵箱:"+user.getEmail()); } } } |