深入浅出:MyBatis的使用方法及最佳实践

添加MyBatis框架⽀持

创建⼀个全新的 MyBatis 和 Spring Boot 的项⽬时添加引⽤
如下:
在这里插入图片描述

配置连接字符串和MyBatis

配置连接字符串

在application.properties中添加如下内容:

spring.datasource.url=jdbc:mysql://localhost:3306/demo?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=666666
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

配置 MyBatis 中的 XML 路径

依旧在application.properties中添加如下内容:

mybatis.mapper-locations=classpath:mapper/*Mapper.xml
# 配置mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件

在这里插入图片描述

添加业务代码

按照后端开发思路,进行mybatis查询用户的功能,流程图如下:
在这里插入图片描述

创建数据库和表

创建demo数据库

drop database if exists demo;
create database demo default character set utf8mb4;

使用数据库

use demo;

创建学生表

drop table if exists stu;
create  table stu(
    id int primary key auto_increment,
    name varchar(100) not null ,
    sex  varchar(10) not null

) default charset 'utf8mb4';

添加学生信息

insert into  demo.stu(id,name,sex) values (1,'zcx','男');

添加用户实体类

import lombok.Data;
@Data
public class User {
    
    
    private Integer id;
    private String name;
    private String sex;
}

添加 mapper 接⼝

import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
    
    
public List<User> getAll();
}

添加 UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
s.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisdemo.dao.UserMapper">
   
</mapper>
  • Mapper 标签:需要指定 namespace 属性,表示命名空间,需要写的是 Mapper 接口的全限定名(包括包路径)。namespace 的作用是指定该 Mapper XML 文件对应的 Mapper 接口,建立起二者之间的映射关系。
    在这里插入图片描述
    后续可在Mapper 标签中书写sql操作标签
    例如:
    添加查询操作
 <select id="getAll">
        select * from stu
    </select>

添加 Service层

import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserService {
    
    
    @Resource
    private UserMapper userMapper;
    public List<User> getAll() {
    
    
        return userMapper.getAll();
    }

}

添加 Controller层

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/u")
public class UserController {
    
    
    @Resource
    private UserService userService;
    @RequestMapping("/getall")
    public List<User> getAll(){
    
    
        return userService.getAll();
    }
}

使用浏览器进行查询访问
在这里插入图片描述

增删改操作

对⽤户的增加、删除和修改的操作,对应使⽤ MyBatis 的标签如下:

  • <insert>标签:插⼊语句
  • <update> 标签:修改语句
  • <delete>标签:删除语句

增加操作

controller 实现代码:

 @RequestMapping(value = "/add",method = RequestMethod.POST)
    public Integer add(@RequestBody User user){
    
    
        return userService.add(user);
    }

Service 实现代码:

  public Integer add(User user ){
    
    
        return userMapper.add(user);
    }

mapper interface:

Integer add(User user);

mapper.xml:

<insert id="add" >
        insert into stu(name,sex)
        values(#{
    
    name},#{
    
    sex})
    </insert>

使用Postman 添加访问:
在这里插入图片描述
也可返回自增主键,修改如下代码:

 @RequestMapping(value = "/add",method = RequestMethod.POST)
    public Integer add(@RequestBody User user){
    
    
        userService.add(user);
        return user.getId();
    }
<insert id="add" useGeneratedKeys="true" keyProperty="id">
        insert into stu(name,sex)
        values(#{
    
    name},#{
    
    sex})
    </insert>

在这里插入图片描述
在这里插入图片描述

  • useGeneratedKeys:这会令 MyBatis 使⽤ JDBC 的 getGeneratedKeys ⽅法来取出由数据库内部⽣成的主键,默认false
  • keyProperty:指定能够唯⼀识别对象的属性,MyBatis 会使⽤ getGeneratedKeys 的返回值或 insert 语句的 selectKey ⼦元素设置它的值

删除操作

修改controller:

 @RequestMapping(value = "/update",method = RequestMethod.POST)
    public Integer update( Integer id,  String name) {
    
    
        return userService.update(id, name);
    }

mapper.xml:

<update id="update">
        update stu set name=#{
    
    name} where id=#{
    
    id}
    </update>

其他代码修改跟增加操作相似
在这里插入图片描述
查看数据库发现修改成功
在这里插入图片描述

修改操作

修改controller:

@RequestMapping("/delById")
    public Integer delById( Integer id){
    
    
        return userService.delById(id);
    }

mapper.xml:

  <delete id="delById" parameterType="java.lang.Integer">
        delete from stu where id=#{
    
    id}
    </delete>

在这里插入图片描述
查看数据库,删除成功
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/st200112266/article/details/132235916