文章目录
学习
(引)MyBatis-Plus使用1
(引)MyBatis-Plus使用2
(转)Mybatis-Plus 的 实体类 注解(@TableName,@TableFiled)
【mybatis-plus 从2.x到3.x升级指南】https://blog.youkuaiyun.com/m0_37840000/article/details/81604613?utm_source=blogxgwz8
注意:EntityWrapper<T>
更名为QueryWrapper<T>
,新增一个实现类UpdateWrapper<T>
用于update方法
参考
【Springboot整合MybatisPlus(超详细)完整教程~】https://www.cnblogs.com/liuyj-top/p/12976396.html
【springboot整合Mybatis-plus】https://www.cnblogs.com/leeego-123/p/10734330.html
入门demo
注意
- application.yml中的
mybatis-plus.mapper-locations
用于指定 加载 mapper.xml文件。 - 在xml中的
namespace
指定对应的接口(这样就不用创建接口的实现类了)。 - 启动类的
@MapperScan
注解用来 扫描接口
在MyBatis中,Mapper中的namespace用于绑定Dao接口的,即面向接口编程。
它的好处在于当使用了namespace之后就可以不用写接口实现类,业务逻辑会直接通过这个绑定寻找到相对应的SQL语句进行对应的数据处理
sqlSession
student = (Student) session.selectOne("com.domain.Student.selectById", new Integer(10));
pom 依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<name>demo-mybatis-plus</name>
<description>Demo project for Spring Boot With MP</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!--<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
</dependency>-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>5.1.32</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.14</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml 配置文件
server:
port: 9011
spring:
application:
name: SWC-MP
datasource:
username: root
password: 123
url: jdbc:mysql://localhost:3306/dongyimaidb?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource # 数据源
filters: stat #开启监控过滤器
mybatis-plus:
# 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
# 如果是放在resource目录 classpath:/mapper/*Mapper.xml
# mapper-locations扫描的是 mapper.xml ,xml中的namespace对应接口。 @MapperScan 扫描接口
mapper-locations: classpath:mybatis/mappers/*Mapper.xml
#实体扫描,多个package用逗号或者分号分隔 .别名
typeAliasesPackage: com.example.demo.pojo
global-config:
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
id-type: 0
#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
field-strategy: 1
#驼峰下划线转换
#db-column-underline: true
#刷新mapper 调试神器
#refresh-mapper: true
#数据库大写下划线转换
#capital-mode: true
# Sequence序列接口实现类配置
#key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
#逻辑删除配置(下面3个配置)
#logic-delete-value: 1
#logic-not-delete-value: 0
#sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
#自定义填充策略接口实现
#meta-object-handler: com.baomidou.springboot.MyMetaObjectHandler
configuration:
map-underscore-to-camel-case: true
cache-enabled: true
#配置JdbcTypeForNull
jdbc-type-for-null: 'null'
pojo
具体实体中的注解使用参考:https://blog.youkuaiyun.com/weixin_43301027/article/details/102891781
package com.example.demo.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_brand") // 如果 表名 和 接口名 符合 驼峰转下户线,就不用加@TableName指定表名。(现在表名tb_brand,就不用加这个注解)
public class TbBrand implements Serializable {
// value与数据库主键列名一致,若实体类属性名与表主键列名一致可省略value
// @TableId(value = "id",type = IdType.AUTO) 自增策略,在application.yml配置了
private Long id;
private String name;
// 若没有开启驼峰命名,或者表中列名不符合驼峰规则,可通过该注解指定数据库表中的列名,exist标明数据表中有没有对应列
// 在配置文件中,配置了转驼峰命名
// @TableField(value="first_char",exist = true)
private String firstChar;
}
dao
只要基本的增删改(mybatisplus自带),不用自己写mapper.xml文件
接口: 继承mybatis plus的 BaseMapper
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.pojo.TbBrand;
public interface BrandMapper extends BaseMapper<TbBrand> {
}
service
注意:EntityWrapper改成了QueryWrapper
其他操作,看文章开头的帖子
package com.example.demo.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.mapper.BrandMapper;
import com.example.demo.pojo.TbBrand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BrandService {
@Autowired
private BrandMapper brandMapper;
public List<TbBrand> findAll(){
return brandMapper.selectList(null);
}
public IPage<TbBrand> findPageByFirstChar(long pageNum,long pageSize,String firstChar){
IPage<TbBrand> page = brandMapper.selectPage(new Page<TbBrand>(pageNum, pageSize),
new QueryWrapper<TbBrand>()
.eq("first_char", firstChar));
System.out.println(page.getRecords());
System.out.println("总条数:"+page.getTotal());
return page;
}
}
controller
package com.example.demo.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.demo.pojo.TbBrand;
import com.example.demo.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.bind.DefaultValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/brand")
public class BrandController {
@Autowired
private BrandService brandService;
@RequestMapping("/findList")
public List<TbBrand> findList(){
return brandService.findAll();
}
@RequestMapping("/page/{num}/{size}/{firstC}")
public IPage<TbBrand> findPageByFirstChar(@PathVariable("num") Long num
, @PathVariable("size") Long size, @PathVariable("firstC")String firstC){
return brandService.findPageByFirstChar(num,size,firstC);
}
}
config(mybatisPlus分页插件)
package com.example.demo.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
启动类
注意:@MapperScan("com.example.demo.mapper")
扫描mapper接口
package com.example.demo;
import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoMybatisPlusApplication {
public static void main(String[] args) {
SpringApplication.run(DemoMybatisPlusApplication.class, args);
}
}