使用 MyBatis 来增删改查数据库

        MyBatis 是一个更简单完成程序和数据库交互的⼯具,也就是更简单的操作和读取数据库⼯具。

使用 MyBatis 来查询数据库

创建一个数据库和表

        在对数据库操作的前提得现有一个数据库,下面我提供了一个数据库:

-- 创建数据库
drop database if exists mycnblog;
create database mycnblog DEFAULT CHARACTER SET utf8mb4;

-- 使用数据数据
use mycnblog;

-- 创建表[用户表]
drop table if exists  userinfo;
create table userinfo(
    id int primary key auto_increment,
    username varchar(100) not null,
    password varchar(32) not null,
    photo varchar(500) default '',
    createtime timestamp default current_timestamp,
    updatetime timestamp default current_timestamp,
    `state` int default 1
) default charset 'utf8mb4';

-- 创建文章表
drop table if exists  articleinfo;
create table articleinfo(
    id int primary key auto_increment,
    title varchar(100) not null,
    content text not null,
    createtime timestamp default current_timestamp,
    updatetime timestamp default current_timestamp,
    uid int not null,
    rcount int not null default 1,
    `state` int default 1
)default charset 'utf8mb4';

-- 创建视频表
drop table if exists videoinfo;
create table videoinfo(
  	vid int primary key,
  	`title` varchar(250),
  	`url` varchar(1000),
		createtime timestamp default current_timestamp,
		updatetime timestamp default current_timestamp,
  	uid int
)default charset 'utf8mb4';

-- 添加一个用户信息
INSERT INTO `mycnblog`.`userinfo` (`id`, `username`, `password`, `photo`, `createtime`, `updatetime`, `state`) VALUES 
(1, 'admin', 'admin', '', '2023-12-06 17:10:48', '2023-12-06 17:10:48', 1);

-- 文章添加测试数据
insert into articleinfo(title,content,uid)
    values('Java','Java正文',1);
    
-- 添加视频
insert into videoinfo(vid,title,url,uid) values(1,'java title','http://www.baidu.com',1);

创建项目

设置配置文件

编写代码

添加用户实体类

这里实体类的属性需要和数据库的字段对应。

package com.example.mybatisdemo.entity;
import lombok.Data;
import java.time.LocalDateTime;

@Data
public class UserEntity {
    private Integer id;
    private String username;
    private String password;
    private String photo;
    private LocalDateTime createtime;
    private LocalDateTime updatetime;
    private Integer state;
}

添加 mapper 接口

数据持久层的接口定义:

添加 UserMapper.xml

数据持久层的实现,UserMapper.xml 查询所有⽤户的具体实现 SQL:

添加 Service 服务层

package com.example.mybatisdemo.service;

import com.example.mybatisdemo.entity.UserEntity;
import com.example.mybatisdemo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public List<UserEntity> getAll() {
        return userMapper.getAll();
    }
}

添加 Controller 控制器层

package com.example.mybatisdemo.controller;

import com.example.mybatisdemo.entity.UserEntity;
import com.example.mybatisdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/getAll")
    public List<UserEntity> getAll() {
        return userService.getAll();
    }
}

运行

小结:

使用 MyBatis 来删除数据库

userMapper:

    // 删除用户
    int delByID(@Param("id") Integer id);

userMapper.xml:

    <delete id="delByID">
        delete from userinfo where id = #{id}
    </delete>

使用 单元测试 来验证:

使用 MyBatis 来修改数据库

userMapper:

    // 修改密码
    int upDataByID(@Param("id") Integer id,
                   @Param("password") String password,
                   @Param("newPassword") String newPassword);

userMapper.xml:

<!--  修改操作只需要设置 id 表示对哪个方法进行操作,而不用强制设置返回值,返回值是表示影响的行数  -->
    <update id="upDataByID">
        update userinfo set password = #{newPassword} where id = #{id} and password = #{password}
    </update>

使用 单元测试 来验证:

使用 MyBatis 来添加数据库

默认情况下只返回受影响的行数

userMapper:

// 添加用户
    int addUser(UserEntity user);         // 只返回受修改的行数

userMapper.xml:

    <insert id="addUser">
        insert into userinfo(username, password) values (#{username}, #{password})
    </insert>

使用 单元测试 来验证:

要求返回自增主键 id

userMapper:

int addUserGetID(UserEntity user);    // 返回添加了当前用户的 id

userMapper.xml:

<!--  useGeneratedKeys 表示是否需要获取自增的信息(如果数据库没设置自增主键会报错),keyProperty 表示获取到的信息放到名为 id 的里面 -->
    <insert id="addUserGetID" useGeneratedKeys="true" keyProperty="id">
        insert into userinfo(username, password) values (#{username}, #{password})
    </insert>

使用 单元测试 来验证:

多张表查询

        现在有张 userinfo 用户表和 articleinfo 文章表,要根据文章查询当前的作者是谁。就需要 文章表中的 uid 和 用户表的 id 相匹配。

一对一

       假设现在一个用户只有一篇文章。

ArticleMapper:

// 根据文章 id 查看作者是谁
    // 返回的是一个带有 username 的文章
    ArticleEntityVO selectArticle(@Param("id") Integer id);

ArticleMapper.xml:

<select id="selectArticle" resultType="com.example.myBatisDemo.entity.vo.ArticleEntityVO">
        select a.*, u.username from articleinfo a left join userinfo u on u.id = a.uid where a.id = #{id}
    </select>

使用 单元测试 来验证:

一对多

        假设现在一个用户写了多篇文章。

 ArticleMapper:

// 查看当前这个作者写了几篇文章
    List<ArticleEntityVO> selectAll(@Param("uid") Integer uid);

ArticleMapper.xml:

<select id="selectAll" resultType="com.example.myBatisDemo.entity.vo.ArticleEntityVO">
        select a.*, u.username from articleinfo a left join userinfo u on u.id = a.uid where u.id = #{uid}
    </select>

使用 单元测试 来验证:

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值