详解Spring Boot集成MyBatis(注解方式)
作者:xuyuzhuang1991 发布时间:2023-10-03 17:45:47
MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。spring Boot是能支持快速创建Spring应用的Java框架。本文通过一个例子来学习Spring Boot如何集成MyBatis,而且过程中不需要XML配置。
创建数据库
本文的例子使用MySQL数据库,首先创建一个用户表,执行sql语句如下:
CREATE TABLE IF NOT EXISTS user (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NULL DEFAULT NULL ,
`age` INT(2) NOT NULL ,
PRIMARY KEY (id)
)
工程目录结构与依赖配置
首先新建一个Maven工程,并配置Pom依赖,本例中所用到的依赖如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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.40</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
然后创建一下工程目录结构,如下图所示:
代码文件内容
0. 创建配置文件——application.properties
写入一下内容:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
1. 创建POJO——entity/User.java
这是一个POJO,包含了id, name, age三个属性,代码如下:
package com.xyz.dbtest.entity;
public class User {
private int id;
private String name;
private int age;
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
2. 创建一个数据层接口——service/UserService.java
这是一个Mapper类,代码如下:
package com.xyz.dbtest.dao;
import com.xyz.dbtest.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper //1
public interface UserDao {
@Results({ //2
@Result(property = "id", column = "id"), //2
@Result(property = "name", column = "name"),
@Result(property = "age", column = "age")
})
@Select("SELECT * FROM user WHERE age = #{age}") //3
List<User> get(int age);
@Insert("INSERT INTO user(name, age) VALUES (#{name}, #{age})") //3
void insert(User user);
}
//1 @Mapper将UserDao声明为一个Mapper接口
//2 @Results是结果映射列表,@Result中property是User类的属性名,colomn是数据库表的字段名
//3 @Select, @Insert 分别代表了执行的真实SQL
3. 创建一个用户服务——service/UserService.java
这是一个服务类Bean,提供三个函数功能,代码如下:
package com.xyz.dbtest.service;
import com.xyz.dbtest.dao.UserDao;
import com.xyz.dbtest.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service //声明成一个spring bean
public class UserService {
@Autowired //连接到UserDao Bean
private UserDao userDao;
public String show() {
return "Hello World!";
}
public List<User> showDao(int age) {
return userDao.get(age);
}
public String insert(String name, int age) { //插入一条记录
User user = new User();
user.setName(name);
user.setAge(age);
userDao.insert(user);
return "Insert ( \""+name+"\", age"+age+") OK!";
}
}
4. 常见一个Web Controller——controller/UserController.java
这是一个Spring Web的Controller类,引入了spring-boot-starter-web依赖,代码如下:
package com.xyz.dbtest.controller;
import com.xyz.dbtest.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController //声明为一个Restful的Controller
public class UserController {
@Autowired //自动连接到UserService Bean
private UserService userService;
@RequestMapping(value = "/show")
public String show() {
return userService.show();
}
@RequestMapping(value = "/showDao")
public Object showDao(int age) {
return userService.showDao(age);
}
@RequestMapping(value="/insert")
public String insert(String name, int age) {
return userService.insert(name, age);
}
}
5. 创建启动类——main/StartApp.java
这是一个spring boot启动类。代码如下:
package com.xyz.dbtest.main;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages = "com.xyz.dbtest") //1
@MapperScan(basePackages = "com.xyz.dbtest.dao") //2
public class StartApp {
public static void main(String[] args) {
SpringApplication.run(StartApp.class, args);
}
}
//1 由于StartApp类位于基础包的自包中,因此需要设置scanBasePackage
//2 设置Mapper接口所在的包
运行结果
运行Sql语句创建数据库表后,运行StartApp类。启动成功如下图所示
测试show服务,结果如下:
测试showDao服务,在输入URL时需要将参数打包进url,结果如下: 不带参数时,访问错误:
带参数时,访问成功,由于数据库中没有记录,所以结果是一个空列表:
测试insert服务
再次测试showDao服务
结语
通过本文的例子可以看出,使用Spring boot集成MyBatis几乎不用任何配置工作,能有效加快开发效率!
代码库地址:github地址
来源:http://blog.csdn.net/xuyuzhuang1991/article/details/54143945


猜你喜欢
- 我就废话不多说了,大家还是直接看代码吧~//returnContent为获取到的返回参数System.out.println(returnC
- 这篇文章主要介绍了spring boot如何实现切割分片上传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 本文实例为大家分享了C#15子游戏的实现代码,供大家参考,具体内容如下所需控件:一个Button,拖入Form1中即可。源码:using S
- 一、如何显示assets/license.txt(中文)的内容? (1)方法1:InputStream.available()得到字节数,然
- 这里使用的是dynamic-datasource-spring-boot-starter ,它是一个基于springboot的快速集成多数据
- 今天遇到了一个非常蛋疼的问题,好好的项目,没有任何报错,但是就是启动不了 还抱一个我看不出问题的错误: java.lang.NoS
- 写在前面元旦三天在家闲着无事,就看了看Linq的相关内容,也准备系统的学习一下,作为学习Linq的前奏,还是先得说说Lambda与匿名方法的
- 欢迎大家来学习本节内容,前几节我们已经学习了其他几种自定义控件,分别是Andriod 自定义控件之音频条及 Andriod 自定义控件之创建
- 本实例使用用户和订单的例子做说明: 一个用户可以有多个订单, 一个订单只对应一个用户。(其中应用到注释)1.代码的结构2. 建表语
- java中javaBean与Bean的深入理解JavaBean 是Java中的一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点
- 本文实例讲述了Java实现的校验银行卡功能。分享给大家供大家参考,具体如下:步骤:首先区分借记卡和信用卡,然后就是校验卡号,最后根据银联Bi
- web.xml中设置:<servlet> <servlet-name>DisplayChart</servle
- 本文实例为大家分享了java音乐播放器的具体代码,供大家参考,具体内容如下源码:package baidu;import java.awt.
- 下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试。1) 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程
- 本文主要介绍我为桌面和 Web 设计的一个超级秘密 Flutter 项目使用了画布和可拖动节点界面。本教程将展示我如何使用堆栈来使用小部件完
- 本文介绍MediaPlayer的使用。MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoV
- 本文实例讲述了Android中断线程的处理方法。分享给大家供大家参考。具体方法如下:我现在对一个用户注册的功能1.用ProgressDial
- Android9.0无法通过以下两种方式实现静默安装:1.runtime执行shell cmd2.PackageInstall 反射机制但是
- 上一篇文章: # Android 10 启动分析之Zygote篇 (三)紧接着上一篇文章的内容,我们从这篇文章开始来分析一下 SystemS
- 一般来说,修改框架的源代码是极其有风险的,除非万不得已,否则不要去修改。但是今天却小心翼翼的重构了Mybatis官方提供的与Spring集成