Github 地址:https://github.com/Snailclimb/springboot-integration-examples
<https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2FSnailclimb%2Fspringboot-integration-examples>
(SpringBoot和其他常用技术的整合,可能是你遇到的讲解最详细的学习案例,力争新手也能看懂并且能够在看完之后独立实践。基于最新的
SpringBoot2.0+,是你学习SpringBoot 的最佳指南。) ,欢迎各位 Star。

SpringBoot 整合 Mybatis 有两种常用的方式,一种就是我们常见的 xml 的方式 ,还有一种是全注解的方式。我觉得这两者没有谁比谁好,在
SQL 语句不太长的情况下,我觉得全注解的方式一定是比较清晰简洁的。但是,复杂的 SQL 确实不太适合和代码写在一起。

下面就开始吧!

目录:

*
一 开发前的准备 <https://yq.aliyun.com/go/articleRenderRedirect?url=%23>

* 1.1 环境参数 <https://yq.aliyun.com/go/articleRenderRedirect?url=%2311->
* 1.2 创建工程 <https://yq.aliyun.com/go/articleRenderRedirect?url=%2312->
* 1.3 创建数据库和 user 用户表
<https://yq.aliyun.com/go/articleRenderRedirect?url=%2313->
* 1.4 配置 pom 文件中的相关依赖
<https://yq.aliyun.com/go/articleRenderRedirect?url=%2314->
* 1.5 配置 application.properties
<https://yq.aliyun.com/go/articleRenderRedirect?url=%2315->
* 1.6 创建用户类 Bean <https://yq.aliyun.com/go/articleRenderRedirect?url=%2316->
*
二 全注解的方式 <https://yq.aliyun.com/go/articleRenderRedirect?url=%23>

* 2.1 Dao 层开发 <https://yq.aliyun.com/go/articleRenderRedirect?url=%2321-dao->
* 2.2 service 层
<https://yq.aliyun.com/go/articleRenderRedirect?url=%2322-service->
* 2.3 Controller 层
<https://yq.aliyun.com/go/articleRenderRedirect?url=%2323-controller->
* 2.4 启动类 <https://yq.aliyun.com/go/articleRenderRedirect?url=%2324->
* 2.5 简单测试 <https://yq.aliyun.com/go/articleRenderRedirect?url=%2325->
*
三 xml 的方式 <https://yq.aliyun.com/go/articleRenderRedirect?url=%23>

* 3.1 Dao 层的改动 <https://yq.aliyun.com/go/articleRenderRedirect?url=%2331-dao->
* 3.2 配置文件的改动 <https://yq.aliyun.com/go/articleRenderRedirect?url=%2332->
一 开发前的准备

1.1 环境参数

* 开发工具:IDEA
* 基础工具:Maven+JDK8
* 所用技术:SpringBoot+Mybatis
* 数据库:MySQL
* SpringBoot版本:2.1.0
1.2 创建工程

创建一个基本的 SpringBoot 项目,我这里就不多说这方面问题了,具体可以参考下面这篇文章:

https://blog.csdn.net/qq_34337272/article/details/79563606
<https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fblog.csdn.net%2Fqq_34337272%2Farticle%2Fdetails%2F79563606>

1.3 创建数据库和 user 用户表

我们的数据库很简单,只有 4 个字段:用户 id、姓名、年龄、余额,如下图所示:



添加了“余额money”字段是为了给大家简单的演示一下事务管理的方式。

建表语句:
CREATE TABLE `user` ( `id` int(13) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(33) DEFAULT NULL COMMENT '姓名', `age` int(3) DEFAULT NULL COMMENT
'年龄', `money` double DEFAULT NULL COMMENT '账户余额', PRIMARY KEY (`id`) )
ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
1.4 配置 pom 文件中的相关依赖

由于要整合 springboot 和 mybatis 所以加入了artifactId 为 mybatis-spring-boot-starter
的依赖,由于使用了Mysql 数据库 所以加入了artifactId 为 mysql-connector-java 的依赖。
<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.3.2</version>
</dependency> <dependency> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <scope>runtime</scope>
</dependency> <dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <scope>test</scope>
</dependency> </dependencies>
1.5 配置 application.properties

由于我使用的是比较新的Mysql连接驱动,所以配置文件可能和之前有一点不同。
server.port=8333
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/erp?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root spring.datasource.password=153963
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
注意:我们使用的 mysql-connector-java 8+ ,JDBC 连接到mysql-connector-java 6+以上的需要指定时区
serverTimezone=GMT%2B8。另外我们之前使用配置 Mysql数据连接是一般是这样指定
driver-class-name=com.mysql.jdbc.Driver,但是现在不可以必须为 否则控制台下面的异常:
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver
class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via
the SPI and manual loading of the driver class is generally unnecessary.
上面异常的意思是:com.mysql.jdbc.Driver 被弃用了。新的驱动类是 com.mysql.cj.jdbc.Driver
。驱动程序通过SPI自动注册,手动加载类通常是不必要。

如果你非要写把com.mysql.jdbc.Driver 改为com.mysql.cj.jdbc.Driver 即可。

1.6 创建用户类 Bean
public class User { private int id; private String name; private int age;
private double money; ... 此处省略getter、setter以及 toString方法 }
二 全注解的方式

先来看一下 全注解的方式,这种方式和后面提到的 xml 的方式的区别仅仅在于 一个将 sql 语句写在 java 代码中,一个写在 xml
配置文件中。全注方式解转换成 xml 方式仅需做一点点改变即可,我在后面会提到。

项目结构:



2.1 Dao 层开发

UserDao.java
@Mapper public interface UserDao { /** * 通过名字查询用户信息 */ @Select("SELECT * FROM
user WHERE name = #{name}") User findUserByName(@Param("name") String name);
/** * 查询所有用户信息 */ @Select("SELECT * FROM user") List<User> findAllUser(); /** *
插入用户信息 */ @Insert("INSERT INTO user(name, age,money) VALUES(#{name}, #{age},
#{money})") void insertUser(@Param("name") String name, @Param("age") Integer
age, @Param("money") Double money); /** * 根据 id 更新用户信息 */ @Update("UPDATE user
SET name = #{name},age = #{age},money= #{money} WHERE id = #{id}") void
updateUser(@Param("name") String name, @Param("age") Integer age,
@Param("money") Double money, @Param("id") int id); /** * 根据 id 删除用户信息 */
@Delete("DELETE from user WHERE id = #{id}") void deleteUser(@Param("id") int
id); }
2.2 service 层
@Service public class UserService { @Autowired private UserDao userDao; /** *
根据名字查找用户 */ public User selectUserByName(String name) { return
userDao.findUserByName(name); } /** * 查找所有用户 */ public List<User>
selectAllUser() { return userDao.findAllUser(); } /** * 插入两个用户 */ public void
insertService() { userDao.insertUser("SnailClimb", 22, 3000.0);
userDao.insertUser("Daisy", 19, 3000.0); } /** * 根据id 删除用户 */ public void
deleteService(int id) { userDao.deleteUser(id); } /** * 模拟事务。由于加上了
@Transactional注解,如果转账中途出了意外 SnailClimb 和 Daisy 的钱都不会改变。 */ @Transactional
public void changemoney() { userDao.updateUser("SnailClimb", 22, 2000.0, 3); //
模拟转账过程中可能遇到的意外状况 int temp = 1 / 0; userDao.updateUser("Daisy", 19, 4000.0, 4);
} }
2.3 Controller 层
@RestController @RequestMapping("/user") public class UserController {
@Autowired private UserService userService; @RequestMapping("/query") public
User testQuery() { return userService.selectUserByName("Daisy"); }
@RequestMapping("/insert") public List<User> testInsert() {
userService.insertService(); return userService.selectAllUser(); }
@RequestMapping("/changemoney") public List<User> testchangemoney() {
userService.changemoney(); return userService.selectAllUser(); }
@RequestMapping("/delete") public String testDelete() {
userService.deleteService(3); return "OK"; } }
2.4 启动类
//此注解表示SpringBoot启动类 @SpringBootApplication //
此注解表示动态扫描DAO接口所在包,实际上不加下面这条语句也可以找到 @MapperScan("top.snailclimb.dao") public
class MainApplication { public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args); } }
2.5 简单测试

上述代码经过测试都没问题,这里贴一下根据姓名查询的测试的结果。



三 xml 的方式

项目结构:


相比于注解的方式主要有以下几点改变,非常容易实现。

3.1 Dao 层的改动

我这里只演示一个根据姓名找人的方法。

UserDao.java
@Mapper public interface UserDao { /** * 通过名字查询用户信息 */ User
findUserByName(String name); }
UserMapper.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="top.snailclimb.dao.UserDao"> <select id="findUserByName"
parameterType="String" resultType="top.snailclimb.bean.User"> SELECT * FROM
user WHERE name = #{name} </select> </mapper>
3.2 配置文件的改动

配置文件中加入下面这句话:

mybatis.mapper-locations=classpath:mapper/*.xml

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信