Springboot 整合jdbcTemple框架实现增删改查及事务处理——SpringBoot学习

╰半夏微凉° 2022-04-24 01:42 312阅读 0赞

一、POM 文件引入 JAR

  在 pom.xml 中引入 jdbcTemplate 以及测试包

  1. <!-- jdbcTemplate 依赖 -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-jdbc</artifactId>
  5. </dependency>
  6. <!-- mysql 依赖 -->
  7. <dependency>
  8. <groupId>mysql</groupId>
  9. <artifactId>mysql-connector-java</artifactId>
  10. </dependency>
  11. <!-- 测试 -->
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-test</artifactId>
  15. <scope>test</scope>
  16. <exclusions>
  17. <exclusion>
  18. <groupId>org.springframework</groupId>
  19. <artifactId>spring-test</artifactId>
  20. </exclusion>
  21. </exclusions>
  22. </dependency>
  23. <!-- SpringBoot 2.0 的 spring-boot-starter-test 中的spring-test 是5.0.4 版本的,
  24. 而,5.0.4 版没有 SpringJUnit4ClassRunner 和 SpringRunner 所以去除,另加入5.0.5 及以上版本的spring-test-->
  25. <dependency>
  26. <groupId>org.springframework</groupId>
  27. <artifactId>spring-test</artifactId>
  28. <version>5.0.5.RELEASE</version>
  29. <scope>test</scope>
  30. </dependency>

二、application.properties 新增配置

  在 application.properties 中添加数据源的配置

  1. spring.datasource.url=jdbc:mysql://localhost:3306/mysql
  2. spring.datasource.username=root
  3. spring.datasource.password=123456
  4. spring.datasource.driver-class-name=com.mysql.jdbc.Driver

使用 application.yml 的配置为

  1. ### datasource Configuration
  2. spring:
  3. datasource:
  4. url: jdbc:mysql://localhost:3306/mysql
  5. driver-class-name: com.mysql.jdbc.Driver
  6. username: root
  7. password: 123456

三、添加 Service

  增加 Service 接口 src/main/java/com/service/JdbcService.java 并实现 src/main/java/com/service/impl/JdbcServiceImpl.java
JdbcService 接口代码

  1. package com.service;
  2. import java.util.List;
  3. import com.bean.User;
  4. /**
  5. * @Description 整合JDBCTemplate Service
  6. * @author 欧阳
  7. * @since 2019年4月11日 下午2:17:37
  8. * @version V1.0
  9. */
  10. public interface JdbcService {
  11. /**
  12. * 添加用户
  13. * @param user
  14. */
  15. public void insertUser(User user);
  16. /**
  17. * 更新用户
  18. * @param user
  19. */
  20. public void updateUser(User user);
  21. /**
  22. * 查询用户
  23. * @param user
  24. * @return
  25. */
  26. public List<User> selectUser(User user);
  27. /**
  28. * 删除用户
  29. * @param id
  30. */
  31. public void deleteUser(Integer id);
  32. }

JdbcServiceImpl 实现类

  1. package com.service.impl;
  2. import java.sql.PreparedStatement;
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.util.List;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import org.springframework.jdbc.core.PreparedStatementSetter;
  9. import org.springframework.jdbc.core.RowMapper;
  10. import org.springframework.stereotype.Service;
  11. import org.springframework.transaction.annotation.Transactional;
  12. import com.bean.User;
  13. import com.service.JdbcService;
  14. /**
  15. * @Description 整合JDBCTemplate ServiceImpl
  16. * @author 欧阳
  17. * @since 2019年4月11日 下午2:20:33
  18. * @version V1.0
  19. */
  20. @Service
  21. public class JdbcServiceImpl implements JdbcService {
  22. @Autowired
  23. private JdbcTemplate jdbcTemplate;
  24. @Override
  25. @Transactional
  26. public void insertUser(User user) {
  27. String sql = "insert into t_user(id, name) values(?,?)";
  28. jdbcTemplate.update(sql, user.getId(), user.getName());
  29. // int num = 1/0; //放开测试事务。预期结果为添加失败,库中无数据。测试结果与预期一致
  30. }
  31. @Override
  32. @Transactional
  33. public void updateUser(User user) {
  34. String sql = "update t_user set name = ? where id = ?";
  35. PreparedStatementSetter pss = new PreparedStatementSetter() {
  36. @Override
  37. public void setValues(PreparedStatement arg0) throws SQLException {
  38. arg0.setString(1, user.getName());
  39. arg0.setString(2, user.getId());
  40. }
  41. };
  42. jdbcTemplate.update(sql, pss);
  43. }
  44. @Override
  45. public List<User> selectUser(User user) {
  46. String sql = "select id,name from t_user where 1=1 ";
  47. RowMapper<User> rowMapper = new RowMapper<User>() {
  48. @Override
  49. public User mapRow(ResultSet arg0, int arg1) throws SQLException {
  50. User user = new User();
  51. if(arg0.wasNull()) {
  52. return user;
  53. }
  54. user.setId(arg0.getString(1));
  55. user.setName(arg0.getString(2));
  56. return user;
  57. }
  58. };
  59. Object[] args = null;
  60. if(user != null) {
  61. if(user.getId() != null) {
  62. sql += "and id = ?";
  63. args = new Object[1];
  64. args[0] = user.getId();
  65. }
  66. }
  67. return jdbcTemplate.query(sql, args, rowMapper);
  68. }
  69. @Override
  70. @Transactional
  71. public void deleteUser(Integer id) {
  72. String sql = "delete from t_user where id = ?";
  73. jdbcTemplate.update(sql, String.valueOf(id));
  74. }
  75. }

  注意:通过使用 @Transactional 注解添加事务,在 insertUser 方法中的插入数据代码后增加异常代码 int num = 1/0; 测试事务是否起作用,实际测试结果表明测试结果与预期一致。

四、测试类

  添加测试类测试 JdbcServiceImpl

  1. package com.service.impl;
  2. import java.util.List;
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.test.context.junit4.SpringRunner;
  8. import com.App;
  9. import com.bean.User;
  10. import com.service.JdbcService;
  11. /**
  12. * @Description 测试整合 JdbcTemplate 结果
  13. * @author 欧阳
  14. * @since 2019年4月11日 下午2:42:53
  15. * @version V1.0
  16. */
  17. @RunWith(SpringRunner.class)
  18. @SpringBootTest(classes={App.class})
  19. public class JdbcServiceImplTest {
  20. @Autowired
  21. private JdbcService jdbcService;
  22. @Test
  23. public void testInsertUser() {
  24. jdbcService.insertUser(new User("11", "张三"));
  25. jdbcService.insertUser(new User("12", "lisi"));
  26. System.out.println("Yes");
  27. }
  28. @Test
  29. public void testUpdateUser() {
  30. User user = new User("11", "zhangsan");
  31. jdbcService.updateUser(user);
  32. System.out.println("Yes");
  33. }
  34. @Test
  35. public void testSelectUser() {
  36. List<User> users = jdbcService.selectUser(new User("11", "zhangsan"));
  37. for(User user : users) {
  38. System.out.println(user);
  39. }
  40. System.out.println("Yes");
  41. }
  42. @Test
  43. public void testDeleteUser() {
  44. jdbcService.deleteUser(12);
  45. System.out.println("Yes");
  46. }
  47. }

五、测试结果

  测试结果全部通过,增删改查功能正常,springboot 整合 jdbcTemple 完成。
测试结果全部通过

发表评论

表情:
评论列表 (有 0 条评论,312人围观)

还没有评论,来说两句吧...

相关阅读