Spring Boot Mybatis 入门示例


基于Spring Boot 2.3.4,Junit5

步骤说明

    整个工程的最终目录结构如下,添加文件或者新建的目录的参考:

└─src├─main│  ├─java│  │  └─com│  │      └─mall│  │          └─MallWeb│  │              ├─controllers│  │              ├─mapper│  │              ├─model│  │              └─services│  └─resources│      └─mybatis│          └─mapper└─test└─java└─com└─mall└─MallWeb└─mapper

数据库初始化语句

    数据库表的初始化语句全部在下面,也可以根据自己的情况进行修改

CREATE DATABASE  IF NOT EXISTS `mall`;USE `mall`;CREATE TABLE IF NOT EXISTS `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(16) NOT NULL,`password` varchar(16) NOT NULL,`phoneNumber` varchar(15) NOT NULL,`money` int(11) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

build.gradle:依赖添加

    需要添加下面依赖

  • ‘mysql:mysql-connector-java:8.0.14’
  • ‘org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0’
  • ‘org.projectlombok:lombok:1.16.16’
dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'//  MySQL数据库需要implementation 'mysql:mysql-connector-java:8.0.14'//    spring mybatisimplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0'//    lombok,用于Entity的自动get和set方法生成,不用自己写一大推的get和set方法implementation 'org.projectlombok:lombok:1.16.16'testImplementation('org.springframework.boot:spring-boot-starter-test') {exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'}
}

application.properties:配置添加

    配置文件的编写需要注意参数的配置,比如SSL那个一般要设置为false,driver-class-name也要注意一下,不要写错了,文件的大致内容如下:

# mybatis的config文件位置配置
mybatis.config-location=classpath:mybatis/mybatis-config.xml
# 各个表的xml文件位置配置
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=com.neo.model# 数据库连接信息配置,自行更换数据库,用户名和密码
spring.datasource.url=jdbc:mysql://localhost:3306/mall?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8\&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#springboot + mybatis设置将SQL语句打印到控制台
logging.level.com.mall.MallWeb.mapper=debug

代码编写

入口环境配置Mapper扫描配置

    在入口函数添加Mapper扫描配置,这样不必在每个Mapper上加上Mapper注解,大致如下:

package com.mall.MallWeb;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author lw*/
@SpringBootApplication
@MapperScan("com.mall.MallWeb.mapper")
public class MallWebApplication {public static void main(String[] args) {SpringApplication.run(MallWebApplication.class, args);}}

编写实体类

    在代码目录下创建model文件夹,用于存储实体(数据库表)。编辑实体类,大致如下:

ppackage com.mall.MallWeb.model;import java.io.Serializable;/*** @author lw*/
public class User implements Serializable {private Long id;private String name;private String password;private String phoneNumber;private Long money;public User(String name, String password, String phoneNumber) {this.name = name;this.password = password;this.phoneNumber = phoneNumber;this.money = 0L;}@Overridepublic String toString() {return id + "::" + name + "::" + password + "::" + phoneNumber + "::" + money;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}public Long getMoney() {return money;}public void setMoney(Long money) {this.money = money;}}

Mapper接口类

    新建Mapper文件夹,里面放Mapper相关的接口类。编写Mapper接口类,大致内容如下,@Repository解决idea里面的bean使用错误

package com.mall.MallWeb.mapper;import com.mall.MallWeb.model.User;
import org.springframework.stereotype.Repository;import java.util.List;/*** @author lw*/
@Repository
public interface UserMapper {List<User> queryAll();User queryOne(Long id);void add(User user);void update(User user);
}

Mytatis配置文件mybatis-config.xml

    新建文件夹 resource/mybatis,下面新建:mybatis-config.xml 文件,写入下面的内容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><typeAliases><typeAlias alias="Integer" type="java.lang.Integer" /><typeAlias alias="Long" type="java.lang.Long" /><typeAlias alias="HashMap" type="java.util.HashMap" /><typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" /><typeAlias alias="ArrayList" type="java.util.ArrayList" /><typeAlias alias="LinkedList" type="java.util.LinkedList" /></typeAliases>
</configuration>

表users查询配置文件User.xml

    新建文件夹 resouce/mybatis/mapper,新建文件:User.xml,输入下面的内容:

<?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="com.mall.MallWeb.mapper.UserMapper" ><resultMap id="BaseResultMap" type="com.mall.MallWeb.model.User" ><id column="id" property="id" jdbcType="BIGINT" /><result column="name" property="name" jdbcType="VARCHAR" /><result column="password" property="password" jdbcType="VARCHAR" /><result column="phoneNumber" property="phoneNumber" jdbcType="VARCHAR"/><result column="money" property="money" jdbcType="BIGINT" /></resultMap><sql id="Base_Column_List" >id, name, password, phoneNumber, money</sql><insert id="add" parameterType="com.mall.MallWeb.mapper.UserMapper" useGeneratedKeys="true" keyProperty="id">INSERT INTOusers(name, password, phoneNumber, money)VALUES(#{name}, #{password}, #{phoneNumber}, #{money})</insert><update id="update" parameterType="com.mall.MallWeb.model.User">UPDATEusersSET<trim suffixOverrides="," suffix="WHERE id = #{id}"><if test="name != null">name = #{name},</if><if test="password != null">password = #{password},</if><if test="phoneNumber != null">phoneNumber = #{phoneNumber},</if><if test="money != null">money = #{money},</if></trim></update><select id="queryAll" resultMap="BaseResultMap">SELECT<include refid="Base_Column_List" />FROM users</select><select id="queryOne" resultType="com.mall.MallWeb.model.User" parameterType="java.lang.Long">SELECT<include refid="Base_Column_List" />FROM usersWHERE id = #{id}</select></mapper>

测试文件UserMapperTest

    大致打代码如下:

    在Junit5中没有了RunWith,换成了ExtendWith。测试中使用了真实的数据库,所有开启了测试后的数据回滚,避免测试数据进入数据库

package com.mall.MallWeb.mapper;import com.mall.MallWeb.model.User;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.transaction.annotation.Transactional;import java.util.List;@ExtendWith(SpringExtension.class)
@SpringBootTest
public class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Test@Transactionalpublic void addUserTest() {User user = new User("testUser", "testPassword", "testPhone");userMapper.add(user);assert userMapper.queryAll().size() != 0;}@Testpublic void queryTest() {List<User> users = userMapper.queryAll();assert users.size() != 0;for (User user: users) {System.out.println(user.toString());}}@Test@Transactionalpublic void updateTest() {User user = new User("testUser", "testPassword", "testPhone");userMapper.add(user);System.out.println(user.toString());User newUser = userMapper.queryOne(user.getId());System.out.println(newUser.toString());newUser.setName("updateUser");System.out.println(newUser.toString());userMapper.update(newUser);System.out.println(newUser.toString());User queryUser = userMapper.queryOne(user.getId());assert queryUser.getName().equals("updateUser");}
}

controllers目录下视图文件:UserController.java

package com.mall.MallWeb.controllers;import com.mall.MallWeb.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;/*** 用户*/
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserMapper userMapper;@GetMapping("/users")public Map users() {Map response = new HashMap();response.put("status", "success");response.put("users", userMapper.queryAll());return response;}
}

启动与测试

    现在开始运行程序,使用浏览器访问链接:http://localhost:8080/user/users

    能看到有数据或者没有数据都是成功的(下面的数据是提前插入的)

{"users": [{"id": 6,"name": "testUser","password": "testPasspword","phoneNumber": "testPhone","money": 0},{"id": 7,"name": "testUser","password": "testPasspword","phoneNumber": "testPhone","money": 0},{"id": 8,"name": "testUser","password": "testPasspword","phoneNumber": "testPhone","money": 0},{"id": 9,"name": "testUser","password": "testPasspword","phoneNumber": "testPhone","money": 0},{"id": 10,"name": "testUser","password": "testPassword","phoneNumber": "testPhone","money": 0},{"id": 11,"name": "testUser","password": "testPassword","phoneNumber": "testPhone","money": 0},{"id": 12,"name": "testUser","password": "testPassword","phoneNumber": "testPhone","money": 0}],"status": "success"
}

参考链接

  • Spring boot 启动报错-Reason Failed to determine a suitable driver class
  • java连接mysql失败Path does not chain with any of the trust anchors
  • SpringBoot+Mybatis框架项目的单元测试和集成测试(下)
  • Spring Boot(六):如何优雅的使用 Mybatis
  • mybatis-spring-boot-test-autoconfigure
  • Idea inspects batis mapper bean wrong
  • Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required in spring mock mvc test for spring boot with mybatis
  • mybatis传入多个参数
  • MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三
  • MyBatis多参数传递的四种方式
  • Mybatis 开启控制台打印sql语句

Spring Boot Mybatis入门示例相关推荐

  1. spring boot 转xml格式报错解决方法_芋道 Spring Boot MyBatis 入门(一)之 MyBatis + XML...

    摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/MyBatis/「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. MyBatis + XML 2.1 引入 ...

  2. mysql快速启动_GitHub - TianSiQiang/Spring-Boot-MyBatis-Mysql: Spring Boot+MyBatis+Mysql 快速启动示例...

    Spring Boot+MyBatis+Mysql 添加依赖 引入 lombok.mysql-connector-java .mybatis-plus-boot-starter 依赖: org.pro ...

  3. 芋道 Spring Boot 快速入门

    点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2019 超神之路,很肝~ 中文详细注释的开源项目 RP ...

  4. 芋道 Spring Boot JPA 入门(一)之快速入门

    点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2019 超神之路,很肝~ 中文详细注释的开源项目 RP ...

  5. spring boot + mybatis + layui + shiro后台权限管理系统

    后台管理系统 版本更新 后续版本更新内容 链接入口: springboot + shiro之登录人数限制.登录判断重定向.session时间设置:https://blog.51cto.com/wyai ...

  6. 从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建

    从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建 本文简介 为什么使用Spring Boot 搭建怎样一个环境 开发环境 导入快速启动 ...

  7. 第七章、Spring Boot MyBatis升级篇

    课时二十七.Spring Boot MyBatis升级篇-注解 缘起:在一节视频中,有这么一段留言:"会不会推出SpringBoot整合Mybaits配置文件sqlMapConfig.xml ...

  8. Spring Boot+MyBatis Plus+JWT 问卷系统!开源!

    你好呀,我是 Guide!这里是 JavaGuide 的「优质开源项目推荐」第 8 期,每一期我都会精选 5 个高质量的 Java 开源项目. 时间过的真快,不知不觉「优质开源项目推荐」系列已经持续半 ...

  9. 推荐一个基于 Spring Boot+MyBatis Plus+JWT 的问卷系统!

    你好呀,我是 Guide!这里是 JavaGuide 的「优质开源项目推荐」第 8 期,每一期我都会精选 5 个高质量的 Java 开源项目. 时间过的真快,不知不觉「优质开源项目推荐」系列已经持续半 ...

最新文章

  1. Spring注解编程基石(三)
  2. java中0l 1_Java基础笔记1 - osc_0ltyoebk的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. EC2上的ElasticSearch不到60秒
  4. apache 重写和虚拟目录配置
  5. 小程序 处理富文本内图片大小
  6. evernote 替代_Evernote的5种开源替代品
  7. C#实现对文件目录的实时监控
  8. java for 循环中if判断只进入第一个_「每天三分钟跟我学Java」之条件语句和循环结构...
  9. 凸优化第二章凸集 2.3保凸运算
  10. shader 菲涅尔反射
  11. native数据类型 react_React-Native 之 数据持久化
  12. 【转载】 禁止国外IP访问你的网站
  13. java saxreader 字符串_Java SAXReader.read方法代碼示例
  14. 信号发生器的基本知识
  15. oracle minus 利用率,oracle minus用法
  16. 笔记本不小心网络重置后,不能上网,网络适配器存在感叹号
  17. 论文阅读:[2019 TSE] A Theoretical and Empirical Analysis of Program Spectra Diagnosability
  18. 【经验分享】58个硬件工程师基础知识面试题
  19. inventor如何钣金出弧面_Inventor钣金造型教程
  20. html翻牌动画效果,js+css3翻牌动画效果

热门文章

  1. 关于SQL Server 2005 的自动远程数据库备份
  2. ASP.net MVC Mock Context(上下文)
  3. Kerberos与Sniffer,矛与盾永远的对立
  4. 今天你写控件了吗?----ASP.net控件开发系列之(一)开篇
  5. jsp页面科学计数法显示问题的解决办法
  6. rsa加解密的内容超长的问题解决
  7. KuaiRec | 快手发布首个稠密度高达99%的推荐数据集, 可用于多种推荐系统方向研究...
  8. 【干货】这样写总结年终奖翻倍!
  9. 【报告分享】2020中国企业直播应用场景趋势研究报告.pdf(附下载链接)
  10. 腾讯广告招人啦,校招优质岗位你不容错过!