一.基本介绍
1.官网?http://mp.baomidou.com? ? ? 最新版本:3.1.1
2.特点:无侵入,提供CURD操作,支持主流数据库,有点很多? 不多细说
3.架构原理
mybatisplus通过反射扫描实体类,然后获取数据库中的表格信息,通过分析产生crud的sql语句,然后把sql语句封装到容器中
二.工程搭建
1.依赖导入,主要是mybatis-plus
<?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.heima</groupId>
<artifactId>mybatis-plus</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
</dependencies>
</project>
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配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
三.项目开发
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<User> {
List<User> findAll();
}
2.创建映射文件.xml?
注意有一个resultType
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.itcast.mp.simple.mapper.UserMapper">
<select id="findAll" resultType="cn.itcast.mp.simple.pojo.User">
select * from tb_user
</select>
</mapper>
?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<User> 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)导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--简化代码的工具包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--mybatis-plus的springboot支持-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
</dependencies>
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<User> 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<User> queryWrapper=new QueryWrapper<>();
queryWrapper.gt("age", 18);//封装查询条件
List<User> users = userMapper.selectList(queryWrapper);
for (User u:users) {
System.out.println(u);
}
}
5.测试分页查询
1)第一步,建立mybatisplus配置类,创建分页插件?
2)分页查询
@Test
public void testPage(){
//设置查询哪页的多少行信息
Page<User> page=new Page<>(1,1);
//设置查询的条件
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
queryWrapper.like("user_name","zh");
//开启查询
IPage<User> userIPage = userMapper.selectPage(page, queryWrapper);
List<User> records = userIPage.getRecords();
for (User u:records
) {
System.out.println(u);
}
}
五.mybatis配置详解
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<User> queryWrapper=new QueryWrapper<>();
queryWrapper.orderByDesc("age");
List<User> users = userMapper.selectList(queryWrapper);
for (User u: users
) {
System.out.println(u);
}
}
4.选择查询,wrapper设置的查询条件可以在后面加上select 可以选择自定义的查询字段
@Test
public void tset6(){
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("name","张三").or().eq("age",28).select("user_name","name","age");
List<User> 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("baoqiang@qq.com");
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配置详解
六.数据操作涉及到的知识点
|