|
|
51CTO旗下网站
|
|
移动端

Spring的数据库编程浅入浅出

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

作者:泰斗贤若如来源:泰斗贤若如|2020-03-06 10:16

 前言

先入门,把核心理解后再回过头来看这些我觉得效果更好,不知道说的对不对,要是理解不当,还望指教。此篇为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的讲解到此结束,对于新手来说没必要太复杂,能完成增删改查做个入门即可,等了解了再详细学习才有帮助,希望能对一些需要的朋友有用吧。

【编辑推荐】

  1. 图形数据库的3个主要用例
  2. 3月数据库排行:排名前十数据库七成分数下降
  3. 一个比c3p0快200倍的数据库连接池,这么牛?
  4. 趣说数据库事务隔离级别与原理
  5. 当数据库遇到分布式,你会怎么做?
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

VMware NSX 入门到实战

VMware NSX 入门到实战

网络虚拟化革命性技术
共16章 | Cloud袁

137人订阅学习

消息队列Kafka运维实践攻略

消息队列Kafka运维实践攻略

入门级消息队列
共3章 | 独行侠梦

107人订阅学习

编程零基础,Scratch 开发小游戏

编程零基础,Scratch 开发小游戏

游戏化编程
共5章 | googlingman

42人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微