Spring的数据库编程浅入浅出

运维 数据库运维
数据库编程是互联网编程的基础,Spring框架为开发者提供了JDBC模板模式,即jdbcTemplate,它可以简化许多代码,需要提醒的是jdbcTemplate在实际应用中并不常用,但我觉得对新手来说苍蝇再小也是肉,要想往前走,就得把这些小肉先吃了。

[[317670]]

 前言

先入门,把核心理解后再回过头来看这些我觉得效果更好,不知道说的对不对,要是理解不当,还望指教。此篇为Spring的数据库编程,主要讲jdbcTemplate,让初学者直接上手。

数据库切入

数据库编程是互联网编程的基础,Spring框架为开发者提供了JDBC模板模式,即jdbcTemplate,它可以简化许多代码,需要提醒的是jdbcTemplate在实际应用中并不常用,但我觉得对新手来说苍蝇再小也是肉,要想往前走,就得把这些小肉先吃了。

Spring JDBC配置

使用Spring JDBC操作数据库,需要对其进行配置,配置如下

  1. <!--配置spring-jdbcTemplate--> 
  2. <!--配置数据源-->  
  3. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
  4. <!--MySQL数据库驱动-->  
  5. <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>  
  6. <!--连接数据库的URL-->  
  7. <property name="url" value="jdbc:mysql://localhost:3306/bbb?useUnicode=true&amp;characterEncoding=UTF-8"></property> 
  8. <!--连接数据库的用户名--> 
  9. <property name="username" value="root"></property>  
  10. <!--连接数据库的密码--> 
  11. <property name="password" value="root"></property>  
  12. </bean>  
  13. <!--配置JDBC模板-->  
  14. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" 
  15. <property name="dataSource" ref="dataSource"></property>  
  16. </bean> 

配置JDBC模板时需要将dataSource注入到jdbcTemplate,而在数据访问层(Dao类)需要使用jdbcTemplate时也需要将jdbc Template注入到对应的Bean中,我在这演示用最简单的注解注入

 

  1. @Repository("userDao" 
  2. public class UserDaoImpl implements UserDao {  
  3. @Autowired  
  4. //使用配置文件中的JDBC模板  
  5. private JdbcTemplate jdbcTemplate;  

Spring Jdbc Template的常用方法

在上面我们获取了JDBC模板,下面我来说如何使用它。首先需要了解JdbcTemplate常用的方法,该类的常用方法是update和query.

1、public int update(String sql,Object args[])

该方法可以对数据表进行增加、修改、删除等操作。使用args[]设置SQL语句中的参数,并返回更新的行数。

示例如下:

 

  1. public void add() {  
  2. String insertSql = "insert into user values(null,?,?)" 
  3. Object parem1[] = {"成功","123456"};  
  4. jdbcTemplate.update(insertSql,parem1);  
  5. System.out.println("UserDao中的添加功能实现了");  

2、public List query(String sql,RowMapper rowMapper,Object args[])

该方法可以对数据表进行查询操作,rowMapper将结果集映射到用户自定义的类中(前提是自定义类中的属性要与数据表的字段对应)。

示例如下:

  1. public void query() {  
  2. String selectSql = "select * from user" 
  3. RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);  
  4. List<User> list = jdbcTemplate.query(selectSql,rowMapper,null);  
  5. System.out.println("UserDao中的查询功能实现了"); 
  6.  

案例辅助

Pom.xml

  1. <dependencies> 
  2. <dependency> 
  3. <groupId>junit</groupId> 
  4. <artifactId>junit</artifactId> 
  5. <version>4.11</version> 
  6. <scope>test</scope> 
  7. </dependency> 
  8. <dependency> 
  9. <groupId>javax.servlet</groupId> 
  10. <artifactId>javax.servlet-api</artifactId> 
  11. <version>3.1.0</version> 
  12. </dependency> 
  13.  
  14.  
  15. <dependency> 
  16. <groupId>javax.servlet</groupId> 
  17. <artifactId>jstl</artifactId> 
  18. <version>1.2</version> 
  19. </dependency> 
  20.  
  21.  
  22. <dependency> 
  23. <groupId>mysql</groupId> 
  24. <artifactId>mysql-connector-java</artifactId> 
  25. <version>5.1.38</version> 
  26. </dependency> 
  27. <!--spring核心依赖--> 
  28. <dependency> 
  29. <groupId>org.springframework</groupId> 
  30. <artifactId>spring-core</artifactId> 
  31. <version>5.1.5.RELEASE</version> 
  32. </dependency> 
  33. <dependency> 
  34. <groupId>org.springframework</groupId> 
  35. <artifactId>spring-beans</artifactId> 
  36. <version>5.1.5.RELEASE</version> 
  37. </dependency> 
  38. <dependency> 
  39. <groupId>org.springframework</groupId> 
  40. <artifactId>spring-context</artifactId> 
  41. <version>5.1.5.RELEASE</version> 
  42. </dependency> 
  43. <dependency> 
  44. <groupId>org.springframework</groupId> 
  45. <artifactId>spring-aop</artifactId> 
  46. <version>5.1.5.RELEASE</version> 
  47. </dependency> 
  48. <dependency> 
  49. <groupId>org.springframework</groupId> 
  50. <artifactId>spring-jdbc</artifactId> 
  51. <version>5.1.5.RELEASE</version> 
  52. </dependency> 
  53. <dependency> 
  54. <groupId>org.springframework</groupId> 
  55. <artifactId>spring-web</artifactId> 
  56. <version>5.1.5.RELEASE</version> 
  57. </dependency> 
  58. <dependency> 
  59. <groupId>org.springframework</groupId> 
  60. <artifactId>spring-webmvc</artifactId> 
  61. <version>5.1.5.RELEASE</version> 
  62. </dependency> 
  63. <dependency> 
  64. <groupId>org.springframework</groupId> 
  65. <artifactId>spring-expression</artifactId> 
  66. <version>5.1.5.RELEASE</version> 
  67. </dependency> 
  68. <dependency> 
  69. <groupId>org.springframework</groupId> 
  70. <artifactId>spring-tx</artifactId> 
  71. <version>5.1.5.RELEASE</version> 
  72. </dependency> 
  73. <!--日志相关--> 
  74. <dependency> 
  75. <groupId>commons-logging</groupId> 
  76. <artifactId>commons-logging</artifactId> 
  77. <version>1.2</version> 
  78. </dependency> 
  79.  
  80.  
  81. </dependencies> 

spring-config.xml

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4. xmlns:context="http://www.springframework.org/schema/context" 
  5. xmlns:tx="http://www.springframework.org/schema/tx" 
  6. xmlns:mvc="http://www.springframework.org/schema/mvc" 
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans 
  8. http://www.springframework.org/schema/beans/spring-beans.xsd 
  9. http://www.springframework.org/schema/context 
  10. http://www.springframework.org/schema/context/spring-context.xsd 
  11. http://www.springframework.org/schema/tx 
  12. http://www.springframework.org/schema/tx/spring-tx.xsd 
  13. http://www.springframework.org/schema/mvc 
  14. http://www.springframework.org/schema/mvc/spring-mvc.xsd 
  15. "> 
  16. <!--配置注解要扫描的包--> 
  17. <context:component-scan base-package="com.my"></context:component-scan> 
  18. <mvc:annotation-driven></mvc:annotation-driven> 
  19.  
  20.  
  21. <!--将指定类TestDaoImpl配置给Spring,让Spring创建其实例--> 
  22. <bean id="testDIDao" class="com.my.dao.impl.TestDaoImpl"/> 
  23. <!--使用构造方法注入--> 
  24. <!--<bean id="testDIService" class="com.my.service.impl.TestServiceImpl" >--> 
  25. <!--&lt;!&ndash;将TestDIDao注入到TestDIServiceImpl类的属性testDao上&ndash;&gt;--> 
  26. <!--<constructor-arg index="0" ref="testDIDao"/>--> 
  27. <!--</bean>--> 
  28. <!--使用setter方法注入--> 
  29. <bean id="testDIService" class="com.my.service.impl.TestServiceImpl"
  30. <!--调用TestDIServiceImpl类的setter方法,将TestDao注入到TestServiceImpl类的属性testDao上--> 
  31. <property name="testDao" ref="testDIDao"></property> 
  32. </bean> 
  33.  
  34.  
  35. <!--配置spring-jdbcTemplate--> 
  36. <!--配置数据源--> 
  37. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
  38. <!--MySQL数据库驱动--> 
  39. <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
  40. <!--连接数据库的URL--> 
  41. <property name="url" value="jdbc:mysql://localhost:3306/bbb?useUnicode=true&amp;characterEncoding=UTF-8"></property> 
  42. <!--连接数据库的用户名--> 
  43. <property name="username" value="root"></property> 
  44. <!--连接数据库的密码--> 
  45. <property name="password" value="root"></property> 
  46. </bean> 
  47. <!--配置JDBC模板--> 
  48. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
  49. <property name="dataSource" ref="dataSource"></property> 
  50. </bean> 
  51. <!--配置事务--> 
  52. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
  53. <property name="dataSource" ref="dataSource"></property> 
  54. </bean> 
  55. <!--注册事务注解驱动--> 
  56. <tx:annotation-driven transaction-manager="txManager"></tx:annotation-driven> 
  57. </beans> 

User

  1. package com.my.pojo; 
  2.  
  3.  
  4. public class User { 
  5. private int id; 
  6. private String username; 
  7. private String password
  8.  
  9.  
  10. public User() { 
  11.  
  12.  
  13. public User(int id, String username, String password) { 
  14. this.id = id; 
  15. this.username = username; 
  16. this.password = password
  17.  
  18.  
  19. public int getId() { 
  20. return id; 
  21.  
  22.  
  23. public void setId(int id) { 
  24. this.id = id; 
  25.  
  26.  
  27. public String getUsername() { 
  28. return username; 
  29.  
  30.  
  31. public void setUsername(String username) { 
  32. this.username = username; 
  33.  
  34.  
  35. public String getPassword() { 
  36. return password
  37.  
  38.  
  39. public void setPassword(String password) { 
  40. this.password = password
  41.  
  42.  
  43. @Override 
  44. public String toString() { 
  45. return "User{" + 
  46. "id=" + id + 
  47. ", username='" + username + ''' + 
  48. ", password='" + password + ''' + 
  49. '}'

UserDao

  1. package com.my.dao;   
  2. public interface UserDao {  
  3. public void add();  
  4. public void delete();  
  5. public void update();  
  6. public void query();  

UserDaoImpl

  1. @Override 
  2. public void update() { 
  3. String updateSql = "update user set username=? , password=? where id =?"
  4. Object parem3[] = {"修改","654321",3}; 
  5. jdbcTemplate.update(updateSql,parem3); 
  6. System.out.println("UserDao中的修改功能实现了"); 
  7.  
  8.  
  9. @Override 
  10. public void query() { 
  11. String selectSql = "select * from user"
  12. RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class); 
  13. List<User> list = jdbcTemplate.query(selectSql,rowMapper,null); 
  14. System.out.println("UserDao中的查询功能实现了"); 
  15. for (User user : list){ 
  16. System.out.println(user); 

测试Test3

  1. package com.my.test; 
  2.  
  3.  
  4. import com.my.dao.UserDao; 
  5. import org.springframework.beans.factory.annotation.Autowired; 
  6. import org.springframework.context.ApplicationContext; 
  7. import org.springframework.context.support.ClassPathXmlApplicationContext; 
  8.  
  9.  
  10. public class Test3 { 
  11. @Autowired 
  12. private UserDao userDao; 
  13.  
  14.  
  15. public static void main(String[] args) { 
  16.  
  17.  
  18. ApplicationContext appCon = new ClassPathXmlApplicationContext("spring-config.xml"); 
  19. //从容器中获取目标对象 
  20. UserDao userDao = (UserDao) appCon.getBean("userDao"); 
  21.  
  22.  
  23. //userDao.add(); 
  24. userDao.delete(); 
  25. userDao.update(); 
  26. userDao.query(); 

测试结果

 

结束

对于Spring JbdcTemplate的讲解到此结束,对于新手来说没必要太复杂,能完成增删改查做个入门即可,等了解了再详细学习才有帮助,希望能对一些需要的朋友有用吧。

责任编辑:武晓燕 来源: 泰斗贤若如
相关推荐

2011-04-22 10:23:50

Server Push

2021-02-07 08:02:33

Linux内核开源

2021-05-17 09:58:00

MySQL索引数据库

2017-09-07 15:43:24

数据库MongoDBMySQL

2022-01-06 07:59:32

WebGPUOpenGL引擎

2022-10-31 09:00:24

Promise数组参数

2023-12-04 13:22:00

JavaScript异步编程

2017-06-06 15:34:41

物联网数据库压缩

2017-06-05 14:50:33

大数据数据库压缩

2022-01-12 08:54:52

Spring编程架构设计

2021-06-21 08:58:14

MySQL数据库Pages

2021-03-16 08:54:35

AQSAbstractQueJava

2020-05-27 20:25:47

SpringSpringBoot数据

2011-07-04 10:39:57

Web

2009-11-20 16:23:58

Oracle数据库安全

2022-09-29 09:19:04

线程池并发线程

2019-11-11 14:51:19

Java数据结构Properties

2022-12-02 09:13:28

SeataAT模式

2009-11-30 16:46:29

学习Linux

2019-01-07 15:29:07

HadoopYarn架构调度器
点赞
收藏

51CTO技术栈公众号