- 浏览: 631013 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
hsluoyz:
现在新推出了一个权限框架,叫jCasbin(https://g ...
Shiro 权限框架使用总结 -
飕飕飞:
比如说 我用私匙加密一段数据,并加密成功。那签名时用什么生成的 ...
Java使用RSA加密解密签名及校验 -
文艺吧网:
楼主讲的好详细,这里有整套 Shiro demo http:/ ...
Shiro 权限框架使用总结 -
nanshanmu:
333引用[url][*]||||[/flash][/flas ...
SpringMVC中返回值处理 -
变脸小伙:
) 业务类在Spring配置 ...
整合Struts2与Spring以及spring的自动装配
1、JdbcTemplate操作数据库
Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到
JdbcTemplate之中。同时,为了支持对properties文件的支持,spring提供了类似于EL表达式的方式,把
dataSource.properties的文件参数引入到参数配置之中,<context:property-placeholder
location="classpath:jdbc.properties" />。
实例代码如下:
提供数据源的相关配置信息:jdbc.properties
- driverClassName=org.gjt.mm.mysql.Driver
- url=jdbc\:mysql\://localhost\:3306/stanley?useUnicode\=true&characterEncoding\=UTF-8
- username=root
- password=123456
- initialSize=1
- maxActive=500
- maxIdle=2
- minIdle=1
提供spring的配置文件,将jdbc.properties与JdbcTemplate粘合起来的配置文件:beans.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:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <context:property-placeholder location="classpath:jdbc.properties" />
- <bean id="dataSource" class = "org.apache.commons.dbcp.BasicDataSource" destroy-method= "close" >
- <property name="driverClassName" value= "${driverClassName}" />
- <property name="url" value= "${url}" />
- <property name="username" value= "${username}" />
- <property name="password" value= "${password}" />
- <!-- 连接池启动时的初始值 -->
- <property name="initialSize" value= "${initialSize}" />
- <!-- 连接池的最大值 -->
- <property name="maxActive" value= "${maxActive}" />
- <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
- <property name="maxIdle" value= "${maxIdle}" />
- <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
- <property name="minIdle" value= "${minIdle}" />
- </bean>
- <bean id="txManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" >
- <property name="dataSource" ref= "dataSource" />
- </bean>
- <aop:config>
- <aop:pointcut id="transactionPointcut" expression= "execution(* cn.comp.service..*.*(..))" />
- <aop:advisor advice-ref="txAdvice" pointcut-ref= "transactionPointcut" />
- </aop:config>
- <tx:advice id="txAdvice" transaction-manager= "txManager" >
- <tx:attributes>
- <tx:method name="get*" read-only= "true" propagation= "NOT_SUPPORTED" />
- <tx:method name="*" />
- </tx:attributes>
- </tx:advice>
- <bean id="personService" class = "cn.comp.service.impl.PersonServiceBean" >
- <property name="dataSource" ref= "dataSource" />
- </bean>
- </beans>
或者使用获取jdbc相关连接
- <bean name= "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource" >
- <property name="driverClassName" value= "com.mysql.jdbc.Driver" ></property>
- <property name="url" value= "jdbc:mysql://localhost/dbunit" ></property>
- <property name="password" value= "root" />
- <property name="username" value= "root" />
- </bean>
提供POJO的java类:Person.java
- public class Person {
- private Integer id;
- private String name;
- public Person(){}
- public Person(String name) {
- this .name = name;
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this .id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this .name = name;
- }
- }
提供对Person的操作接口:PersonService.java
- public interface PersonService {
- /**
- * 保存person
- * @param person
- */
- public void save(Person person);
- /**
- * 更新person
- * @param person
- */
- public void update(Person person);
- /**
- * 获取person
- * @param personid
- * @return
- */
- public Person getPerson(Integer personid);
- /**
- * 获取所有person
- * @return
- */
- public List<Person> getPersons();
- /**
- * 删除指定id的person
- * @param personid
- */
- public void delete(Integer personid) throws Exception;
- }
提供对接口的实现类:PersonServiceBean.java
- public class PersonServiceBean implements PersonService {
- private JdbcTemplate jdbcTemplate;
- public void setDataSource(DataSource dataSource) {
- this .jdbcTemplate = new JdbcTemplate(dataSource);
- }
- public void delete(Integer personid) throws Exception{
- jdbcTemplate.update("delete from person where id=?" , new Object[]{personid},
- new int []{java.sql.Types.INTEGER});
- }
- public Person getPerson(Integer personid) {
- return (Person)jdbcTemplate.queryForObject( "select * from person where id=?" , new Object[]{personid},
- new int []{java.sql.Types.INTEGER}, new PersonRowMapper());
- }
- @SuppressWarnings ( "unchecked" )
- public List<Person> getPersons() {
- return (List<Person>)jdbcTemplate.query( "select * from person" , new PersonRowMapper());
- }
- public void save(Person person) {
- jdbcTemplate.update("insert into person(name) values(?)" , new Object[]{person.getName()},
- new int []{java.sql.Types.VARCHAR});
- }
- public void update(Person person) {
- jdbcTemplate.update("update person set name=? where id=?" , new Object[]{person.getName(), person.getId()},
- new int []{java.sql.Types.VARCHAR, java.sql.Types.INTEGER});
- }
- }
提供在查询对象时,记录的映射回调类:PersonRowMapper.java
- public class PersonRowMapper implements RowMapper {
- public Object mapRow(ResultSet rs, int index) throws SQLException {
- Person person = new Person(rs.getString( "name" ));
- person.setId(rs.getInt("id" ));
- return person;
- }
- }
【注意】:由于dbcp的jar包对common-pool和commons-collections的jar包有依赖,所有需要把他们一起引入
到工程中。【 commons-dbcp-1.2.1.jar, commons-pool-1.2.jar,
commons-collections-3.1.jar】,
参考文档《JDBC高级部分》:http://tianya23.blog.51cto.com/1081650/270849
2、JdbcTemplate事务
事务的操作首先要通过配置文件,取得spring的支持, 再在java程序中显示的使用@Transactional注解来使用事务操作。
在xml配置文件中增加对事务的支持:
- <bean id= "txManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" >
- <property name="dataSource" ref= "dataSource" />
- </bean>
- <tx:annotation-driven transaction-manager="txManager" />
- <bean id="personService" class = "cn.comp.service.impl.PersonServiceBean" >
- <property name="dataSource" ref= "dataSource" />
- </bean>
在java程序中显示的指明是否需要事务,当出现运行期异常Exception或一般的异常Exception是否需要回滚
- @Transactional
- public class PersonServiceBean implements PersonService {
- private JdbcTemplate jdbcTemplate;
- public void setDataSource(DataSource dataSource) {
- this .jdbcTemplate = new JdbcTemplate(dataSource);
- }
- // unchecked ,
- // checked
- @Transactional (noRollbackFor=RuntimeException. class )
- public void delete(Integer personid) throws Exception{
- jdbcTemplate.update("delete from person where id=?" , new Object[]{personid},
- new int []{java.sql.Types.INTEGER});
- throw new RuntimeException( "运行期例外" );
- }
- @Transactional (propagation=Propagation.NOT_SUPPORTED)
- public Person getPerson(Integer personid) {
- return (Person)jdbcTemplate.queryForObject( "select * from person where id=?" , new Object[]{personid},
- new int []{java.sql.Types.INTEGER}, new PersonRowMapper());
- }
- @Transactional (propagation=Propagation.NOT_SUPPORTED)
- @SuppressWarnings ( "unchecked" )
- public List<Person> getPersons() {
- return (List<Person>)jdbcTemplate.query( "select * from person" , new PersonRowMapper());
- }
- public void save(Person person) {
- jdbcTemplate.update("insert into person(name) values(?)" , new Object[]{person.getName()},
- new int []{java.sql.Types.VARCHAR});
- }
- public void update(Person person) {
- jdbcTemplate.update("update person set name=? where id=?" , new Object[]{person.getName(), person.getId()},
- new int []{java.sql.Types.VARCHAR, java.sql.Types.INTEGER});
- }
- }
在默认情况下,Spring会对RuntimeException异常进行回滚操作,而对Exception异常不进行回滚。可以显示的什么什么
样的异常需要回滚,什么样的异常不需要回滚, 通过
@Transactional(noRollbackFor=RuntimeException.class)设置要求运行时异常不回滚
或者通过RollbackFor=Exception.class来要求需要捕获的异常回滚。
【注意】Spring对数据库的操作提供了强大的功能,比如RowMapper接口封装数据库字段与Java属性的映射、查询返回List的函数
等,但是里面还要写一堆SQL语句还是比较烦人的,在这部分建议使用ibatis或hibernate来代替,
不知道Spring后期的版本会不会把这个整合到里面。
- <dependency>
- <groupId>com.alibaba.external</groupId>
- <artifactId>sourceforge.spring</artifactId>
- <version>2.5 . 6 </version>
- </dependency>
- <dependency>
- <groupId>com.alibaba.external</groupId>
- <artifactId>jdbc.mysql.mysql-connector</artifactId>
- <version>5.1 . 6 </version>
- </dependency>
- <dependency>
- <groupId>com.alibaba.external</groupId>
- <artifactId>jakarta.commons.dbcp</artifactId>
- <version>1.4 </version>
-
</dependency>
参考文章:http://xiao1227372602.iteye.com/blog/1631268
发表评论
-
context:component-scan扫描使用上的容易忽略的use-default-filters
2015-11-13 21:28 805问题 如下方式可以成功扫描到@Controller注解的Bea ... -
MongoDB Java Driver操作指南
2015-08-04 21:42 2537MongoDB为Java提供了非常丰富的API操作,相比关系 ... -
Spring3自定义环境配置 <beans profile="">
2015-04-22 10:51 1268摘自springside3 Spring 3.1的功能 ... -
json-rpc 1.0规范解读
2015-04-17 14:21 1317JSON可能是这个地球上 ... -
request.getParameter()、request.getInputStream()和request.getReader()
2015-03-30 11:16 2999大家经常 用servlet和jsp, ... -
微信企业号上传下载多媒体文件接口详解演示-java
2015-03-27 15:37 6296企业在使用接口时,对多媒体文件、多媒体消息的获取和调用等操作 ... -
java如何得到GET和POST请求URL和参数列表
2015-03-13 16:28 3122在servlet中GET请求可以通过HttpServletR ... -
关于<context:property-placeholder>的一个有趣现象
2015-01-05 20:09 566先来看下A和B两个模块 A模块和B模块都分别拥有自己的S ... -
spring jms _ activemq
2015-01-05 13:50 917参考链接: http://bsnyderblog.blogsp ... -
读取配置信息
2014-12-29 18:08 845第一种方法是使用java.io和java.util包,缺点是路 ... -
spring 事件机制
2014-11-14 14:17 973在Spring中已经定义的五 ... -
spring InitializingBean接口
2014-10-27 01:33 637最近工作需要得到sping中的每个事物需要执行的sql, ... -
spring InitializingBean接口
2014-10-27 01:33 964最近工作需要得到sping中的每个事物需要执行的sql,称 ... -
四种常见的 POST 提交数据方式
2014-09-23 11:38 1618HTTP/1.1 协议规定的 HTTP 请求方法有 OPT ... -
使用 Java 配置进行 Spring bean 管理
2014-07-31 17:58 847Spring bean 是使用传统的 XML 方法配置的。在 ... -
怎么使用Servlet 3.0中的上传文件呢?
2014-07-31 15:20 939Spring 3.1开始提供了Servlet 3.0的支持。 ... -
Spring mvc 拓展使用
2014-07-31 15:08 976原文链接:http://my.oschina.net/u/11 ... -
Spring MVC handler method 参数绑定常用的注解
2014-07-31 10:36 1997参考链接:http://csjava.bl ... -
SpringMVC中使用Interceptor拦截器
2014-06-30 15:18 845SpringMVC 中的Interceptor 拦 ... -
AOP的底层实现-CGLIB动态代理和JDK动态代理
2014-05-04 16:58 1034AOP是目前Spring框架中的 ...
相关推荐
spring中使用JdbcTemplate操作数据库crud,一图详解(脑图)
chapter2: 一起来学Spring Boot | 第二篇:Spring Boot配置详解 chapter3: 一起来学Spring Boot | 第四篇:整合Thymeleaf模板 chapter4: 一起来学Spring Boot | 第五篇:使用JdbcTemplate访问数据库 chapter5: ...
JdbcTemplate主要提供以下五类方法;JdbcTemplate类支持的回调类;并附例子
3.3.3. bean属性及构造器参数详解 3.3.3.1. 直接量(基本类型、Strings类型等。) 3.3.3.2. 引用其它的bean(协作者) 3.3.3.3. 内部bean 3.3.3.4. 集合 3.3.3.5. Nulls 3.3.3.6. XML-based configuration metadata ...
- chapter1:[基本项目构建(可作为工程脚手架),引入web模块,完成一个简单的RESTful API](http://blog.didispace.com/spring-boot-learning-1/) - [使用Intellij中的Spring Initializr来快速构建Spring Boot/...
JdbcTemplate 是在JDBC API基础上提供了更抽象的封装,并提供了基于方法注解的事务管理... 通过使用SpringBoot自动配置功能并代替我们自动配置beans,下面给大家介绍spring boot中使用JdbcTemplate相关知识,一起看看吧
chapter2-1-1:配置文件详解:自定义属性、随机数、多环境配置等 chapter2-1-2:2.0 新特性(一):配置绑定全解析 chapter2-2-1:2.0 新特性(二):新增事件ApplicationStartedEvent Web开发 chapter3-1-1:构建一...
Spring 对JDBC 的封装支持模板类操作,使JDBC的代码量精简,提高了开发效率。JdbcTemplate使用详解 JdbcTemplate使用详解
主要介绍了Spring JdbcTemplate整合使用方法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1.37 Spring Boot的启动器Starter详解 1.38 Spring Boot集成Redis实现缓存机制 1.39 Spring Boot Cache理论篇 1.40 Spring Boot集成EHCache实现缓存机制 1.41 Spring Boot分布式Session状态保存Redis 1.42 Spring ...
主要介绍了详解在spring中使用JdbcTemplate操作数据库的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
下面小编就为大家带来一篇基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
n 技术详解-切入点表达式详解 l Spring JDBC n 基础应用-JdbcTemplate的使用 n 源码分析-自定义JdbcTemplate n 设计模式-RowMapper的策略模式 n 高级应用-NamedParameterJdbcTemplate的使用 n 源码分析-...
3.3.2. 依赖配置详解 3.3.3. 使用depends-on 3.3.4. 延迟初始化bean 3.3.5. 自动装配(autowire)协作者 3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用...
3.3.3. bean属性及构造器参数详解 3.3.4. 使用depends-on 3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. ...
1、Spring简介及快速入门 2、Spring配置文件及其相应API 3、Spring注解开发 4、Spring web环境及其Junit的集成 5、Spring JDBCTemplate的基本使用 6、Spring AOP的介绍及其配置使用 7、Spring的声明式事务控制 8、...
使用JdbcTemplate访问数据库 整合SpringDataJpa 整合Mybatis 通用Mapper与分页插件的集成 整合Lettuce Redis 使用Spring Cache集成Redis 集成Swagger在线调试 初探RabbitMQ消息队列 RabbitMQ延迟队列 actuator 服务...
1 Spring基本特征 6 2 Spring的组成 6 2.1 Spring的jar包 6 2.2 Spring配置文件 7 2.3 Spring API 8 3 Spring基本功能详解 8 3.1 SpringIOC 8 3.2别名Alias 11 别名拓展: 11 3.3 Spring容器内部对象的创建 12 ...
3.3.3. bean属性及构造器参数详解 3.3.4. 使用depends-on 3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. ...