java mybatisplus
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java mybatisplus相关的知识,希望对你有一定的参考价值。
参考技术A java mybatisplus是什么,让我们一起了解一下?MyBatis-Plus(简称MP)是一个MyBatis的增强工具,提供很多实用的插件。在Mybatis的基础上,只做增强不做改变,为简化我们开发,提高工作效率而生。
MyBatis-Plus的有些什么特性?
侵入:MyBatis-Plus是在MyBatis的基础上增强的,而没有做任何的改变,所以在项目中引入MyBatis Plus 不会对你的现在的MyBatis构架有任何的影响。
依赖少:引入MyBatis-Plus要导入什么包呢?仅仅依赖MyBatis与MyBatis-Spring就可以了。
损耗小:启动之后,会自动注入基本的CRUD,性能基本无消耗,直接面向对象操作。
支持热加载:Mapper对应的XML支持热加载,对于简单的CRUD操作,甚至可以无XML启动。
支持代码生成:采用代码或Maven插件可快速生成Mapper、Model、Service、Controller层代码,支持模板引擎,更 提供了超多的自定义配置让你使用。
实战操作:新建springboot项目,添加依赖至pom.xml。 org.springframework.boot spring-boot-starter-parent 2.2.6.RELEASE org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.projectlombok lombok true com.baomidou mybatis-plus-boot-starter 3.3.1.tmp mysql mysql-connector-java 5.1.26
Java--MybatisPlus表和列;自定义SQL
阅读前可先参考
https://blog.csdn.net/MinggeQingchun/article/details/126521908
https://blog.csdn.net/MinggeQingchun/article/details/126533536
一、表和列
1、表名
@TableName 注解
定义实体类时,默认需要和数据库中的表名保持一致;如果不一致可以使用 @TableName注解来进行说明
@TableName(value = "数据库表名")
创建表 user_address
DROP TABLE IF EXISTS user_address;
CREATE TABLE user_address(
address_id int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
address_provice varchar(50) NULL DEFAULT NULL COMMENT '省份',
address_city varchar(50) NULL DEFAULT NULL COMMENT '城市',
address_street varchar(50) NULL DEFAULT NULL COMMENT '街道',
address_code int(11) NULL DEFAULT NULL COMMENT '行政编码',
PRIMARY KEY (address_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
编写entity实体类
/**
* @TableName(value="表名")
* 位置:在类定义的上面
*/
@TableName(value = "user_address")
public class Address
//指定主键
@TableId(value="address_id",type = IdType.AUTO)
private Integer id;
private String provice;
private String city;
private String street;
private String code;
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
value | String | 否 | "" | 表名 |
schema | String | 否 | "" | schema |
keepGlobalPrefix | boolean | 否 | false | 是否保持使用全局的 tablePrefix 的值(当全局 tablePrefix 生效时) |
resultMap | String | 否 | "" | xml 中 resultMap 的 id(用于满足特定类型的实体类对象绑定) |
autoResultMap | boolean | 否 | false | 是否自动构建 resultMap 并使用(如果设置 resultMap 则不会进行 resultMap 的自动构建与注入) |
excludeProperty | String[] | 否 | 需要排除的属性名 @since 3.3.1 |
2、列名
@TableField 注解
/**
* @TableField : 指定属性和列名的对应关系。
* 属性: value 指定列名
*/
@TableField(value = "address_provice")
private String provice;
@TableField(value = "address_city")
private String city;
@TableField(value = "address_street")
private String street;
@TableField(value = "address_code")
private String code;
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
value | String | 否 | "" | 数据库字段名 |
exist | boolean | 否 | true | 是否为数据库表字段 |
condition | String | 否 | "" | 字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#%s ,参考(opens new window) |
update | String | 否 | "" | 字段 update set 部分注入,例如:当在version字段上注解update="%s+1" 表示更新时会 set version=version+1 (该属性优先级高于 el 属性) |
insertStrategy | Enum | 否 | FieldStrategy.DEFAULT | 举例:NOT_NULLinsert into table_a(<if test="columnProperty != null">column</if>) values (<if test="columnProperty != null">#columnProperty</if>) |
updateStrategy | Enum | 否 | FieldStrategy.DEFAULT | 举例:IGNOREDupdate table_a set column=#columnProperty |
whereStrategy | Enum | 否 | FieldStrategy.DEFAULT | 举例:NOT_EMPTYwhere <if test="columnProperty != null and columnProperty!=''">column=#columnProperty</if> |
fill | Enum | 否 | FieldFill.DEFAULT | 字段自动填充策略 |
select | boolean | 否 | true | 是否进行 select 查询 |
keepGlobalFormat | boolean | 否 | false | 是否保持使用全局的 format 进行处理 |
jdbcType | JdbcType | 否 | JdbcType.UNDEFINED | JDBC 类型 (该默认值不代表会按照该值生效) |
typeHandler | Class<? extends TypeHandler> | 否 | UnknownTypeHandler.class | 类型处理器 (该默认值不代表会按照该值生效) |
numericScale | String | 否 | "" | 指定小数点后保留的位数 |
3、主键
@TableId 注解
//指定主键
@TableId(value="address_id",type = IdType.AUTO)
private Integer id;
IdType 类型
public enum IdType
AUTO(0),
NONE(1),
INPUT(2),
ASSIGN_ID(3),
ASSIGN_UUID(4);
application.yml配置文件设置
mybatis-plus:
global-config:
db-config:
# id生成策略 auto为数据库自增
id-type: auto
值 | 描述 |
---|---|
AUTO | 数据库 ID 自增 |
NONE | 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) |
INPUT | insert 前自行 set 主键值 |
ASSIGN_ID | 分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator 的方法nextId (默认实现类为DefaultIdentifierGenerator 雪花算法) |
ASSIGN_UUID | 分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator 的方法nextUUID (默认 default 方法) |
分布式全局唯一 ID 长整型类型(please use ASSIGN_ID ) | |
32 位 UUID 字符串(please use ASSIGN_UUID ) | |
分布式全局唯一 ID 字符串类型(please use ASSIGN_ID ) |
测试
@Test
public void testInsert()
Address address = new Address();
address.setCity("上海");
address.setStreet("南京路");
address.setCode("020");
//INSERT INTO user_address ( address_city, address_street, address_code ) VALUES ( ?, ?, ? )
int rows = addressMapper.insert(address);
System.out.println("insert address结果:"+rows);
4、驼峰命名
默认情况下MP会开启字段名列名的驼峰映射, 即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射
application.yml配置文件设置
mybatis-plus:
configuration:
#是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射
map-underscore-to-camel-case: false
1、建表goods
DROP TABLE IF EXISTS goods;
CREATE TABLE goods(
good_id int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
good_name varchar(50) NULL DEFAULT NULL COMMENT '商品名字',
good_cate varchar(50) NULL DEFAULT NULL COMMENT '商品类别',
PRIMARY KEY (good_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、创建实体类entity
@TableName(value = "goods")
@Data
public class Goods
//定义属性
@TableId(value="good_id",type = IdType.AUTO)
private Integer goodId;
private String goodName;
private String goodCate;
@Override
public String toString()
return "Goods" +
"goodId=" + goodId +
", goodName='" + goodName + '\\'' +
", goodCate='" + goodCate + '\\'' +
'';
3、创建mapper
/**
* 自定义Mapper,就是Dao接口
* 1、要实现BaseMapper
* 2、指定实体类
*
* BaseMapper是MP框架中的对象,定义19个操作方法(CRUD)
*/
public interface GoodMapper extends BaseMapper<Goods>
4、测试
@Test
public void testInsert()
Goods goods = new Goods();
goods.setGoodName("iPhone 12");
goods.setGoodCate("手机");
//INSERT INTO goods ( good_name, good_cate ) VALUES ( ?, ? )
int rows = goodMapper.insert(goods);
System.out.println("insert good结果:"+rows);
二、自定义SQL
1、建表
DROP TABLE IF EXISTS student;
CREATE TABLE student(
id int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
name varchar(50) NULL DEFAULT NULL COMMENT '学生名字',
age int(11) NULL DEFAULT NULL COMMENT '年龄',
email varchar(50) NULL DEFAULT NULL COMMENT '邮箱',
status int(11) NULL DEFAULT NULL COMMENT '状态',
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、创建实体entity
@Data
public class Student
//定义属性
@TableId(value="id",type = IdType.AUTO)
private Integer id;
private String name;
private Integer age;
private String email;
private Integer status;
@Override
public String toString()
return "Student" +
"id=" + id +
", name='" + name + '\\'' +
", age=" + age +
", email='" + email + '\\'' +
", status=" + status +
'';
3、创建mapper
/**
* 自定义Sql
*/
public interface StudentMapper extends BaseMapper<Student>
//自定义方法
public int insertStudent(Student student);
public Student selectStudentById(Integer id);
public List<Student> selectByName(String name);
4、创建SQL映射xml文件
<?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.company.mapper.StudentMapper">
<insert id="insertStudent">
insert into student(name,age,email,status) values(#name,#age,#email,#status)
</insert>
<select id="selectStudentById" resultType="com.company.entity.Student">
select id,name,age,email,status from student where id=#studentId
</select>
<select id="selectByName" resultType="com.company.entity.Student">
select id,name,age,email,status from student where name=#name
</select>
</mapper>
5、配置xml文件
mybatis-plus:
#配置xml文件位置
mapper-locations: classpath*:mapper/*Mapper.xml
6、测试
@Test
public void testInsertStudent()
Student student = new Student();
student.setName("zhangsan");
student.setAge(18);
student.setEmail("zhangsan@163.com");
student.setStatus(2);
int rows = studentMapper.insert(student);
System.out.println("insert Student rows:"+rows);
@Test
public void testSelect()
Student student = studentMapper.selectById(1);
System.out.println("testSelect:"+student);
以上是关于java mybatisplus的主要内容,如果未能解决你的问题,请参考以下文章