Mybatis-Plus

 

 

 

 

 

  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簡介

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層零實現。

 

1.3 Mybatis-Plus小結

Mybatis-Plus只是在Mybatis的基礎上,實現了功能加強,讓開發更加簡潔高效。

 

Mybatis-Plus並無修改Mybatis的任何特性!!!

 

入門示例

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 說明

1Mybatis-Plus並無提供單獨的jar包,而是經過Maven(或者gradle)來管理jar依賴。本教程須要使用Maven構建項目。

 

2Mybatis-Plus基於Spring框架實現的,所以使用Mybatis-Plus,必須導入Spring相關依賴。

 

2.3.1.3 建立項目

 

 

 

2.3.1.4 添加依賴

修改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>

 

2.3.2 第二步:建立User實體類

說明:使用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方法

 

}

2.3.3 第三步建立UserMapper接口

說明:繼承BaseMapper公共接口便可。

package cn.gzsxt.mp.mapper;

 

import com.baomidou.mybatisplus.mapper.BaseMapper;

 

import cn.gzsxt.mp.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-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>

 

<!-- 2mybatis-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>

 

 

2.3.5 第五步:編寫測試代碼

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());

}

}

}

相關文章
相關標籤/搜索