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依赖

        
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plusartifactId>
            <version>3.3.2version>
        dependency>

代码实现

新建一个jar项目

16.SSM框架集~MybatisPlus初步_第1张图片

导入需要的依赖


<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.0modelVersion>

    <groupId>com.alvingroupId>
    <artifactId>MybatisPlusProjectartifactId>
    <version>1.0-SNAPSHOTversion>

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

    <dependencies>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>${mysql-version}version>
        dependency>
        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>${mybatis-version}version>
        dependency>
        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
            <version>${spring-version}version>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jdbcartifactId>
            <version>${spring-version}version>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-testartifactId>
            <version>${spring-version}version>
        dependency>
        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
            <version>${spring-version}version>
        dependency>

        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatis-springartifactId>
            <version>${mybatis-spring-version}version>
        dependency>

        
        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-log4j12artifactId>
            <version>${slf4j-version}version>
        dependency>

        
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>${junit-version}version>
            <scope>testscope>
        dependency>

        
        <dependency>
            <groupId>org.aspectjgroupId>
            <artifactId>aspectjweaverartifactId>
            <version>1.9.4version>
        dependency>

        
        <dependency>
            <groupId>commons-fileuploadgroupId>
            <artifactId>commons-fileuploadartifactId>
            <version>1.3.3version>
        dependency>

        
        <dependency>
            <groupId>com.sun.jerseygroupId>
            <artifactId>jersey-clientartifactId>
            <version>1.19version>
        dependency>

        
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plusartifactId>
            <version>3.3.2version>
        dependency>

    dependencies>


project>

配置applicationContext-mybatis.xml


<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">

        
        <context:property-placeholder location="classpath:jdbc.properties">context:property-placeholder>

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

       
       <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="idType" value="AUTO">property>
              bean>
          property>
      bean>



      
      <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类?好吧,我们现在点进去看一看

16.SSM框架集~MybatisPlus初步_第2张图片

       在这里面我们可以看到很多熟悉的方法,没错,继承了这个类之后,对于增删查改等一些简单的操作,从此不再需要我们手动来写Sql语句了~我们来测试类看一看

16.SSM框架集~MybatisPlus初步_第3张图片

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

16.SSM框架集~MybatisPlus初步_第4张图片

        你看,数据传过来了~

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

你可能感兴趣的:(SSM框架集)