使用JdbcTemplate对MySQL数据库进行增删改查

迈不过友情╰ 2021-09-25 02:42 479阅读 0赞

大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。
1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员…
2、这几年,我整理了很多IT技术相关的教程给大家,爱生活、爱分享。
3、如果您觉得文章有用,请收藏,转发,评论,并关注我,谢谢!
博客导航跳转(请收藏):邵奈一的技术博客导航
| 公众号 | 微信 | 微博 | CSDN | 简书 |


教程目录

  • 0x00 教程内容
  • 0x01 Spring配置文件的编写
          1. 引入依赖
          1. 注入dataSource
  • 0x02 新建JDBCTemplate访问接口
          1. 新建实现类
          1. 注入 jdbcTemplate
          1. 编写jdbcTemplate访问代码
          1. 注入接口实现类
  • 0x03 测试
          1. 新建测试类
          1. 测试结果
  • 0x04 增删改代码
          1. 完整代码
          1. 测试结果
  • 0xFF 总结

0x00 教程内容

  1. Spring配置文件的编写
  2. JDBCTemplate访问接口代码的实现
  3. 测试
  4. 增删改完整代码

紧接着上一篇教程的基础:Spring之Bean的依赖注入(基于XML),这一篇文章继续来操作对数据库的访问,只不过这次是使用Spring里面的JdbcTemplate,其实也是非常简单的。

0x01 Spring配置文件的编写

1. 引入依赖

如果上一教程已经引入过了,则忽略此步骤:

  1. <!-- Spring JDBC依赖包 -->
  2. <dependency>
  3. <groupId>org.springframework</groupId>
  4. <artifactId>spring-jdbc</artifactId>
  5. <version>5.2.4.RELEASE</version>
  6. </dependency>
  7. <!-- Spring context依赖 -->
  8. <dependency>
  9. <groupId>org.springframework</groupId>
  10. <artifactId>spring-context</artifactId>
  11. <version>5.2.4.RELEASE</version>
  12. </dependency>

2. 注入dataSource

注入 dataSourcejdbcTemplate

  1. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  2. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  3. <property name="url" value="jdbc:mysql:///sny"/>
  4. <property name="username" value="root"/>
  5. <property name="password" value="123456"/>
  6. </bean>

如果不知道需要设置什么property,可以按住 ctrl 然后点击 DriverManagerDataSource进入需要设置什么属性值。

0x02 新建JDBCTemplate访问接口

1. 新建实现类

新建类 StudentDAOJdbcTemplateImpl 实现 StudentDAO 接口,然后加入JDBCTemplate属性,并且生成 get 和 set 方法 (至少需要有 set 方法):

  1. private JdbcTemplate jdbcTemplate;
  2. public JdbcTemplate getJdbcTemplate() {
  3. return jdbcTemplate;
  4. }
  5. public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
  6. this.jdbcTemplate = jdbcTemplate;
  7. }

在这里插入图片描述

2. 注入 jdbcTemplate

写好之后,需要在Spring配置文件里注入进来,以供后面测试时直接从IoC容器中获取:

  1. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  2. <property name="dataSource" ref="dataSource"/>
  3. </bean>

注意:这里是用了 ref ,表示设置的属性值来自于上面注入的bean,对应的是id。

3. 编写jdbcTemplate访问代码

编写实现StudentDAO里面的查询接口的代码:

  1. @Override
  2. public List<Student> getStudentList() {
  3. final List<Student> studentList = new ArrayList<>();
  4. String sql = "select id,name,age from student";
  5. jdbcTemplate.query(sql, new RowCallbackHandler() {
  6. @Override
  7. public void processRow(ResultSet resultSet) throws SQLException {
  8. Student student = new Student();
  9. student.setId(resultSet.getInt("id"));
  10. student.setName(resultSet.getString("name"));
  11. student.setAge(resultSet.getInt("age"));
  12. studentList.add(student);
  13. }
  14. });
  15. return studentList;
  16. }

在这里插入图片描述

4. 注入接口实现类

  1. <bean id="studentDAO" class="com.shaonaiyi.dao.StudentDAOJdbcTemplateImpl">
  2. <property name="jdbcTemplate" ref="jdbcTemplate"/>
  3. </bean>

注意:这里是用了 ref ,对应的是上面配置的 jdbcTemplate。

0x03 测试

1. 新建测试类

在这里插入图片描述
完整代码如下:

  1. package com.shaonaiyi.dao;
  2. import com.shaonaiyi.domain.Student;
  3. import org.junit.After;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.springframework.context.ApplicationContext;
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;
  8. import java.util.List;
  9. /** * @Auther: shaonaiyi@163.com * @Date: 2021/1/16 15:43 * @Description: JDBCTemplate方式对数据库进行访问 */
  10. public class StudentDAOJdbcTemplateImplTest {
  11. private ApplicationContext applicationContext = null;
  12. private StudentDAO studentDAO = null;
  13. @Before
  14. public void before() {
  15. applicationContext = new ClassPathXmlApplicationContext("spring.xml");
  16. studentDAO = (StudentDAO) applicationContext.getBean("studentDAO");
  17. }
  18. @After
  19. public void after() {
  20. applicationContext = null;
  21. }
  22. @Test
  23. public void testGetStudentList() {
  24. List<Student> studentList = studentDAO.getStudentList();
  25. for (Student student : studentList) {
  26. System.out.println("---------------------");
  27. System.out.println("学生id:" + student.getId());
  28. System.out.println("学生名称:" + student.getName());
  29. System.out.println("学生年龄:" + student.getAge());
  30. }
  31. }
  32. }

代码解读:从IoC容器中获取 studentDAO对象,然后调用查询接口,将结果查询出来。

2. 测试结果

在这里插入图片描述

0x04 增删改代码

1. 完整代码

增删改代码都非常相似,不做过多的介绍,给出完整的代码:
StudentDAOJdbcTemplateImpl完整代码:

  1. package com.shaonaiyi.dao;
  2. import com.shaonaiyi.domain.Student;
  3. import org.springframework.jdbc.core.JdbcTemplate;
  4. import org.springframework.jdbc.core.RowCallbackHandler;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. /** * @Auther: shaonaiyi@163.com * @Date: 2021/1/16 15:36 * @Description: JDBCTemplate方式对数据库进行访问 */
  10. public class StudentDAOJdbcTemplateImpl implements StudentDAO {
  11. private JdbcTemplate jdbcTemplate;
  12. @Override
  13. public List<Student> getStudentList() {
  14. final List<Student> studentList = new ArrayList<>();
  15. String sql = "select id,name,age from student";
  16. jdbcTemplate.query(sql, new RowCallbackHandler() {
  17. @Override
  18. public void processRow(ResultSet resultSet) throws SQLException {
  19. Student student = new Student();
  20. student.setId(resultSet.getInt("id"));
  21. student.setName(resultSet.getString("name"));
  22. student.setAge(resultSet.getInt("age"));
  23. studentList.add(student);
  24. }
  25. });
  26. return studentList;
  27. }
  28. @Override
  29. public int save(Student student) {
  30. String sql = "insert into student (name,age) values (?,?)";
  31. int result = jdbcTemplate.update(sql, new Object[]{ student.getName(), student.getAge()});
  32. return result;
  33. }
  34. @Override
  35. public int delete(int id) {
  36. String sql = "delete from student where id = " + id ;
  37. int result = jdbcTemplate.update(sql);
  38. return result;
  39. }
  40. @Override
  41. public int update(Student student) {
  42. String sql = "update student set age = ? where name = ?";
  43. int result = jdbcTemplate.update(sql, new Object[]{ student.getAge(), student.getName()});
  44. return result;
  45. }
  46. public JdbcTemplate getJdbcTemplate() {
  47. return jdbcTemplate;
  48. }
  49. public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
  50. this.jdbcTemplate = jdbcTemplate;
  51. }
  52. }

StudentDAOJdbcTemplateImplTest完整代码:

  1. package com.shaonaiyi.dao;
  2. import com.shaonaiyi.domain.Student;
  3. import org.junit.After;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.springframework.context.ApplicationContext;
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;
  8. import java.util.List;
  9. /** * @Auther: shaonaiyi@163.com * @Date: 2021/1/16 15:43 * @Description: JDBCTemplate方式对数据库进行访问 */
  10. public class StudentDAOJdbcTemplateImplTest {
  11. private ApplicationContext applicationContext = null;
  12. private StudentDAO studentDAO = null;
  13. @Before
  14. public void before() {
  15. applicationContext = new ClassPathXmlApplicationContext("spring.xml");
  16. studentDAO = (StudentDAO) applicationContext.getBean("studentDAO");
  17. }
  18. @After
  19. public void after() {
  20. applicationContext = null;
  21. }
  22. @Test
  23. public void testGetStudentList() {
  24. List<Student> studentList = studentDAO.getStudentList();
  25. for (Student student : studentList) {
  26. System.out.println("---------------------");
  27. System.out.println("学生id:" + student.getId());
  28. System.out.println("学生名称:" + student.getName());
  29. System.out.println("学生年龄:" + student.getAge());
  30. }
  31. }
  32. @Test
  33. public void testSave() {
  34. Student student = new Student();
  35. student.setName("邵奈一-jdbc");
  36. student.setAge(35);
  37. int result = studentDAO.save(student);
  38. System.out.println("执行结果行数:" + result);
  39. }
  40. @Test
  41. public void testDelete() {
  42. int result = studentDAO.delete(7);
  43. System.out.println("执行结果行数:" + result);
  44. }
  45. @Test
  46. public void testUpdate() {
  47. Student student = new Student();
  48. student.setName("邵奈一");
  49. student.setAge(37);
  50. int result = studentDAO.update(student);
  51. System.out.println("执行结果行数:" + result);
  52. }
  53. }

2. 测试结果

增:
在这里插入图片描述
删:
在这里插入图片描述
改:
在这里插入图片描述

0xFF 总结

  1. Java访问数据库系列,包含最后此篇,一共写了五篇,前四篇的地址如下:
    JDBC连接MySQL数据库(一)
    JDBC连接MySQL数据库(二)
    JDBC实现MySQL数据库的增删改查
    Spring之Bean的依赖注入(基于XML)
  2. 后期有机会还会介绍更多相关的知识,如Hibernate、MyBatis或者Spring Data JPA等等,敬请期待!欢迎关注,点赞,感谢!

邵奈一 原创不易,如转载请标明出处,教育是一生的事业。


发表评论

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

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

相关阅读