Spring-mybatis-plus 整合spring

一.基本介绍

1.官网 http://mp.baomidou.com      最新版本:3.1.1

2.特点:无侵入,提供CURD操作,支持主流数据库,有点很多  不多细说

3.架构原理

Spring-mybatis-plus 整合spring_第1张图片

mybatisplus通过反射扫描实体类,然后获取数据库中的表格信息,通过分析产生crud的sql语句,然后把sql语句封装到容器中

二.工程搭建

1.依赖导入,主要是mybatis-plus



    4.0.0

    com.heima
    mybatis-plus
    1.0-SNAPSHOT

    
        8
        8
    
    
        
            com.baomidou
            mybatis-plus
            3.1.1
        
        
            mysql
            mysql-connector-java
            8.0.28
        
        
            com.alibaba
            druid
            1.2.6
        
        
            junit
            junit
            4.12
            test
        
        
            org.slf4j
            slf4j-log4j12
            1.6.4
        
        
            org.projectlombok
            lombok
            1.18.16
        
    

3.配置资源建立

 1)在resources文件下创建logj的配置文件  log4j.properties

log4j.rootLogger=DEBUG,A1

log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%t] [%c]-[%p]  %m%n

   2)mybatis-config配置文件




    
        
            
            
                
                
                
                
            
        
    
    
        
    

三.项目开发

1.接口实现,extends BaseMapper

package cn.itcast.mp.simple.mapper;

import cn.itcast.mp.simple.pojo.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import java.util.List;

public interface UserMapper extends BaseMapper {

    List findAll();
}

2.创建映射文件.xml 

注意有一个resultType





    

 3.创建测试类开启测试(先Resources->SqlSessionFactory->sqlsession->mapper->调用方法)

   流程:1).将mybatis配置文件定义为一个字符串config

                  String config="mybatis-config.xml"

              2).用Resources.getResourceAsStream 方法加载config,得到一个输入流

                 InputStream inputStream= Resources.getResourceAsStream(config)

              3).通过sqlSessionFactoryBuilder建立一个sqlSessionFactory  

                SqlSessionFactory  sqlSessionfactory=  sqlSessionFactoryBuilder.build(inputStream)

              4).通过sqlSessionfactory创建一个sqlsession

                     sqlSessionfactory.openSession()

                

               5).sqlsession加载已创建的mapper文件,创建一个mapper对象 

                      sqlsession.getMapper("UserMapper.xml").var

                6).通过mapper文件调用定义的方法,进行增删改查

                       usermapper.findAll();

        

package cn.itcast.mp.simple;

import cn.itcast.mp.simple.mapper.UserMapper;
import cn.itcast.mp.simple.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class TestMybatis {

    @Test
    public void testFindAll() throws Exception{

        String config = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(config);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        //测试查询
        List users = userMapper.findAll();
        for (User user : users) {
            System.out.println(user);
        }

    }
}

4.使用mybatis-plus实现查找user

   1)将usermapper的接口集成BaseMapper

Spring-mybatis-plus 整合spring_第2张图片

   2)在实体类上用@TableName("tb_user")映射到数据库

   3)在创建session的过程中使用MybatisSqlSessionBuilder

5.springboot 整合mybatis-plus

 1)导入依赖


        org.springframework.boot
        spring-boot-starter-parent
        2.1.4.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter
            
                
                    org.springframework.boot
                    spring-boot-starter-logging
                
            
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
 
        
            org.projectlombok
            lombok
            true
        
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.1.1
        
        
        
            mysql
            mysql-connector-java
            5.1.47
        
        
            org.slf4j
            slf4j-log4j12
        

    

2)编写配置文件

application.yml配置文件

spring:
  datasource:
      driver-class-name: com.mysql.jdbc.Driver
      username: root
      password: 123456
      url: jdbc:mysql://localhost:3306/mp?useUnicode=true&characterEncoding=utf8&useSSL=false
      max-active: 60 #连接池配置

  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: Asia/Chongqing
#配置mybatis-plus
mybatis-plus:
  #指定全局mybatis配置文件
  classpath: mybatis-config.xml
  configuration:
    #驼峰映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #输出sql语句

    #指定sqlmapper文件所在位置  即在mapper文件夹下的.xml文件
  mapper-locations: classpath*:/mapper/**/*.xml
  #别名扫描,指定sql mapper文件中resultType的路径
  type-aliases-package: com.qf


  global-config:
    db-config:
      #将主键设置为自动增长,这样就省区了entity中的 @TableId(type = IdType.AUTO)
      id-type: auto
      #将所有实体类对数据库的映射表名前缀设置为tb_,这样就可以在实体类上取消@TableName("tb_user")
      table-prefix: tb_

3)创建启动类App@SpringBootApplication

@SpringBootApplication
@MapperScan("com.qf.mapper")
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }
}

4)开启测试类

注意加两个注释:@RunWith(SpringJUnit4ClassRunner.class)

                             @SpringBootTest

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class TestMybatisSpringBoot {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelectList(){
        List users = this.userMapper.selectList(null);
        for (User user : users) {
            System.out.println(user);
        }
    }

}

四.数据匹配要点

1.@TableName

当实体类类名和数据库表明对应不上时,应该在类名上加上@TableName

Spring-mybatis-plus 整合spring_第3张图片

2.@TableId

对于主键,应该在其属性名上加上@TableId(type=Idtype.AUTO)

Spring-mybatis-plus 整合spring_第4张图片

3.@TableField

数据库中一个属性是email,对象属性是mail,那么就可以加上TableField(value="email")

还有一种情况 :比如数据库中没有address这个属性,那么可以在对象属性上加上@TableField(exist=false)

@TableField(select=false).隐藏查找后的属性

4.mybatis封装crud,用wrapper封装条件信息

Querywrapper的使用,eq代表等于,gt大于等于 ,wrapper.eq("name","小李"),代表封装一个条件,数据库中字段是name的是小李,然后调用查询语句,放入条件即可

    @Test
    public  void test2(){
        QueryWrapper queryWrapper=new QueryWrapper<>();
        queryWrapper.gt("age", 18);//封装查询条件
        List users = userMapper.selectList(queryWrapper);
        for (User u:users) {
            System.out.println(u);
        }

    }

5.测试分页查询

1)第一步,建立mybatisplus配置类,创建分页插件 

Spring-mybatis-plus 整合spring_第5张图片

2)分页查询

 @Test
    public  void testPage(){
        //设置查询哪页的多少行信息
        Page page=new Page<>(1,1);

        //设置查询的条件
        QueryWrapper queryWrapper=new QueryWrapper<>();
        queryWrapper.like("user_name","zh");

        //开启查询
        IPage userIPage = userMapper.selectPage(page, queryWrapper);
        List records = userIPage.getRecords();
        for (User u:records
             ) {
            System.out.println(u);
        }


    }

五.mybatis配置详解

1.如果自己另外设置有mybaits配置信息,那么可以在application.yml文件中进行指定

2.高级mybatis配置

2.1驼峰映射:在查找数据时如果存在数据为null,可能就是驼峰映射没打开,比如User的属性userName,在数据库中是username,这时候打开驼峰映射就可以查询到信息了

Spring-mybatis-plus 整合spring_第6张图片

2.2 cache_enable:配置二级缓存

Spring-mybatis-plus 整合spring_第7张图片

 2.3表明前缀设置table_prefix

global-config:
  db-config:
    #将主键设置为自动增长,这样就省区了entity中的 @TableId(type = IdType.AUTO)
    id-type: auto
    #将所有实体类对数据库的映射表名前缀设置为tb_,这样就可以在实体类上取消@TableName("tb_user")
    table-prefix: tb_

六.数据操作涉及到的知识点

1.大小比较汇总

eq:等于

ne:不等于

gt:大于

ge:大于等于

lt:小于

lq:小于等于

2.排序算法:利用queryWrapper,orderbyDesc是倒序,将倒序条件设置进queryWrapper,

3.逻辑查询:  wrapper设置查询条件可以设置.or()来增加条件,如果不加or(),两个条件就是and  并 列条件

 @Test
    public  void  test6(){
        QueryWrapper queryWrapper=new QueryWrapper<>();
        queryWrapper.orderByDesc("age");
        List users = userMapper.selectList(queryWrapper);
        for (User u:  users
             ) {
            System.out.println(u);

        }
    }

4.选择查询,wrapper设置的查询条件可以在后面加上select 可以选择自定义的查询字段


    @Test
    public  void tset6(){
      QueryWrapper queryWrapper=new QueryWrapper<>();
      queryWrapper.eq("name","张三").or().eq("age",28).select("user_name","name","age");
        List users = userMapper.selectList(queryWrapper);
        for (User u: users ) {
            System.out.println(u);
        }
    }

七.AR操作  ActiveRecord

1.在实体类上继承Model

Spring-mybatis-plus 整合spring_第8张图片

2.Active Record实现增删改查

首先new 一个User,设置对应属性 然后通过User对象去调用增删改查方法

package com.qf;

import com.qf.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class TestAr {
    @Test
    public  void test1(){
        User user=new User();
        user.setId(2L);
        User user1=user.selectById();
        System.out.println(user1);
    }
    @Test
    public  void  test2(){
        User user=new User();
        user.setUserName("王宝强");
        user.setMail("[email protected]");
        boolean insert = user.insert();
        System.out.println("插入了吗?"+insert);
    }
    @Test
    public  void  test3(){
        User user=new User();
        user.setId(2L);
        user.setAge(100);
        boolean b = user.updateById();
        System.out.println(b);

    }
    @Test
    public  void  test4(){
        User user=new User();
        user.setId(2L);
        User user1 = user.selectById();
        System.out.println(user1);
    }

}

八.mybatis-plus插件

1.代码生成器

目录

一.基本介绍

二.工程搭建

三.项目开发

四.数据匹配要点

五.mybatis配置详解

六.数据操作涉及到的知识点


你可能感兴趣的:(spring,mybatis)