写点什么

SpringBoot 整合 MyBatis

作者:
  • 2022 年 8 月 22 日
    河南
  • 本文字数:3770 字

    阅读完需:约 12 分钟

SpringBoot 整合 MyBatis

前言

文本是基于 MVC 前后端分离模式的一个 SpringBoot 整合 MyBatis 的项目,不过没有用到前端页面,使用了更方便的 Apifox 请求工具。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java 对象)映射成数据库中的记录。

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。

1、创建模块

1、创建 SpringBoot 模块



2、勾选 Mysql Driver,Mybatis Framework



2、坐标导入

因为刚刚以及勾选了 mybatis,mysql,所以他们已经添加到了 pom.xml 中,下面导入其他坐标,如果有记不住的坐标可以在 maven 搜索即可,官网如下:https://mvnrepository.com/


  • lombok 减少 get、set 方法的编写

  • druid 数据库连接池

例如:

lombok,直接在官网上搜索即可,然后复制下来坐标到 pom.xml,Lombok 项目是一个 java 库,它可以自动插入到编辑器和构建工具中,增强 java 的性能。不需要再写 getter、setter 或 equals 方法,只要有一个注解,你的类就有一个功能齐全的构建器、自动记录变量等等。


    <!--  数据库连接池 -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>1.2.4</version>        </dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
复制代码

3、项目目录构建


4、编写代码

1、定义实体类(与数据库一一对应)



package com.example.mybatis.pojo;
import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;
@Data #lombok的注解减少getset方法@AllArgsConstructor@NoArgsConstructorpublic class User { private Integer id; private String name; private String password;
}
复制代码


2、mapper


package com.example.mybatis.mapper;

import com.example.mybatis.pojo.User;import org.apache.ibatis.annotations.Mapper;import org.springframework.stereotype.Repository;

import java.util.List;
@Mapper // 告诉springboot这是一个mybatis的mapepr类@Repository // 将userdao交由spring容齐管理public interface UserMapper {
// 查询所有用户 public List<User> listUser();
}
复制代码


3、service 接口


package com.example.mybatis.service;

import com.example.mybatis.pojo.User;
import java.util.List;
public interface UserService {
// 查询所有用户 public List<User> listUser();
}
复制代码


4、service 接口的实现类 serviceimpl


package com.example.mybatis.service.impl;
import com.example.mybatis.mapper.UserMapper;import com.example.mybatis.pojo.User;import com.example.mybatis.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;

import java.util.List;
@Service // 交由spring容齐管理public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper;
@Override public List<User> listUser() { return userMapper.listUser(); }
}
复制代码


5、Controller


package com.example.mybatis.controller;

import com.example.mybatis.pojo.User;import com.example.mybatis.service.UserService;import com.example.mybatis.untils.JSONResult;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestControllerpublic class UserController {
@Autowired private UserService userService;
@GetMapping("/users") public JSONResult test(){
return JSONResult.ok(userService.listUser());
}
}
复制代码


6、工具类 JSONResult


package com.example.mybatis.untils;
/** * * @Title: JSONResult.java * @Description: 自定义响应数据结构 * 本类可提供给 H5/ios/安卓/公众号/小程序 使用 * 前端接受此类数据(json object)后,可自行根据业务去实现相关功能 * 200:表示成功 * 500:表示错误,错误信息在msg字段中 * 501:bean验证错误,不管多少个错误都以map形式返回 * 502:拦截器拦截到用户token出错 * 555:异常抛出信息 * 556: 用户qq校验异常 * 557: 校验用户是否在CAS登录,用户门票的校验 * @Copyright: Copyright (c) 2020 */public class JSONResult {
// 响应业务状态 private Integer status;
// 响应消息 private String msg;
// 响应中的数据 private Object data; private String ok; // 不使用
public static JSONResult build(Integer status, String msg, Object data) { return new JSONResult(status, msg, data); }
public static JSONResult build(Integer status, String msg, Object data, String ok) { return new JSONResult(status, msg, data, ok); } public static JSONResult ok(Object data) { return new JSONResult(data); }
public static JSONResult ok() { return new JSONResult(null); } public static JSONResult errorMsg(String msg) { return new JSONResult(500, msg, null); }
public static JSONResult errorUserTicket(String msg) { return new JSONResult(557, msg, null); } public static JSONResult errorMap(Object data) { return new JSONResult(501, "error", data); } public static JSONResult errorTokenMsg(String msg) { return new JSONResult(502, msg, null); } public static JSONResult errorException(String msg) { return new JSONResult(555, msg, null); } public static JSONResult errorUserQQ(String msg) { return new JSONResult(556, msg, null); }
public JSONResult() {
}
public JSONResult(Integer status, String msg, Object data) { this.status = status; this.msg = msg; this.data = data; } public JSONResult(Integer status, String msg, Object data, String ok) { this.status = status; this.msg = msg; this.data = data; this.ok = ok; }
public JSONResult(Object data) { this.status = 200; this.msg = "OK"; this.data = data; }
public Boolean isOK() { return this.status == 200; }
public Integer getStatus() { return status; }
public void setStatus(Integer status) { this.status = status; }
public String getMsg() { return msg; }
public void setMsg(String msg) { this.msg = msg; }
public Object getData() { return data; }
public void setData(Object data) { this.data = data; }
public String getOk() { return ok; }
public void setOk(String ok) { this.ok = ok; }
}
复制代码


7、配置文件


server:  port: 8080
# 数据库数据源spring: datasource: type: com.alibaba.druid.pool.DruidDataSource # 数据源类型 username: root password: xmpkj url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT driver-class-name: com.mysql.cj.jdbc.Driver
mybatis: mapper-locations: classpath:/mapper/*.xml # xml文件
复制代码


8、mapper.xml


<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.mapper.UserMapper">
<select id="listUser" resultType="com.example.mybatis.pojo.User"> select *from user </select>
</mapper>
复制代码

5、测试

运行项目,打开 Postman 或者 Apifox 访问


localhost:8080/users
复制代码


成功从数据库查到信息


总结

SpringBoot+MyBatis 使用起来更方便,更舒服。掌握 SpingBoot 整合 MyBatis,要比 Spring 整合简单的多,少了很多繁琐的配置。

发布于: 刚刚阅读数: 3
用户头像

关注

在校大三学生一枚 2022.08.02 加入

喜欢学习编程,擅长技术栈JAVA

评论

发布
暂无评论
SpringBoot 整合 MyBatis_mybatis_斯_InfoQ写作社区