Spring Boot集成MyBatis实训

实训任务步骤

  • 项目结构

  • 依赖引入:pom.xml

  • 全局配置文件:application.yml

  • 实体建模

    • 实体类

    • 数据库脚本工作(schema.sql、data.sql)

  • 创建Mapper接口

  • 完成*Mapper.xml的sql封装

  • 完成服务层接口定义(*Servic)和接口实现(*ServiceImpl)

  • 完成Controller实现

  • 完成测试验证

具体实施过程

项目结构

引入依赖

<!--MySQL依赖-->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>
<!--MyBatis依赖-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.2</version>
</dependency>

全局配置文件

  • 在文件中完成MySQL数据库连接及连接池配置工作

  • 通过SQL初始化配置进行相关表结构和基础数据的创建

  • 配置MyBatis映射器的路径

  • 日志

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/2024mybatisjunit?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: admin
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    # hikari连接池配置
    hikari:
      minimum-idle: 5 #最小空闲连接数量
      connection-test-query: SELECT 1 #连接测试
      maximum-pool-size: 20 #连接池最大连接数,默认是10
      auto-commit: true #自动提交
      pool-name: dataHikariCP #连接池名称
      max-lifetime: 600000 #连接最大存活时间600000毫秒(10分钟)
      connection-timeout: 30000 #连接超时时间,0.5分钟
  sql:
    init:
      schema-locations: classpath:db/schema.sql
      mode: always
      continue-on-error: true
      data-locations: classpath:db/data.sql
logging:
  level:
    demo.mybatis: debug
mybatis:
  # 配置xml文件位置
  mapper-locations: classpath:mapper/*.xml

实体建模

实体类创建,其属性和表结构保持一致

package mybatis.demo.entity;
import lombok.Data;
​
/*品牌*/
@Data
public class Brand {
    private int id;
    private String name;
}

DAO层Mapper接口

通过MyBatis的@Mapper注解定义接口方法

package mybatis.demo.mapper;
​
import mybatis.demo.entity.Brand;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
​
/*持久化层*/
@Mapper
public interface BrandMapper {
    List<Brand> getAllBrand();
    Brand getBrandById(Integer id);
    int addBrand(Brand entity);
    int updateBrand(Brand entity);
    int deleteBrand(Integer id);
}

Mapper映射器

  • 通过namespace,完成与DAO接口映射

  • 通过id,完成与DAO接口方法的映射及绑定,并将SQL语句与方法进行实际绑定

  • 通过#实现防SQL注入

  • 通过resultType指定查询结构的数据类型,MyBatis会自动将结果映射为JavaBean中的属性

<?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="mybatis.demo.mapper.BrandMapper">
​
    <select id="getAllBrand" resultType="mybatis.demo.entity.Brand">
        select * from brand
    </select>
​
    <select id="getBrandById" resultType="mybatis.demo.entity.Brand">
        select * from brand where id=#{id}
    </select>
​
    <insert id="addBrand">
        insert into brand(name) values (#{name})
    </insert>
​
    <update id="updateBrand">
        update brand set name=#{name} where id=#{id}
    </update>
​
    <delete id="deleteBrand">
        delete from brand where id=#{id}
    </delete>
</mapper>

服务层

  • 本次服务层为Service接口+ServiceImpl实现类方式(使业务逻辑更易于扩展)

  • 定义服务接口(*Service.java

  • 完成服务接口实现类(*ServiceImpl.java),构造函数自动注入DAO层

package mybatis.demo.service;
​
import mybatis.demo.entity.Brand;
import java.util.List;
​
/*服务层接口定义*/
public interface BrandService {
    List<Brand> getAllBrand();
    Brand getBrandById(Integer id);
    int addBrand(Brand entity);
    int updateBrand(Brand entity);
    int deleteBrand(Integer id);
}
package mybatis.demo.service.impl;
​
import mybatis.demo.entity.Brand;
import mybatis.demo.mapper.BrandMapper;
import mybatis.demo.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
​
@Service
public class BrandServiceImpl implements BrandService {
    private final BrandMapper brandMapper;
    @Autowired
    public BrandServiceImpl(BrandMapper mapper){
        this.brandMapper=mapper;
    }
    @Override
    public List<Brand> getAllBrand() {
        return brandMapper.getAllBrand();
    }
​
    @Override
    public Brand getBrandById(Integer id) {
        return brandMapper.getBrandById(id);
    }
​
    @Override
    public int addBrand(Brand entity) {
        return brandMapper.addBrand(entity);
    }
​
    @Override
    public int updateBrand(Brand entity) {
        return brandMapper.updateBrand(entity);
    }
​
    @Override
    public int deleteBrand(Integer id) {
        return brandMapper.deleteBrand(id);
    }
}
 

控制层

  • 通过@RequestMapping完成URL路径映射

  • 构造函数自动注入Service层

  • HTTP方法映射(@GetMapping、@PostMapping、@PutMapping、@DeleteMapping等)

  • @GetMapping:处理GET请求,用于向Server获取数据

  • @PostMapping:处理POST请求,用于向Server提交数据,一般用于新增数据

  • @PutMapping:和POST请求相同,用于向Server提交数据,一般用于更新数据

  • @DeleteMapping:处理DELETE请求,用于向Server删除数据

  • @PathVariable:URL绑定占位符,完成URL和入口参数的绑定

  • @RequestBody:接收调用方传递给后端的JSON字符串中的数据,一般使用POST方式完成数据提交。

  • @RequestBody和@RequestParam可以同时使用,区别是@RequestBody只能有一个,@RequestParam可以有多个

package mybatis.demo.controller;
​
import mybatis.demo.entity.Brand;
import mybatis.demo.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
​
@RestController
@RequestMapping("/brand")
public class BrandController {
    private BrandService brandService;
    @Autowired
    public BrandController(BrandService service){
        this.brandService=service;
    }
​
    @GetMapping("/list")
    public List<Brand> list(){
        return brandService.getAllBrand();
    }
​
    @GetMapping("/detail/{id}")
    public Brand detail(@PathVariable("id")int id){
        return brandService.getBrandById(id);
    }
​
    @PostMapping("/insert")
    public String insert(@RequestBody Brand entity){
        return brandService.addBrand(entity)>0?"Success":"Fail";
    }
​
    @PutMapping("/edit")
    public String edit(@RequestBody Brand entity){
        return brandService.updateBrand(entity)>0?"Success":"Fail";
    }
​
    @DeleteMapping("/delete/{id}")
    public String delete(@PathVariable("id") int id){
        return brandService.deleteBrand(id)>0?"Success":"Fail";
    }
}

Postman接口测试

  • 使用Postman完成各接口的测试及验证

  • 注意向Server提交数据时的方式及格式(图中红框标识)

获取所有数据

根据ID获取一行数据

新增一行数据

修改数据

删除数据

知识小结

  • 掌握MyBatis框架的使用。MyBatis是一轻量级持久层框架,通过配置SQL映射文件方便地实现对库操作。

  • Mapper映射器,可以灵活地编写SQL语句,其中运用到MyBatis动态SQL使用,它的标签和数据库是一一对应的,需要进一步练习、熟悉和掌握。

  • 学习Spring Boot与MyBatis集成方式。通过使用Spring Boot Starter依赖,快速集成MyBatis搭建给予Spring Boot的数据库访问层。

  • 学习掌握如何在Spring Boot中配置数据源、引入MyBatis依赖、创建Mapper接口和实现其SQL映射的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值