MyBatis Plus 极简入门
MyBatis Plus 极简入门MyBatis Plus 是一款基于 MyBatis 数据持久化的国产开源框架,其核心功能就是简化 MyBatis 的开发,提高效率。MyBatis-Plus (opens new window)(简称MP)是一个MyBatis (opens new window)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。1.快速上手 MyB
MyBatis Plus 极简入门
MyBatis Plus 是一款基于 MyBatis 数据持久化的国产开源框架,其核心功能就是简化 MyBatis 的开发,提高效率。
MyBatis-Plus (opens new window)(简称MP)是一个MyBatis (opens new window)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。
1.快速上手 MyBatis Plus
SpringBoot 2.3.7 + MyBatis Plus 3.4.2(国产的开源框架,并没有接入到 Spring 官方孵化器中)
1、创建 SpringBoot 的空白项目,导入 MyBatis Plus 依赖;
说明:如果在【关系型数据库】中没有【MyBatis Plus Framework】这一选项,则需要手动地在 pom.xml
文件中引入 MyBatis Plus 的依赖。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
2、创建实体类
package com.trainingl.entity;
import lombok.Data;
import java.util.Date;
@Data
public class User {
private Integer id;
private String username;
private String password;
private Date loginTime;
}
3、创建 Mapper 接口
package com.trainingl.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.trainingl.entity.User;
//基础接口
public interface UserMapper extends BaseMapper<User> {
}
4、在 application.yml 中配置数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
5、测试类
package com.trainingl;
import com.trainingl.entity.User;
import com.trainingl.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class Springboot007ApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void contextLoads() {
//无查询条件
List<User> users = userMapper.selectList(null);
for (User user:users) {
System.out.println(user);
}
}
}
控制台显示内容:
MyBatis Plus 是对 MyBatis 的封装,自动完成 SQL 语句的执行以及结果集的映射,提供了很多接口,开发者可以直接调用后,拿到相应的结果,不需要定义 SQL 以及结果集到 Java 的映射。
2.常用注解
如果实体类中的成员变量和数据表中的字段不一致,可以通过注解的形式进行映射解决。
1、 @TableName
:映射数据表的表名;
2、 @TableId
:设置主键映射,value
映射主键字段名,type
设置主键类型,即主键的生成策略。Eg:@TableId(value = "id", type = IdType.AUTO)
值 | 描述 |
---|---|
AUTO | 数据库自增 |
NONE | 没有设置 |
INPUT | 需要开发者手动赋值 |
ASSIGN_ID | MP 分配 ID,Number / String 类型 |
ASSIGN_UUID | MP 分配 UUIN,String 类型 |
INPUT 如果开发者没有手动赋值,则数据库通过自增方式给主键赋值,如果开发者手动赋值,则直接存入该值;
AUTO 默认就是数据库自增,开发者无需赋值;
ASSGIN_ID MyBatis Plus 自动赋值,赋值采用的是雪花算法;
ASSIGN_UUID 主键的数据类型必须是 String,自动生成 UUID 进行赋值;
3、 @TableField
映射非主键字段,value 映射字段名,exist 表示是否为数据库段,若 exist = false
则表示实体类中的成员变量在数据库中没有对应的字段;
package com.trainingl.entity;
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.Data;
import java.util.Date;
@Data
@TableName("user")
//将实体类student与user表映射起来
public class Student {
//将实体类属性与表的字段映射起来
@TableId(value = "id", type = IdType.AUTO)
private Integer num;
@TableField("username")
private String name;
@TableField("password")
private String pwd;
@TableField(value = "login_time",exist = false)
private Date onlineTime;
}
3.字段自动填充
@TableField
映射其他字段时,fill
自动填充,MyBatis Plus 自动给字段赋值,常用于时间类型的数据。
比如:在用户信息或订单管理等场景下,经常会有两个字段 createTime
和 updateTime
来记录数据的增加和更新时间。
1、给表添加 create_time、update_time 字段;
2、实体类中添加成员变量;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;
@Data
@TableName("user")
//将实体类student与user表映射起来
public class Student {
//将实体类属性与表的字段映射起来
@TableId(value = "id", type = IdType.AUTO)
private Integer num;
@TableField("username")
private String name;
@TableField("password")
private String pwd;
@TableField(value = "create_time",fill = FieldFill.INSERT)
private Date createTime;
@TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
3、创建自动填充处理器
package com.trainingl.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class DataHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject){
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
4、测试类编写测试方法
import com.trainingl.entity.Student;
import com.trainingl.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class Springboot007ApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void updateData(){
Student student = new Student();
student.setName("张三");
student.setPwd("12306");
//调用插入方法
int count = userMapper.insert(student);
System.out.println(count);
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)