MyBatisPlus数据库基本操作学习——Spring Boot后端学习(四)

Spring Boot后端学习(四)

运行环境

jdk 1.8
spring boot 2.6.1
maven 3.9.1
编译器 idea
参照1天搞定SpringBoot+Vue全栈开发的学习笔记

ORM介绍

ORM即对象关系映射,用于解决面向对象与关系数据库存在的互不匹配现象的一种技术,将对象和数据库之中的记录完成映射,包括存储、存取

在这里插入图片描述

MyBatis-Plus介绍

ORM的框架,是MyBatis的增强

添加依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.20</version>
</dependency>

配置数据库相关信息

在application.properties中添加相关配置

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/databasename?useSSL=false
spring.datasource.username=root
spring.datasource.password=password
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

同时搭建好MySQL数据库,主要操作数据库中User表的内容

在这里插入图片描述

添加@MapperScan注解

需要在启动类MpddemoApplication中添加@MapperScan注解,用于扫描Mapper文件夹
数据库相关的操作都会放置在Mapper包下面

@MapperScan("com.example.mpddemo.mapper")

MyBatis-Plus CRUD操作

Mybatis学习

定义User实体类,具体字段如下,通过alt+insert选择Getter and Setter快速搭建方法

private int id;
private String username;
private String password;
private String birthday;

Mybatis已经实现数据库方法了,只需要定义接口声明方法就行,对SQL语句通过注解完成

注解功能
@Insert
@Delete
@Update
@Select
@Result实现结果集封装
@Results可以与@Result一起使用,封装多个结果集
@One实现一对一结果集封装
@Many实现一对多结果集封装
UserMapper部署

@Mapper注解说明这是一个Mapper组件
@Select自动寻找配置好的数据库并自动将数据封装成User对象,存入List中
其他注解的功能

UserMapper接口部署,传递参数有两种形式:

  1. 传递的是单个参数,#{id}可以将方法中传递过来的id参数填充到SQL语句中
  2. 传递的是一个封装类,只要确保#{username},#{password},#{birthday}都是user类中存在的一样的属性名称就行
@Mapper
public interface UserMapper {
    @Select("select * from user")
    public List<User> getAll();

    @Insert("insert into user values(#{id},#{username},#{password},#{birthday})")
    public int insert(User user);

    @Delete("delete from user where id = #{id}")
    int delete(int id);

    @Update("update user set username = #{username}, password = #{password}, birthday = #{birthday} where id = #{id})")
    int update(User user);

    @Select("select # from user where id = #{id}")
    List<User> find();
}
查询用户实例

@Autowired注解可以将接口UserMapper通过框架自动实例化的对象注入下面的userMapper

@RestController
public class UserController {
    //声明一个Mapper
    @Autowired
    private UserMapper userMapper;

    @GetMapping("/user")
    public List query(){
        List<User> list = userMapper.getAll();
        System.out.println(list);
        return list;
    }
}

浏览器输入地址http://localhost:8080/user可以看到返回的JSON格式数据

在这里插入图片描述

后台打印的数据如下所示

> Preparing: select * from user
> Parameters:
<
Columns: id, username, password, birthday
<
Row: 3, 小美, 12344, 2015-06-07
<== Row: 45, 小帅, 10101, 2014-04-15
<== Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fa07d0]
[User{id=3’,username=‘小美’,password=‘12344’,birthday=‘2015-06-07’}, User{id=45’,username=‘小帅’,password=‘10101’,birthday=‘2014-04-15’}]

添加用户实例

在UserController中添加

@PostMapping("/user")
public String save(User user){
    int i = userMapper.insert(user);
    if(i > 0){
        return "插入成功";
    }
    else{
        return "插入失败";
    }
}

通过postman给后台传递参数,响应"插入成功"

由于没有传递id属性值,且根据数据表id字段的自增特性,最终呈现出的数据表结果如下

在这里插入图片描述

Mybatis-Plus

Mybatis-Plus在Mybatis基础上,进一步简化了对数据库的操作
BaseMapper类提供了数据库的增删改查方法,可引用BaseMapper类中的方法进行数据库的操作

前提是数据表的名称一定要和实体类一致,即都要是User

如果不一致,可以在实体类User前面添加@TableName(“TableName”)注解

UserMapper接口只需要继承BaseMapper类就可以

BaseMapper类部分方法
int insert(T entity);
//根据id删除
int deleteById(Serializable id);
//根据map表字段条件删除
int deleteByMap(@Param("cm") Map<String, Object> columnMap);
//根据entity条件删除
int delete(@Param("ew") Wrapper<T> queryWrapper);
//根据id批量删除
int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
//过呢据id修改
int updateById(@Param("et") T entity);
//根据whereEntity条件修改记录
int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
//根据id选择激励
T selectById(Serializable id);
//根据id批量查询
List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
查询用户实例

UserMapper部署

@Mapper
public interface UserMapper extends BaseMapper<User> { }

UserController部署

@RestController
public class UserController {
    //声明一个Mapper
    @Autowired
    private UserMapper userMapper;

    @GetMapping("/user")
    public List query(){
        //查询所有用户,null代表没有查询条件
        List<User> list = userMapper.selectList(null);
        System.out.println(list);
        return list;
    }

    @PostMapping("/user")
    public String save(User user){
        int i = userMapper.insert(user);
        if(i > 0){return "插入成功";}
        else{return "插入失败";}
    }
}
Mybatis注解

@TableName加入实体类前面,可以解决实体类名称与数据表名称不一致的问题

@TableId加入实体类主键前面,可以为其添加数据表字段的一些属性
@TableId(type = IdType.AUTO) 为主键添加自增属性,该属性对记录的修改会存在两种情况

没有添加自增属性

前端向后台发送这一条记录信息

在这里插入图片描述

可以看出我们插入的记录中id默认为0

在这里插入图片描述

但由于数据表中对于id字段的属性设置了自增,因此在数据表中看到新一条记录id=50

添加注解后@TableId(type = IdType.AUTO)后

前端发送记录

在这里插入图片描述

可以看到后台返回的记录发生了变化

在这里插入图片描述

IdType所具备的其他属性值如下,通过MyBatisPlus提供的注解,可以更轻松地完成数据库单表的操作

描述
AUTO数据库 ID 自增
NONE无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
INPUTinsert 前自行 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 方法)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值