vlambda博客
学习文章列表

Spring的数据库编程浅入浅出—不吹牛逼不装逼


前言



上文书我写了,后来又衔接了注解,在这后面本来是应该写Spring AOP的,但我觉得对于初学者来说,这部分可以先放放,先入门,把核心理解后再回过头来看这些我觉得效果更好,不知道说的对不对,要是理解不当,还望指教。此篇为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;

  6. }



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中的添加功能实现了");

  6. }


2、public List<T> query(String sql,RowMapper<T> 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. <dependency>

  14. <groupId>javax.servlet</groupId>

  15. <artifactId>jstl</artifactId>

  16. <version>1.2</version>

  17. </dependency>


  18. <dependency>

  19. <groupId>mysql</groupId>

  20. <artifactId>mysql-connector-java</artifactId>

  21. <version>5.1.38</version>

  22. </dependency>

  23. <!--spring核心依赖-->

  24. <dependency>

  25. <groupId>org.springframework</groupId>

  26. <artifactId>spring-core</artifactId>

  27. <version>5.1.5.RELEASE</version>

  28. </dependency>

  29. <dependency>

  30. <groupId>org.springframework</groupId>

  31. <artifactId>spring-beans</artifactId>

  32. <version>5.1.5.RELEASE</version>

  33. </dependency>

  34. <dependency>

  35. <groupId>org.springframework</groupId>

  36. <artifactId>spring-context</artifactId>

  37. <version>5.1.5.RELEASE</version>

  38. </dependency>

  39. <dependency>

  40. <groupId>org.springframework</groupId>

  41. <artifactId>spring-aop</artifactId>

  42. <version>5.1.5.RELEASE</version>

  43. </dependency>

  44. <dependency>

  45. <groupId>org.springframework</groupId>

  46. <artifactId>spring-jdbc</artifactId>

  47. <version>5.1.5.RELEASE</version>

  48. </dependency>

  49. <dependency>

  50. <groupId>org.springframework</groupId>

  51. <artifactId>spring-web</artifactId>

  52. <version>5.1.5.RELEASE</version>

  53. </dependency>

  54. <dependency>

  55. <groupId>org.springframework</groupId>

  56. <artifactId>spring-webmvc</artifactId>

  57. <version>5.1.5.RELEASE</version>

  58. </dependency>

  59. <dependency>

  60. <groupId>org.springframework</groupId>

  61. <artifactId>spring-expression</artifactId>

  62. <version>5.1.5.RELEASE</version>

  63. </dependency>

  64. <dependency>

  65. <groupId>org.springframework</groupId>

  66. <artifactId>spring-tx</artifactId>

  67. <version>5.1.5.RELEASE</version>

  68. </dependency>

  69. <!--日志相关-->

  70. <dependency>

  71. <groupId>commons-logging</groupId>

  72. <artifactId>commons-logging</artifactId>

  73. <version>1.2</version>

  74. </dependency>


  75. </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. <!--将指定类TestDaoImpl配置给Spring,让Spring创建其实例-->

  20. <bean id="testDIDao" class="com.my.dao.impl.TestDaoImpl"/>

  21. <!--使用构造方法注入-->

  22. <!--<bean id="testDIService" class="com.my.service.impl.TestServiceImpl" >-->

  23. <!--&lt;!&ndash;将TestDIDao注入到TestDIServiceImpl类的属性testDao上&ndash;&gt;-->

  24. <!--<constructor-arg index="0" ref="testDIDao"/>-->

  25. <!--</bean>-->

  26. <!--使用setter方法注入-->

  27. <bean id="testDIService" class="com.my.service.impl.TestServiceImpl">

  28. <!--调用TestDIServiceImpl类的setter方法,将TestDao注入到TestServiceImpl类的属性testDao上-->

  29. <property name="testDao" ref="testDIDao"></property>

  30. </bean>


  31. <!--配置spring-jdbcTemplate-->

  32. <!--配置数据源-->

  33. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

  34. <!--MySQL数据库驱动-->

  35. <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>

  36. <!--连接数据库的URL-->

  37. <property name="url" value="jdbc:mysql://localhost:3306/bbb?useUnicode=true&amp;characterEncoding=UTF-8"></property>

  38. <!--连接数据库的用户名-->

  39. <property name="username" value="root"></property>

  40. <!--连接数据库的密码-->

  41. <property name="password" value="root"></property>

  42. </bean>

  43. <!--配置JDBC模板-->

  44. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

  45. <property name="dataSource" ref="dataSource"></property>

  46. </bean>

  47. <!--配置事务-->

  48. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

  49. <property name="dataSource" ref="dataSource"></property>

  50. </bean>

  51. <!--注册事务注解驱动-->

  52. <tx:annotation-driven transaction-manager="txManager"></tx:annotation-driven>

  53. </beans>


User


 
   
   
 
  1. package com.my.pojo;


  2. public class User {

  3. private int id;

  4. private String username;

  5. private String password;


  6. public User() {

  7. }


  8. public User(int id, String username, String password) {

  9. this.id = id;

  10. this.username = username;

  11. this.password = password;

  12. }


  13. public int getId() {

  14. return id;

  15. }


  16. public void setId(int id) {

  17. this.id = id;

  18. }


  19. public String getUsername() {

  20. return username;

  21. }


  22. public void setUsername(String username) {

  23. this.username = username;

  24. }


  25. public String getPassword() {

  26. return password;

  27. }


  28. public void setPassword(String password) {

  29. this.password = password;

  30. }


  31. @Override

  32. public String toString() {

  33. return "User{" +

  34. "id=" + id +

  35. ", username='" + username + ''' +

  36. ", password='" + password + ''' +

  37. '}';

  38. }

  39. }


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();

  7. }


UserDaoImpl

 
   
   
 
  1. package com.my.dao.impl;


  2. import com.my.dao.UserDao;

  3. import com.my.pojo.User;

  4. import org.springframework.beans.factory.annotation.Autowired;

  5. import org.springframework.jdbc.core.BeanPropertyRowMapper;

  6. import org.springframework.jdbc.core.JdbcTemplate;

  7. import org.springframework.jdbc.core.RowMapper;

  8. import org.springframework.stereotype.Repository;


  9. import java.util.List;


  10. @Repository("userDao")

  11. public class UserDaoImpl implements UserDao {

  12. @Autowired

  13. //使用配置文件中的JDBC模板

  14. private JdbcTemplate jdbcTemplate;


  15. @Override

  16. public void add() {

  17. String insertSql = "insert into user values(null,?,?)";

  18. for (int i=0;i<15;i++){

  19. Object parem1[] = {"成功","123456"};

  20. jdbcTemplate.update(insertSql,parem1);

  21. }

  22. System.out.println("UserDao中的添加功能实现了");

  23. }


  24. @Override

  25. public void delete() {

  26. String deleteSql = "delete from user where id=?";

  27. Object parem2[] = {5};

  28. jdbcTemplate.update(deleteSql,parem2);

  29. System.out.println("UserDao中的删除功能实现了");

  30. }


  31. @Override

  32. public void update() {

  33. String updateSql = "update user set username=? , password=? where id =?";

  34. Object parem3[] = {"修改","654321",3};

  35. jdbcTemplate.update(updateSql,parem3);

  36. System.out.println("UserDao中的修改功能实现了");

  37. }


  38. @Override

  39. public void query() {

  40. String selectSql = "select * from user";

  41. RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);

  42. List<User> list = jdbcTemplate.query(selectSql,rowMapper,null);

  43. System.out.println("UserDao中的查询功能实现了");

  44. for (User user : list){

  45. System.out.println(user);

  46. }

  47. }

  48. }


测试Test3


 
   
   
 
  1. package com.my.test;


  2. import com.my.dao.UserDao;

  3. import org.springframework.beans.factory.annotation.Autowired;

  4. import org.springframework.context.ApplicationContext;

  5. import org.springframework.context.support.ClassPathXmlApplicationContext;


  6. public class Test3 {

  7. @Autowired

  8. private UserDao userDao;


  9. public static void main(String[] args) {


  10. ApplicationContext appCon = new ClassPathXmlApplicationContext("spring-config.xml");

  11. //从容器中获取目标对象

  12. UserDao userDao = (UserDao) appCon.getBean("userDao");


  13. //userDao.add();

  14. userDao.delete();

  15. userDao.update();

  16. userDao.query();

  17. }

  18. }



测试结果



Spring的数据库编程浅入浅出—不吹牛逼不装逼



结束



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


欲知下文如何,请看下回讲解。


Spring的数据库编程浅入浅出—不吹牛逼不装逼

长按扫码关注

等风也等你

点击阅读原文,进入我的博客