16.SSM框架集~MybatisPlus初步

16.SSM框架集~MybatisPlus初步

本文是上一篇文章的後續,詳情點擊該鏈接

MybatisPlus

        Mybatis-Plus(簡稱MP)是一個 Mybatis 的增強工具,在 Mybatis 的基礎上只做增強不做改變,爲簡化開發、提高效率而生。官方文檔說的願景是成爲 Mybatis 最好的搭檔。

MyBatis和Mybatis Plus的使用比較

        MybatisPlus包含了Mybatis的所有功能,也就說在MybatisPlus中我們仍然可以按照Mybatis的方式來完成數據庫的操作(無侵入)。

        MybatisPlus的數據庫操作的Mapper層的接口只需要繼承BaseMapper接口,就自動的擁有了當前對應的表的基本的CRUE操作,無需聲明接口方法及其xml文件,極大的提升了開發效率(MybatisPlus是通過實體類來逆向動態生成對應的表的基本的Sql語句)

MybatisPlus特性

        無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑

        損耗小:啓動即會自動注入基本CURD,性能基本無損耗,直接面向對象操作

        強大的CRUD操作:內置通用Mapper.通用Service,僅僅通過少量配置即可實現單表大部分CRUD操作,更有強大的條件構造器,滿足各類使用需求

        支持Lambda形式調用:通過Lambda表達式,方便的編寫各類查詢條件,無需再擔心字段寫錯

        支持主鍵自動生成:支持多達4種主健策略(內含分佈式唯一ID 生成器. Sequence),可自由配置,完美解決主鍵問題

        支持ActiveRecord模式:支持ActiveRecord形式調用,實體類只需繼承Model類即可進行強大的CRUD操作

        支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )

        無內置代碼生成器:採用代碼或者Maven插件可快速生成Mapper. Model. Service、Controller層代碼,支持模板引擎,更有超多自定義配置等您來使用

        內置分頁插件:基於MyBatis物理分頁,開發者無需關心具體操作,配置好插件之後,寫分頁等同於普通List查詢

        分頁插件支持多種數據庫:支持MySQL. MariaDB. Oracle. DB2. H2、 HSQL. sQlite. Postgre.SQLServer等多種數據庫

        內置性能分析插件:可輸出Sql語句以及其執行時間,建議開發測試時啓用該功能,能快速揪出慢查詢

        內置全局攔截插件:提供全表delete、update操作智能分析阻斷,也可自定義攔截規則,預防誤操作

MybatisPlus依賴

        <!--MyBatisPlus依賴-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.3.2</version>
        </dependency>

代碼實現

新建一個jar項目

在這裏插入圖片描述

導入需要的依賴

<?xml version="1.0" encoding="UTF-8"?>
<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>com.alvin</groupId>
    <artifactId>MybatisPlusProject</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <mysql-version>8.0.11</mysql-version>
        <mybatis-version>3.5.2</mybatis-version>
        <spring-version>5.2.2.RELEASE</spring-version>
        <mybatis-spring-version>2.0.4</mybatis-spring-version>
        <slf4j-version>1.7.25</slf4j-version>
        <junit-version>4.12</junit-version>
    </properties>

    <dependencies>
        <!--mysql的驅動依賴-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-version}</version>
        </dependency>
        <!--mybatis的核心依賴-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis-version}</version>
        </dependency>
        <!--springIOC的核心依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <!--spring-jdbc連依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <!--spring-test依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <!--spring-webmvc依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <!--mybatis連接spring的依賴-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis-spring-version}</version>
        </dependency>

        <!--日誌依賴-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j-version}</version>
        </dependency>

        <!--單元測試的依賴-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit-version}</version>
            <scope>test</scope>
        </dependency>

        <!--AOP的命名空間依賴-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>

        <!--文件上傳組件的依賴-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>

        <!--跨服務文件訪問依賴-->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.19</version>
        </dependency>

        <!--MyBatisPlus依賴-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.3.2</version>
        </dependency>

    </dependencies>


</project>

配置applicationContext-mybatis.xml

<?xml version="1.0" encoding="UTF8"?>
<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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        https://www.springframework.org/schema/tx/spring-tx.xsd">

        <!--把jdbc.properties文件引入-->
        <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

       <!--[A]連接數據庫 獲得數據源-->
       <bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
           <property name="driverClassName" value="${m_driver}"></property>
           <property name="url" value="${m_url}"></property>
           <property name="username" value="${m_uname}"></property>
           <property name="password" value="${m_pwd}"></property>
       </bean>

       <!--[B]獲得sqlsession工廠-->
       <bean id="factory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean" >
           <!--引入全局策略-->
           <property name="globalConfig" ref="config"></property>

           <!--配置分頁插件-->
           <property name="plugins">
               <array>
                   <bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
                       <!--設置連接數據庫方言-->
                       <property name="dialectType" value="mysql"></property>
                   </bean>
               </array>
           </property>

           <property name="dataSource" ref="ds"></property>
           <property name="typeAliasesPackage" value="com.alvin.pojo"></property>
       </bean>


      <!--配置全局策略-->
      <bean id="config" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
          <property name="dbConfig">
              <bean id="db" class="com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig">
                  <!--表名稱的前綴-->
                 <!-- <property name="tablePrefix" value="t_"></property>-->
                  <!--主鍵自增的操作-->
                  <property name="idType" value="AUTO"></property>
              </bean>
          </property>
      </bean>



      <!--[C]掃描mapper文件-->
      <bean id="mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
          <property name="sqlSessionFactoryBeanName" value="factory"></property>
          <property name="basePackage" value="com.alvin.mapper"></property>
      </bean>
</beans>

編寫實體類

public class Flower  implements Serializable {
    //指定當前字段是主鍵
    @TableId(type = IdType.AUTO)
    private   Integer  id;
    //@TableField(value = "t_name")
    private  String  name;
    private   Double  price;
    private   String  production;
}//get set就不再文章裏面寫了

編寫Mapper層

public interface FlowerMapper extends BaseMapper<Flower> { }

       寫到這裏會不會感覺很奇怪?爲什麼Mapper層一行代碼都沒有,僅僅只是繼承了一個BaseMapper類?好吧,我們現在點進去看一看

在這裏插入圖片描述

       在這裏面我們可以看到很多熟悉的方法,沒錯,繼承了這個類之後,對於增刪查改等一些簡單的操作,從此不再需要我們手動來寫Sql語句了~我們來測試類看一看

在這裏插入圖片描述

Test測試類

@ContextConfiguration(locations ={"classpath:applicationContext-mybatis.xml"} )
@RunWith(SpringJUnit4ClassRunner.class)
public class TestA {
    @Autowired
    private FlowerMapper  flowerMapper;

    @Test
    public void testFlower1(){
        List<Flower> list = flowerMapper.selectList(null);
        Iterator iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

在這裏插入圖片描述

        你看,數據傳過來了~

MyBatis Plus 中的CRUD

查詢操作

查詢全部信息
        List<Flower> list = flowerMapper.selectList(null);
        Iterator iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
根據ID查詢信息

SELECT id,name,price,production FROM flower WHERE id=?

		Flower flower = flowerMapper.selectById(10002);
		System.out.println("根據ID查詢: " + flower);
批量查詢

SELECT id,name,price,production FROM flower WHERE id IN ( ? , ? )

        List<Integer>listS = new ArrayList<Integer>();
        listS.add(10001); listS.add(10003);
        list = flowerMapper.selectBatchIds(listS);
        System.out.println("批量查詢" + list);
Map查詢

SELECT id,name,price,production FROM flower WHERE name = ? AND id = ?

        Map<String,Object> map = new HashMap<String, Object>();
        map.put("id",10005);
        map.put("name","西蘭花");
        List<Flower> list1 = flowerMapper.selectByMap(map);
        System.out.println("Map查詢" + list1);
自定義查詢條件

SELECT id,name,price,production FROM flower WHERE (name = ? OR id = ?)

        //自定義查詢
        QueryWrapper<Flower> queryWrapper = new QueryWrapper<Flower>();
        queryWrapper.eq("name","西蘭花").or().eq("id",10005);
        List<Flower> list2 = flowerMapper.selectList(queryWrapper);
        System.out.println(list2);

添加操作

 public void Insert(){
        //在添加的時候需要注意  ,如果數據庫中主鍵是自增的,我們一定要在
        //實體類中指定主鍵屬性爲 @TableId(type = IdType.AUTO)
        Flower  flower=new Flower();
        flower.setName("XXX");
        flower.setPrice((double) 18);
        flower.setProduction("中國");
        //INSERT INTO flower ( name, price, production ) VALUES ( ?, ?, ? )
        int insert = flowerMapper.insert(flower);
    }

修改操作

    public void Update(){
        Flower flower = new Flower();
        flower.setId(10001);
        flower.setName("玫瑰花");
        flowerMapper.updateById(flower);
    }
自定義修改條件
        //指定修改條件
        //UPDATE flower SET production=? WHERE (name = ?)
        QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.eq("name","西蘭花");
        flowerMapper.update(f,queryWrapper);

刪除操作

    public void Delete(){
        //[1]根據ID進行刪除操作
        //DELETE FROM flower WHERE id=?
       // flowerMapper.deleteById(5);
        List<Integer>  list=new ArrayList<Integer>();
        list.add(10001);
        list.add(10003);
        //[2]根據ID進行批量刪除操作
        //DELETE FROM flower WHERE id IN ( ? , ? )
        flowerMapper.deleteBatchIds(list);
        //[3]多條件刪除操作,條件之間使用的是and進行關聯
        //flowerMapper.deleteByMap();
        //[4]自定義刪除條件
        //DELETE FROM flower WHERE (name = ? OR production = ?)
        QueryWrapper<Flower>  queryWrapper=new QueryWrapper();
        queryWrapper.eq("name","xxx").or().eq("production","XXX");
        flowerMapper.delete(queryWrapper);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章