您当前的位置: 首页 >  mybatis

ITKEY_

暂无认证

  • 0浏览

    0关注

    732博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Spring boot mybatis 简单示例

ITKEY_ 发布时间:2022-08-08 23:45:00 ,浏览量:0

我在Spring boot中集成mybatis竟然花了不少时间,真没想到。对着官网的文档做,竟然还花了这么多时间。所以我把过程尽可能的详细记录下来,给有需要的朋友。

需求

在spring boot 中使用mybatis。

官方文档

使用开源组件,最棒的文档就是官方文档了。然而我在看文档时发现了一些小坑,我看文档的顺序如下:

  • 《mybatis》 什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 https://mybatis.org/mybatis-3/zh/index.html 这个是讲mybatis的通用方法,不是针对spring的。我把这些文档看完,还是没有完美解决 spring boot中完美的集成mybatis。经过摸索才发现mybatis有个子项目《mybatis-spring》。

  • 《mybatis-spring》 什么是 MyBatis-Spring? MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。 https://mybatis.org/mybatis-3/zh/configuration.html

经过摸索和踩坑,我又发现这个项目还有一个子项目《mybatis-spring-boot-autoconfigure》。

  • 《mybatis-spring-boot-autoconfigure》 MyBatis-Spring-Boot-Starter 帮助您在Spring Boot之上快速构建 MyBatis 应用程序。 https://mybatis.org/spring/zh/boot.html

事实上对我的需要最有用的就是最后一个文档: https://mybatis.org/spring/zh/boot.html 看前面两个文档属实让人浪费了不少时间了。

实践记录

建议大家自行查看官方的文档来练习,如果遇到坑在对照这篇文章看看。 https://mybatis.org/spring/zh/boot.html 以下内容源于官网文档的练习。

源码下载

我把我测试的代码,打包分享给大家。

https://download.csdn.net/download/lxyoucan/86341756

建表

在这里以mysql为例操作。

-- auto-generated definition
create table CITY
(
    city_id   bigint auto_increment comment '城市ID'
        primary key,
    city_name varchar(50)              not null comment '城市名称',
    state    varchar(10) default 'CA' null comment '省'
)
    comment '城市';

insert into CITY (city_name, state) values ('北京','beijing');
insert into CITY (city_name, state) values ('南京','jiangsu');
insert into CITY (city_name, state) values ('上海','shanghai');

select * from CITY where state='beijing';
pom.xml

MyBatis-Spring-Boot/pom.xml



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.7.2
         
    
    cn.ycmit
    MyBatis-Spring-Boot
    0.0.1-SNAPSHOT
    MyBatis-Spring-Boot
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.2
        

        
        
            mysql
            mysql-connector-java
        

    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



实体类

MyBatis-Spring-Boot/src/main/java/cn/ycmit/mybatis/domain/City.java

package cn.ycmit.mybatis.domain;

public class City {
    private static final long serialVersionUID = 1L;

    private Long city_id;
    private String city_name;
    private String state;

    public City() {
    }

    public Long getCity_id() {
        return city_id;
    }

    public void setCity_id(Long city_id) {
        this.city_id = city_id;
    }

    public String getCity_name() {
        return city_name;
    }

    public void setCity_name(String city_name) {
        this.city_name = city_name;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    @Override
    public String toString() {
        return "City{" +
                "city_id=" + city_id +
                ", city_name='" + city_name + '\'' +
                ", state='" + state + '\'' +
                '}';
    }
}

mapper

MyBatis-Spring-Boot/src/main/java/cn/ycmit/mybatis/mapper/CityMapper.java

package cn.ycmit.mybatis.mapper;

import cn.ycmit.mybatis.domain.City;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface CityMapper {

    @Select("SELECT * FROM CITY WHERE state = #{state}")
    City findByState(@Param("state") String state);

}

启动类

MyBatis-Spring-Boot/src/main/java/cn/ycmit/mybatis/MyBatisSpringBootApplication.java 主要简化代码,便于理解,实际项目中一般不会这么写。这样写省的写测试类了。

package cn.ycmit.mybatis;

import cn.ycmit.mybatis.mapper.CityMapper;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyBatisSpringBootApplication implements CommandLineRunner {

    private final CityMapper cityMapper;

    public MyBatisSpringBootApplication(CityMapper cityMapper) {
        this.cityMapper = cityMapper;
    }

    public static void main(String[] args) {
        SpringApplication.run(MyBatisSpringBootApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println(this.cityMapper.findByState("beijing"));
    }

}

application.yml

MyBatis-Spring-Boot/src/main/resources/application.yml 主要是数据源相关的配置。

spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://128.0.0.1:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
    username: root
    password: itkey123457

controller注入演示

MyBatis-Spring-Boot/src/main/java/cn/ycmit/mybatis/controller/SqlApiController.java

package cn.ycmit.mybatis.controller;
import cn.ycmit.mybatis.domain.City;
import cn.ycmit.mybatis.mapper.CityMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SqlApiController {
    @Autowired
    CityMapper mapper;
    /**
     * 查询测试
     * @return
     */
    @RequestMapping("/city")
    public City city()
    {
        City city =mapper.findByState("beijing");
        return city;
    }
}

这样访问 http://localhost:8080/city 就会得到如下结果:

{"city_id":1,"city_name":"北京","state":"beijing"}
关注
打赏
1665243900
查看更多评论
立即登录/注册

微信扫码登录

0.0450s