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

下面就开始吧!

目录:

  • 一 开发前的准备

    • 1.1 环境参数
    • 1.2 创建工程
    • 1.3 创建数据库和 user 用户表
    • 1.4 配置 pom 文件中的相关依赖
    • 1.5 配置 application.properties
    • 1.6 创建用户类 Bean
  • 二 全注解的方式

    • 2.1 Dao 层开发
    • 2.2 service 层
    • 2.3 Controller 层
    • 2.4 启动类
    • 2.5 简单测试
  • 三 xml 的方式

    • 3.1 Dao 层的改动
    • 3.2 配置文件的改动

一 开发前的准备

1.1 环境参数

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

1.2 创建工程

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

https://blog.csdn.net/qq_34337272/article/details/79563606

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 {@Autowiredprivate 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 的钱都不会改变。*/@Transactionalpublic 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 {@Autowiredprivate 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

转载于:https://www.cnblogs.com/williamjie/p/11416237.html

基于 SpringBoot2.0+优雅整合 SpringBoot+Mybatis相关推荐

  1. activiti+5.21+mysql_ydl-workflow基于SAAS服务,完美整合springboot + activiti5 + MyBatis

    workflow V1.0 ydl-workflow基于SAAS服务,完美整合springboot + activiti5 + MyBatis 通用 Mapper + 分页插件 PageInfo! 说 ...

  2. 基于springboot2.0的易居二手房网站-房屋管理系统

    基于springboot2.0的易居二手房网站-房屋管理系统-java二手房网站java房屋管理系统 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释. 2.课题设计仅供参考学习使用,可以在此 ...

  3. 系统接口502异常_基于SpringBoot2.0的后台权限管理系统

    简介 基于SpringBoot2.0的后台权限管理系统界面简洁美观敏捷开发系统架构.核心技术采用Spring.MyBatis.Shiro没有任何其它重度依赖. 互联网云快速开发框架,微服务分布式代码生 ...

  4. mall整合SpringBoot+MyBatis搭建基本骨架

    本文主要讲解mall整合SpringBoot+MyBatis搭建基本骨架,以商品品牌为例实现基本的CRUD操作及通过PageHelper实现分页查询. mysql数据库环境搭建 下载并安装mysql5 ...

  5. 【项目实战】 ---- 简单整合SpringBoot + MyBatis + Themyleaf小项目

    简单整合SpringBoot + MyBatis + Themyleaf小项目 一.项目环境搭建① 二.数据库表设计及项目环境② 三.图片验证码功能 四.用户注册功能 五.用户登录功能 六.员工的查询 ...

  6. 基于SpringBoot2.0 实现的jvm远程监工图形化工具

    项目介绍 基于SpringBoot2.0 实现的jvm远程监工图形化工具,可以同时监控多个web应用 该项目是借鉴另个一开源项目 ( JavaMonitor) https://gitee.com/zy ...

  7. 20万数据 sql 快还是 java快?_基于SpringBoot2.0开发的,轻量级的,前后分离Java开发平台...

    项目说明 MintLeaf-Fast是一个基于SpringBoot2.0开发的,轻量级的,前后端分离的Java快速开发平台 开箱即用,节省开发时间,提升开发效率,能够快速开发项目并交付的接私活利器 支 ...

  8. 基于springboot2.0跟layui构建的前后端分离后台管理系统

    Active4j-boot是基于SpingBoot2.0轻量级的java快速开发框架.以Spring Framework为核心容器,Spring MVC为模型视图控制器,Mybatis Plus为数据 ...

  9. springboot2.0优雅关闭

    本案例使用的是springboot2.0.4 当把打包好的jar包发布到服务器,并通过java -jar运行,一般要把springboot项目关闭大多数都是先找到项目的pid,然后直接kill pid ...

最新文章

  1. 零知识证明实践教程,第一部分
  2. 300 多行代码搞定微信 8.0 的「炸」「裂」特效!
  3. HarmonyOS 手机应用开发者 Beta 版到来,对开发者意味着什么
  4. Matlab中只运行m文件中部分程序的方法
  5. Python 简介和入门
  6. 解释如何优化css选择器_购物车解释了CSS选择器
  7. Linux发邮件之mail命令
  8. linux shell spool,Linux/Unix shell 脚本中调用SQL,RMAN脚本
  9. IBM 重磅开源 Power 芯片指令集!国产芯迎来新机遇?
  10. memcached+magent实现负载
  11. YTU 2578: 分数减法——结构体
  12. 拓端tecdat|使用Python中的ImageAI进行对象检测
  13. 坚持每一天,不忘初心,正经的前端学习(705)
  14. 春节怎么抢红包,python一招告诉你再也不会错过微信红包
  15. cuda10安装——在CentOS上安装的艰难过程
  16. 平衡二叉树例题_平衡二叉树专题
  17. 游戏测试和软件测试有什么区别?
  18. Winform常用控件的使用(一)
  19. Gson解析遇到的异常分析与记录
  20. 2021高考查询成绩公众号,微信怎么查高考成绩2021 微信高考成绩查询系统入口

热门文章

  1. 数据结构摧毁线性表用c语言,[简述]数据结构-线性表(c语言实现)
  2. TodoMVC中的Backbone+MarionetteJS+RequireJS例子源码分析之三 Views
  3. 带头结点的单链表的初始化,建立,插入,查找,删除
  4. SEO技巧之网站优化的具体细节
  5. 如何用C#将tif格式的图片转化成jpg?
  6. 求一列数据中的波峰_pandas查看缺失数据占比(实战)
  7. python吃显卡还是内存条_玩天际线吃U还是吃显卡或者还是吃内存?--天际线配置需求个人见解...
  8. c语言 去掉双引号_技术分享|浅谈C语言陷阱和缺陷
  9. (137)FPGA面试题-Verilog HDL中function和task的区别(一)
  10. (49)VHDL实现8位奇偶校验电路(while loop语句)