添加pom依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
常用注解
@TableName
使用在实体类上 ,是表名的注解
属性 | 默认值 | 描述 |
---|---|---|
value | 否 | 表名(默认是实体类名对应的表名(驼峰转下划线),若表名与实体类名不对应,则需要指定表名) |
@TableId
主键注解,用在对应的表的主键字段上
属性 | 默认值 | 描述 |
---|---|---|
value | “” | 主键字段名(默认是和属性对应的字段(驼峰转下划线),若字段名与属性名不能对应,则需要指定字段) |
type | IdType.NONE | 主键类型 |
type的枚举值:
值 | 描述 |
---|---|
AUTO | 数据库自增(依赖数据库) |
INPUT | 自行输入 |
ID_WORKER | 分布式全局唯一ID(基于sequence)长整型类型 |
UUID | 32为UUID字符串 |
NONE | 无状态 |
ID_WORKER_STR | 分布式全局唯一ID(基于sequence)字符串类型 |
@TableFieId
除主键外其他字段的注解,常用属性
属性 | 默认值 | 描述 |
---|---|---|
value | “” | 字段名(默认是和属性对应的字段(驼峰转下划线),若字段名与属性名不能对应,则需要指定字段) |
exist | true | 是否为数据库表字段(若不需要与数据库的字段对应,则必须设置为false) |
配置文件详解
这里主要介绍的是springboot的.yml配置文件的方式,这部分的配置主体结构大概如下:
mybatis-plus:
......
configuration:
......
global-config:
......
db-config:
......
那我们也把分为4个部分来介绍
mybatis-plus:
# MyBatis Mapper 所对应的 XML 文件位置,如果您在 Mapper 中有自定义方法(XML 中有自定义实现),需要进行该配置,告诉 Mapper 所对应的 XML 文件位置
config-location: classpath:mybatis-config.xml
# 指定外部化 MyBatis Properties 配置,通过该配置可以抽离配置,实现不同环境的配置部署
configuration-properties: classpath:mybatis-config.properties
# Mapper对应的xml文件扫描,多个目录用逗号或者分号分隔
mapper-locations: classpath*:/mapper/**/*Mapper.xml
# MyBaits 别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在 Mapper 对应的 XML 文件中可以直接使用类名,而不用使用全限定的类名(即 XML 中调用的时候不用包含包名)
type-aliases-package: com.ck.**
# 该配置请和 typeAliasesPackage 一起使用,如果配置了该属性,则仅仅会扫描路径下以该类作为父类的域对象
type-aliases-super-type: java.lang.Object
# 枚举类 扫描路径,如果配置了该属性,会将路径下的枚举类进行注入,让实体类字段能够简单快捷的使用枚举属性
type-enums-package: com.baomidou.mybatisplus.samples.quickstart.enums
# 启动时是否检查 MyBatis XML 文件的存在,默认不检查
check-config-location: true
# SIMPLE:该执行器类型不做特殊的事情,为每个语句的执行创建一个新的预处理语句,REUSE:该执行器类型会复用预处理语句,BATCH:该执行器类型会批量执行所有的更新语句
default-executor-type: REUSE
configuration:
# 配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
map-underscore-to-camel-case: true
# 全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存,默认为 true
cache-enabled: false
# 懒加载
aggressive-lazy-loading: true
# NONE:不启用自动映射 PARTIAL:只对非嵌套的 resultMap 进行自动映射 FULL:对所有的 resultMap 都进行自动映射
auto-mapping-behavior: partial
# NONE:不做任何处理 (默认值)WARNING:以日志的形式打印相关警告信息 FAILING:当作映射失败处理,并抛出异常和详细信息
auto-mapping-unknown-column-behavior: none
# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
call-setters-on-nulls: true
# 配置JdbcTypeForNull, oracle数据库必须配置
jdbc-type-for-null: "null"
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
# 是否控制台 print mybatis-plus 的 LOGO
banner: true
# 机器 ID 部分(影响雪花ID)
#worker-id:
# 数据标识 ID 部分(影响雪花ID)(workerId 和 datacenterId 一起配置才能重新初始化 Sequence)
#datacenter-id:
db-config:
#表名下划线命名默认true
table-underline: true
#id类型
id-type: auto
#是否开启大写命名,默认不开启
#capital-mode: false
#逻辑已删除值,(逻辑删除下有效) 需要注入逻辑策略LogicSqlInjector 以@Bean方式注入
logic-not-delete-value: 0
#逻辑未删除值,(逻辑删除下有效)
logic-delete-value: 1
#数据库类型 这个属性没什么用 数据库类型,默认值为未知的数据库类型 如果值为OTHER,启动时会根据数据库连接 url 获取数据库类型;如果不是OTHER则不会自动获取数据库类型
db-type: mysql
# IGNORED 忽略判断 NOT_NULL 非NULL判断 NOT_EMPTY 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断) DEFAULT 追随全局配置 类似的还有update-strategy、select-strategy等
insert-strategy: not_null
代码实现
项目结构
实体类
@TableName("mybatis_plus")
public class User {
@TableId(type = IdType.AUTO)
private Integer id;
private String userName;
private String passWord;
private String phone;
private String tips;
private Integer state;
@TableField("created_time")
private String createdTime;
@TableField("updated_time")
private String updatedTime;
}
dao层
@Mapper
public interface UserMapper extends BaseMapper<User> {
List<User> selectByPasswordAndState(User user);
@Select("select * from mybatis_plus")
List<User> getAll();
}
mapper
<?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="com.dou.dao.UserMapper">
<select id="selectByPasswordAndState" resultType="com.dou.pojo.User" parameterType="com.dou.pojo.User">
SELECT id,userName,passWord,phone,tips,state,created_time AS createdTime,updated_time AS updatedTime
FROM mybatis_plus
WHERE state = #{state,jdbcType=INTEGER} AND password = #{passWord, jdbcType=VARCHAR}
</select>
</mapper>
测试
@SpringBootTest
class SpringbootMybatisplusApplicationTests {
@Resource
private UserMapper userMapper;
@Resource
private UserService userService;
/**
* 测试查询
*/
@Test
public void test(){
//测试通过id查询
User user = userMapper.selectById(1);
System.out.println("userMapper:" + user);
//测试通过条件查询
Map<String, Object> prams = new HashMap();
prams.put("username", "豆豆");
prams.put("state", "0");
List<User> users = userMapper.selectByMap(prams);
System.out.println(123);
System.out.println(users);
}
/**
*测试自定义查询
*/
@Test
public void test2() {
User userParam = new User();
userParam.setPassWord("123456");
userParam.setState(1);
List<User> users = userMapper.selectByPasswordAndState(userParam);
System.out.println(users);
}
@Test
public void test3(){
List<User> users = userMapper.getAll();
System.out.println(users);
}
}
配置详解来源于:https://blog.csdn.net/ck457897564/article/details/100173959
代码地址
https://gitee.com/shen_doudou/practice-code.git