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

前言

  上文书我写了Spring的核心部分控制反转和依赖注入,后来又衔接了注解,在这后面本来是应该写Spring AOP的,但我觉得对于初学者来说,这部分可以先放放,先入门,把核心理解后再回过头来看这些我觉得效果更好,不知道说的对不对,要是理解不当,还望指教。此篇为Spring的数据库编程,主要讲jdbcTemplate,让初学者直接上手。

数据库切入

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

Spring  JDBC配置

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

<!--配置spring-jdbcTemplate-->
<!--配置数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><!--MySQL数据库驱动--><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><!--连接数据库的URL--><property name="url" value="jdbc:mysql://localhost:3306/bbb?useUnicode=true&characterEncoding=UTF-8"></property><!--连接数据库的用户名--><property name="username" value="root"></property><!--连接数据库的密码--><property name="password" value="root"></property>
</bean>
<!--配置JDBC模板-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property>
</bean>

  

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

@Repository("userDao")public class UserDaoImpl implements UserDao {@Autowired//使用配置文件中的JDBC模板private JdbcTemplate jdbcTemplate;}

  

Spring Jdbc Template的常用方法

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

1public int update(String sql,Object args[])
该方法可以对数据表进行增加、修改、删除等操作。使用args[]设置SQL语句中的参数,并返回更新的行数。
示例如下:
public void add() {String insertSql = "insert into user values(null,?,?)";Object parem1[] = {"成功","123456"};jdbcTemplate.update(insertSql,parem1);System.out.println("UserDao中的添加功能实现了");}

  

 
2public List<T> query(String sql,RowMapper<T> rowMapper,Object args[])
该方法可以对数据表进行查询操作,rowMapper将结果集映射到用户自定义的类中(前提是自定义类中的属性要与数据表的字段对应)。
 
示例如下:
public void query() {String selectSql = "select * from user";RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);List<User> list = jdbcTemplate.query(selectSql,rowMapper,null);System.out.println("UserDao中的查询功能实现了");}

  

案例辅助

Pom.xml

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><!--spring核心依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.1.5.RELEASE</version></dependency><!--日志相关--><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency></dependencies>

  

spring-config.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--配置注解要扫描的包--><context:component-scan base-package="com.my"></context:component-scan><mvc:annotation-driven></mvc:annotation-driven><!--将指定类TestDaoImpl配置给Spring,让Spring创建其实例--><bean id="testDIDao" class="com.my.dao.impl.TestDaoImpl"/><!--使用构造方法注入--><!--<bean id="testDIService" class="com.my.service.impl.TestServiceImpl" >--><!--<!–将TestDIDao注入到TestDIServiceImpl类的属性testDao上–>--><!--<constructor-arg index="0" ref="testDIDao"/>--><!--</bean>--><!--使用setter方法注入--><bean id="testDIService" class="com.my.service.impl.TestServiceImpl"><!--调用TestDIServiceImpl类的setter方法,将TestDao注入到TestServiceImpl类的属性testDao上--><property name="testDao" ref="testDIDao"></property></bean><!--配置spring-jdbcTemplate--><!--配置数据源--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><!--MySQL数据库驱动--><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><!--连接数据库的URL--><property name="url" value="jdbc:mysql://localhost:3306/bbb?useUnicode=true&characterEncoding=UTF-8"></property><!--连接数据库的用户名--><property name="username" value="root"></property><!--连接数据库的密码--><property name="password" value="root"></property></bean><!--配置JDBC模板--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!--配置事务--><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!--注册事务注解驱动--><tx:annotation-driven transaction-manager="txManager"></tx:annotation-driven></beans>

  

User

package com.my.pojo;public class User {private int id;private String username;private String password;public User() {}public User(int id, String username, String password) {this.id = id;this.username = username;this.password = password;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +'}';}}

  

UserDao

package com.my.dao;public interface UserDao {public void add();public void delete();public void update();public void query();}

  

UserDaoImpl

package com.my.dao.impl;import com.my.dao.UserDao;import com.my.pojo.User;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.stereotype.Repository;import java.util.List;@Repository("userDao")public class UserDaoImpl implements UserDao {@Autowired//使用配置文件中的JDBC模板private JdbcTemplate jdbcTemplate;@Overridepublic void add() {String insertSql = "insert into user values(null,?,?)";for (int i=0;i<15;i++){Object parem1[] = {"成功","123456"};jdbcTemplate.update(insertSql,parem1);}System.out.println("UserDao中的添加功能实现了");}@Overridepublic void delete() {String deleteSql = "delete from user where id=?";Object parem2[] = {5};jdbcTemplate.update(deleteSql,parem2);System.out.println("UserDao中的删除功能实现了");}@Overridepublic void update() {String updateSql = "update user set username=? , password=? where id =?";Object parem3[] = {"修改","654321",3};jdbcTemplate.update(updateSql,parem3);System.out.println("UserDao中的修改功能实现了");}@Overridepublic void query() {String selectSql = "select * from user";RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);List<User> list = jdbcTemplate.query(selectSql,rowMapper,null);System.out.println("UserDao中的查询功能实现了");for (User user : list){System.out.println(user);}}}

  

测试Test3

package com.my.test;import com.my.dao.UserDao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test3 {@Autowiredprivate  UserDao userDao;public static void main(String[] args) {ApplicationContext appCon = new ClassPathXmlApplicationContext("spring-config.xml");//从容器中获取目标对象UserDao userDao = (UserDao) appCon.getBean("userDao");//userDao.add();userDao.delete();userDao.update();userDao.query();}}

  

测试结果

结束

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

相关链接

《Spring浅入浅出》https://www.cnblogs.com/zyx110/p/11306998.html

《Spring注解浅入浅出》https://www.cnblogs.com/zyx110/p/11310139.html

《没有无缘无故的编程》https://www.cnblogs.com/zyx110/p/11297822.html

《自定义框架》https://www.cnblogs.com/zyx110/p/11295044.html

《Spring框架知多少》https://www.cnblogs.com/zyx110/p/11022891.html

《用IDEA开发Spring程序》https://www.cnblogs.com/zyx110/p/11023218.html

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

*****************************************************************************************************

我的博客园地址:https://www.cnblogs.com/zyx110/

转载请说明出处

我不能保证我所说的都是对的,但我能保证每一篇都是用心去写的,我始终认同“分享的越多,你的价值增值越大”,欢迎大家关注我的技术分享“Java匹马行天下”和学习心得分享“匹马行天下”,在分享中进步,越努力越幸运,人生赢在转折处,改变从现在开始!

支持我的朋友们记得点波推荐哦,您的肯定就是我前进的动力。

转载于:https://www.cnblogs.com/zyx110/p/11314839.html

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

  1. Spring MVC浅入浅出——不吹牛逼不装逼

    Spring MVC浅入浅出--不吹牛逼不装逼 前言 上文书说了Spring相关的知识,对Spring来了个浅入浅出,大家应该了解到,Spring在三层架构中主做Service层,那还有Web层,也就 ...

  2. Spring浅入浅出——不吹牛逼不装逼

    Spring浅入浅出--不吹牛逼不装逼 前言: 今天决定要开始总结框架了,虽然以前总结过两篇,但是思维是变化的,而且也没有什么规定说总结过的东西就不能再总结了,是吧.这次总结我命名为浅入浅出,主要在于 ...

  3. SegmentFault 技术周刊 Vol.16 - 浅入浅出 JavaScript 函数式编程

    函数式编程(Functional Programming),一看这个词,简直就是学院派的典范. 以至于从 Lisp 的创世,到 Scheme.Haskell.Clean.Erlang.Miranda. ...

  4. Spring注解浅入浅出——不吹牛逼不装逼

    Spring注解浅入浅出--不吹牛逼不装逼 前情提要 上文书咱们说了<Spring浅入浅出>,对Spring的核心思想看过上篇的朋友应该已经掌握了,此篇用上篇铺垫,引入注解,继续深入学习. ...

  5. SegmentFault 技术周刊 Vol.16 - 浅入浅出 JavaScript 函数式编程 1

    函数式编程(Functional Programming),一看这个词,简直就是学院派的典范. 以至于从 Lisp 的创世,到 Scheme.Haskell.Clean.Erlang.Miranda. ...

  6. [科普]浅入浅出Liunx Shellcode

    创建时间:2008-05-13 文章属性:原创 文章提交: pr0cess  (pr0cess_at_cnbct.org) 浅入浅出Liunx Shellcode /*---------------- ...

  7. 浅入深出之Java集合框架(上)

    Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到浅入深出之Java集合框架(下). ...

  8. 浅入深出之Java集合框架(中)

    Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到浅入深出之Java集合框架(下). ...

  9. Angular浅入深出系列 - 写在前面

    本系列目录: 写在前面 基础知识 控制器(Controller) 作用域(Scope) 集合(Collection) 模块(Module) 依赖注入(Dependency Injection) 服务( ...

最新文章

  1. js 创建一条通用链表
  2. 沈向洋、华刚:读科研论文的三个层次、四个阶段与十个问题
  3. ELK/EFK — 安装部署(主机安装)
  4. MySQL 到底是怎么解决幻读的?
  5. C#-数组定义及使用数组的好处 046
  6. iOS开发必备指南合集之游戏接入GameCenter 指南
  7. UVa1607 poj1435 UVaLive1686 Gates
  8. 【QGIS入门实战精品教程】9.1:QGIS构建泰森多边形(Thiessen Polygon)实例精解
  9. JSP内置对象之WEB安全性及config对象
  10. 单元测试——Winfrom
  11. 40 CO配置-控制-产品成本控制-成本对象控制-实际成本核算/物料分类帐-维护材料分类帐文档的编号范围
  12. 小米手机如何关闭悬浮球
  13. python编程例子-python网络编程实例简析
  14. 传智播客 sklearn数据集与机器学习组成
  15. 前端书籍推荐之《精通JavaScript+jQuery》
  16. 面向对象编程实例——句柄类的使用
  17. 组态王bitset用法_组态王使用问题解答6
  18. Adobe Photoshop CS6 缩小图片保持不失真的最佳方案
  19. xp怎么看自己计算机密码,XP如何查看wifi密码?
  20. 中学计算机课体育课被占用,那些年被占用的体育课

热门文章

  1. 计算机电子表格公式应用和操作,计算机电子表格公式应用常见错误及处理
  2. thinkphp htmls.php,ThinkPHP静态缓存简单配置和使用方法详解
  3. python debug run 结果不同_Python:PyCharm中运行与调试模式下的不同行为
  4. aftershokz蓝牙搜不到_iphone xr黑屏无法开机怎么办?iphonexr蓝牙连不上怎么办?
  5. JavaScript浏览器对象模型概述(1)
  6. android jni java call c字符串乱码,JNI系列入门之C语言中文字符串乱码问题
  7. farm 二维树桩数组数很大,数组存不下,怎么搞?区间更新
  8. god is a girl
  9. 对学生公寓部建议和意见_学生公寓自主管理协会
  10. 牛客网 二叉搜索树与双向链表