Spring Boot入门(六):使用MyBatis访问MySql数据库(注解方式)
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正!
本篇博客我们讲解下在Spring Boot中使用MyBatis访问MySql数据库的简单用法。
1.前期准备
假设你的机器已经安装好了MySql,我们先执行如下语句创建数据库和表:
CREATE DATABASE springbootdemo_db
create table author
(
author_id int auto_increment comment '作者id'
primary key,
author_name varchar(20) not null comment '姓名',
pen_name varchar(20) not null comment '笔名'
)
comment '作者';
2.修改pom文件
pom文件引入mybatis的starter pom和mysql的驱动,因后面要编写控制器,因此也引入下阿里巴巴的fastjson:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
说明:引入了mybatis-spring-boot-starter后,可以不再引用spring-boot-starter-jdbc,因为前者已经依赖于后者。
3.配置数据源
在resources/application.yml中配置数据源:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springbootdemo_db
username: root
password:
4.定义数据库实体
定义数据库实体Author:
package com.zwwhnly.springbootdemo.mybatis.entity;
import com.alibaba.fastjson.annotation.JSONField;
public class Author {
@JSONField(name = "author_id")
private Long authorId;
@JSONField(name = "author_name")
private String authorName;
@JSONField(name = "pen_name")
private String penName;
public Long getAuthorId() {
return authorId;
}
public void setAuthorId(Long authorId) {
this.authorId = authorId;
}
public String getAuthorName() {
return authorName;
}
public void setAuthorName(String authorName) {
this.authorName = authorName;
}
public String getPenName() {
return penName;
}
public void setPenName(String penName) {
this.penName = penName;
}
}
5.编写Dao层代码
定义接口AuthorMapper:
package com.zwwhnly.springbootdemo.mybatis.annotation;
import com.zwwhnly.springbootdemo.mybatis.entity.Author;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface AuthorMapper {
@Insert("insert into author(author_name, pen_name) values(#{author_name}, #{pen_name})")
int add(@Param("author_name") String authorName, @Param("pen_name") String penName);
@Update("update author set author_name = #{author_name}, pen_name = #{pen_name} where author_id = #{id}")
int update(@Param("author_name") String authorName, @Param("pen_name") String penName, @Param("id") Integer id);
@Delete("delete from author where author_id = #{id}")
int delete(Integer id);
@Select("select author_id as authorId, author_name as authorName, pen_name as penName from author where author_id = #{id}")
Author findAuthor(@Param("id") Long id);
@Select("select author_id as authorId, author_name as authorName, pen_name as penName from author")
List<Author> findAuthorList();
}
注意:接口要添加@Mapper注解。
6.编写Service层代码
定义类AuthorService:
package com.zwwhnly.springbootdemo.mybatis.annotation;
import com.zwwhnly.springbootdemo.mybatis.entity.Author;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class AuthorService {
@Autowired
private AuthorMapper authorMapper;
public int add(String authorName, String penName) {
return this.authorMapper.add(authorName, penName);
}
public int update(String authorName, String penName, Integer id) {
return this.authorMapper.update(authorName, penName, id);
}
public int delete(Integer id) {
return this.authorMapper.delete(id);
}
public Author findAuthor(Integer id) {
return this.authorMapper.findAuthor(id);
}
public List<Author> findAuthorList() {
return this.authorMapper.findAuthorList();
}
}
注意:类添加@Service注解。
7.编写Controller代码
新建控制器AuthorController:
package com.zwwhnly.springbootdemo.controller;
import com.alibaba.fastjson.JSONObject;
import com.zwwhnly.springbootdemo.mybatis.entity.Author;
import com.zwwhnly.springbootdemo.mybatis.annotation.AuthorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/mybatis/author")
public class AuthorController {
@Autowired
private AuthorService authorService;
/**
* 查询作者列表
*/
@RequestMapping(value = "getAuthorList", method = RequestMethod.GET)
public Map<String, Object> getAuthorList() {
List<Author> authorList = this.authorService.findAuthorList();
Map<String, Object> param = new HashMap<>();
param.put("total", authorList.size());
param.put("rows", authorList);
return param;
}
/**
* 查询单个作者信息
*/
@RequestMapping(value = "/getAuthor/{authorId:\\d+}", method = RequestMethod.GET)
public Author getAuthor(@PathVariable Integer authorId) {
Author author = this.authorService.findAuthor(authorId);
if (author == null) {
throw new RuntimeException("查询错误");
}
return author;
}
/**
* 新增
*/
@RequestMapping(value = "add", method = RequestMethod.POST)
public void add(@RequestBody JSONObject jsonObject) {
String authorName = jsonObject.getString("authorName");
String penName = jsonObject.getString("penName");
try {
this.authorService.add(authorName, penName);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("新增错误");
}
}
/**
* 更新
*/
@RequestMapping(value = "/update/{authorId:\\d+}", method = RequestMethod.PUT)
public void update(@PathVariable Integer authorId, @RequestBody JSONObject jsonObject) {
Author author = this.authorService.findAuthor(authorId);
String authorName = jsonObject.getString("authorName");
String penName = jsonObject.getString("penName");
try {
this.authorService.update(authorName, penName, author.getAuthorId());
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("更新错误");
}
}
/**
* 删除
*/
@RequestMapping(value = "/delete/{authorId:\\d+}", method = RequestMethod.DELETE)
public void delete(@PathVariable Integer authorId) {
try {
this.authorService.delete(authorId);
} catch (Exception e) {
throw new RuntimeException("删除错误");
}
}
}
8.使用Postman验证
8.1验证新增
因为新增是Post请求,因此这里我们使用下Postman工具:
调用完接口,发现数据库新增数据成功。
然后用同样的方法新增下鲁迅的信息。
8.2验证更新
调用更新接口将鲁迅的名字从周作人修改为周树人:
调用完接口,发现数据库更新数据成功。
8.3验证获取列表
在浏览器访问http://localhost:8080/mybatis/author/getAuthorList,返回数据如下:
{
"total": 2,
"rows": [
{
"authorId": 1,
"authorName": "王卫国",
"penName": "路遥"
},
{
"authorId": 2,
"authorName": "周树人",
"penName": "鲁迅"
}
]
}
8.4验证获取单个数据
在浏览器访问http://localhost:8080/mybatis/author/getAuthor/1,返回如下数据:
{
"authorId": 1,
"authorName": "王卫国",
"penName": "路遥"
}
8.5验证删除
调用删除接口,将鲁迅的数据删除:
此时访问http://localhost:8080/mybatis/author/getAuthorList,返回数据只有1条了:
{
"total": 1,
"rows": [
{
"authorId": 1,
"authorName": "王卫国",
"penName": "路遥"
}
]
}
9.源码地址
原文地址:Spring Boot入门(六):使用MyBatis访问MySql数据库(注解方式)
源码地址:https://github.com/zwwhnly/springbootdemo.git
欢迎大家下载,有问题可以多多交流。
10.参考链接
Spring Boot 揭秘与实战(二) 数据存储篇 - MyBatis整合
Spring Boot入门(六):使用MyBatis访问MySql数据库(注解方式)的更多相关文章
- Spring Boot入门(2)使用MySQL数据库
介绍 本文将介绍如何在Spring项目中连接.处理MySQL数据库. 该项目使用Spring Data JPA和Hibernate来连接.处理MySQL数据库,当然,这仅仅是其中一种方式,你也 ...
- Spring Boot 框架下使用MyBatis访问数据库之基于XML配置的方式
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...
- spring boot使用log4j2将日志写入mysql数据库
log4j2官方例子在spring boot中报错而且还是用的是org.apache.commons.dbcp包 我给改了一下使用org.apache.commons.dbcp2包 1.log4j2. ...
- 出入Spring boot(六)数据访问
Spring Data提供了使用统一的API进行数据访问操作,这是Spring通过提供Spring DataCommons项目来实现的,它是Spring data的依赖Spring Data Comm ...
- Spring Boot项目中使用jdbctemplate 操作MYSQL数据库
不废话,先来代码 pom文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...
- Spring Boot 入门 - 目录
pring Boot 入门 - 进阶篇(3)- 定时任务(@Scheduled) 主要用于定时发送邮件.夜间自动维护等. (1)开启定时任务功能 @Configuration @EnableSched ...
- Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版
一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...
- Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件
上一篇文章,写了如何搭建一个简单的Spring boot项目,本篇是接着上一篇文章写得:Spring boot入门:快速搭建Spring boot项目(一),主要是spring boot集成mybat ...
- Spring Boot 2.x基础教程:使用MyBatis访问MySQL
之前我们已经介绍了两种在Spring Boot中访问关系型数据库的方式: 使用spring-boot-starter-jdbc 使用spring-boot-starter-data-jpa 虽然Spr ...
随机推荐
- Ubuntu 16.04 安装 Docker
在Ubuntu上安装Docker, 非常简单, 我测试过 16.04, 17.04, 以及最新版 18.04,都是可以成功安装,并使用的. 第一步: 启动root账号 第二步: 配置网络,能上网 ...
- 关于bootstrap-datetimepicker 插件的配置参数详解
本人在网上查找的, 觉得还不错,就抄过来了... 有错误大家一起讨论,谢谢... 原地址是:http://www.bootcss.com/p/bootstrap-datetimepicker/ 项目 ...
- java正则表达式验证金额
String reg_money = "\\d+(\\.\\d{1,2})?";// 金额正则,可以没有小数,小数最多不超过两位 Pattern pattern = Pattern ...
- 好代码是管出来的——使用Git来管理源代码
软件开发过程中一个重要的产出就是代码,软件的编码过程一般是由一个团队共同完成,它是一个并行活动,为了保证代码在多人开发中能够顺利完成,我们需要使用代码版本控制工具来对代码进行统一存储,并追踪每一份代码 ...
- C++的反思[转]
最近两年 C++又有很多人出来追捧,并且追捧者充满了各种优越感,似乎不写 C++你就一辈子是低端程序员了,面对这种现象,要不要出来适时的黑一下 C++呢?呵呵呵. 咱们要有点娱乐精神,关于 C++的笑 ...
- Git协作流程
Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的流程,让大家有效地合作,使得项目井井有条地发展下去."协作流程"在英语里,叫做"workflo ...
- setInterval setTimeout 详解
JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( ...
- VMware12下CentOS 7安装教程
CentOS 7 DVD安装光盘(百度搜索CentOS即可找到官方主页):VMware Workstation 12 Pro及以上软件: 启动VMware Workstation 12 Pro程序,在 ...
- vue的传参方式和router使用技巧
vue传参方法一 1,路由配置 { path: '/describe/:id', name: 'Describe', component: Describe } 2,使用方法 // 直接调用$rout ...
- 选择排序SelectionSort
转自https://www.cnblogs.com/shen-hua/p/5424059.html a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕. ...