1.官网 http://mp.baomidou.com 最新版本:3.1.1
2.特点:无侵入,提供CURD操作,支持主流数据库,有点很多 不多细说
3.架构原理
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
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
2.@TableId
对于主键,应该在其属性名上加上@TableId(type=Idtype.AUTO)
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配置类,创建分页插件
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);
}
}
1.如果自己另外设置有mybaits配置信息,那么可以在application.yml文件中进行指定
2.高级mybatis配置
2.1驼峰映射:在查找数据时如果存在数据为null,可能就是驼峰映射没打开,比如User的属性userName,在数据库中是username,这时候打开驼峰映射就可以查询到信息了
2.2 cache_enable:配置二级缓存
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
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配置详解
六.数据操作涉及到的知识点