摘要:基于最新的,是你学习的最佳指南。驱动程序通过自动注册,手动加载类通常是不必要。由于加上了注解,如果转账中途出了意外和的钱都不会改变。三的方式项目结构相比于注解的方式主要有以下几点改变,非常容易实现。公众号多篇文章被各大技术社区转载。
Github 地址:https://github.com/Snailclimb/springboot-integration-examples(SpringBoot和其他常用技术的整合,可能是你遇到的讲解最详细的学习案例,力争新手也能看懂并且能够在看完之后独立实践。基于最新的 SpringBoot2.0+,是你学习SpringBoot 的最佳指南。) ,欢迎各位 Star。
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=utf81.4 配置 pom 文件中的相关依赖
由于要整合 springboot 和 mybatis 所以加入了artifactId 为 mybatis-spring-boot-starter 的依赖,由于使用了Mysql 数据库 所以加入了artifactId 为 mysql-connector-java 的依赖。
1.5 配置 application.propertiesorg.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2 mysql mysql-connector-java runtime org.springframework.boot spring-boot-starter-test test
由于我使用的是比较新的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 创建用户类 Beanpublic 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") List2.2 service 层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); }
@Service public class UserService { @Autowired private UserDao userDao; /** * 根据名字查找用户 */ public User selectUserByName(String name) { return userDao.findUserByName(name); } /** * 查找所有用户 */ public List2.3 Controller 层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); } }
@RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/query") public User testQuery() { return userService.selectUserByName("Daisy"); } @RequestMapping("/insert") public List2.4 启动类testInsert() { userService.insertService(); return userService.selectAllUser(); } @RequestMapping("/changemoney") public List testchangemoney() { userService.changemoney(); return userService.selectAllUser(); } @RequestMapping("/delete") public String testDelete() { userService.deleteService(3); return "OK"; } }
//此注解表示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
3.2 配置文件的改动
配置文件中加入下面这句话:
mybatis.mapper-locations=classpath:mapper/*.xml
ThoughtWorks准入职Java工程师。专注Java知识分享!开源 Java 学习指南——JavaGuide(12k+ Star)的作者。公众号多篇文章被各大技术社区转载。公众号后台回复关键字“1”可以领取一份我精选的Java资源哦!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72494.html
摘要:当禁用时,所有关联对象都会即时加载。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。需要适合的驱动。系统默认值是设置字段和类是否支持驼峰命名的属性。 上篇文章我们介绍了SpringBoot和MyBatis的整合,可以说非常简单快捷的就搭建了一个web项目,但是在一个真正的企业级项目中,可能我们还需要更多的更加完善的框架才能开始真正的开发,比如连接池、分...
摘要:从最开始的到后来的,到目前的随着框架的不断更新换代,也为我们广大的程序猿提供了更多的方便,一起搭建一个从控制层到持久层的项目可能需要一两天的时间,但是采用的方式,我们可能只需要分钟就能轻松完成一个项目的搭建,下面我们介绍一下整合的方法一新建 从最开始的SSH(Struts+Spring+Hibernate),到后来的SMM(SpringMVC+Spring+MyBatis),到目前...
摘要:下面基于,带着大家看一下中如何配置多数据源。注意版本不一致导致的一些小问题。配置配置两个数据源数据库和数据库注意事项在配置数据源的过程中主要是写成和。五启动类此注解表示启动类这样基于的多数据源配置就已经完成了,两个数据库都可以被访问了。 在上一篇文章《优雅整合 SpringBoot+Mybatis ,可能是你见过最详细的一篇》中,带着大家整合了 SpringBoot 和 Mybatis...
摘要:的配置后在其他低版本的中也有使用这种配置的,具体根据版本而定。等注解是的相关知识,后面的文章将详细讲述。 在我们的实际开发的过程中,无论多复杂的业务逻辑到达持久层都回归到了增删改查的基本操作,可能会存在关联多张表的复杂sql,但是对于单表的增删改查也是不可避免的,大多数开发人员对于这个简单而繁琐的操作都比较烦恼。 为了解决这种大量枯燥的简单数据库操作,大致的解决该问题的有三种方...
阅读 2078·2023-04-25 17:57
阅读 1284·2021-11-24 09:39
阅读 2482·2019-08-29 16:39
阅读 3311·2019-08-29 13:44
阅读 3116·2019-08-29 13:14
阅读 2313·2019-08-26 11:36
阅读 3809·2019-08-26 11:00
阅读 948·2019-08-26 10:14