我写了个小测试,熟悉一下spring对JDBC的支持与配置过程
实体类:
public class User {
private int id;
private String name;
//setter & getter
}
DAO层:
package com.xll.jdbc.dao;
import java.util.List;
import com.xll.jdbc.bean.User;
public interface UserDao {
void save(User user);
void delete(User user);
User get(int id);
List<User> getUsers();
}
DAO的实现类:
package com.xll.jdbc.daoImpl;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.transaction.annotation.Transactional;
import com.xll.jdbc.bean.User;
import com.xll.jdbc.dao.UserDao;
@Transactional
public class UserDaoImpl implements UserDao{
private JdbcTemplate jdbcTemplate;
public void setDatasouce(DataSource datasource) {
jdbcTemplate = new JdbcTemplate( datasource);
}
public void delete(User user) {
this.jdbcTemplate.update("delete from user where id=?", new Object[]{user.getId()});
System.out.println("删除成功!");
}
public User get(int id) {
User user = (User)this.jdbcTemplate.queryForObject("select * from user where id=?", new Object[]{id},
new UserMapper());
return user;
}
@SuppressWarnings("unchecked")
public List<User> getUsers() {
return this.jdbcTemplate.query("select * from user", new UserMapper());
}
public void save(User user) {
this.jdbcTemplate.update("insert into user(id,name) values(?,?)",
new Object[]{user.getId(),user.getName()});
System.out.println("保存成功!");
}
private static final class UserMapper implements RowMapper {
public Object mapRow(java.sql.ResultSet rs, int rowNum)
throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
return user;
}
}
}
在spring的主配置文件中配置:
<?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: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/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">
<bean id="Datasource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mydb" />
<property name="username" value="root" />
<property name="password" value="123" />
<property name="initialSize" value="2" />
<property name="maxActive" value="100" />
<property name="maxIdle" value="2" />
<property name="minIdle" value="1" />
</bean>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="Datasource" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
<bean id="userDaoImp" class="com.xll.jdbc.daoImpl.UserDaoImpl">
<property name="datasouce" ref="Datasource" />
</bean>
</beans>
其中我配置了事务管理,这里我的DAO的实现类中用datasource初始化了jdbcTemplate,在配置文件中,向userDaoImpl中注入了datasource。当然你也可以直接extends
JdbcDaoSupport
我的测试类如下:
public void testGetAll(){
ApplicationContext ctx = new FileSystemXmlApplicationContext("src/applicationContext.xml");
UserDao ud = (UserDao)ctx.getBean("userDaoImp");
List list = ud.getUsers();
Iterator iter = list.iterator();
while(iter.hasNext()){
User user = (User)iter.next();
System.out.println(user);
}
}
结果为:
name=xiaoliang,id=7
name=xiao,id=9
这里有个小细节,就是默认情况下用的是spring的代理,也就是这句
UserDao ud = (UserDao)ctx.getBean("userDaoImp");
你得写成接口来接收,不然报错,当然你可以在配置文件中加入这句
<aop:config proxy-target-class="true"></aop:config>
这时候使用的是cglib的代理来实现的,所以这时候你的测试类中可以写成这样:
UserDaoImpl ud = (UserDaoImpl)ctx.getBean("userDaoImp");
上面已经配置了事务,并开启了注解的功能,<tx:annotation-driven transaction-manager="txManager" />,
这时,我在DAO实现类的save()中作如下改动:
public void save(User user) {
this.jdbcTemplate.update("insert into user(id,name) values(?,?)",
new Object[]{user.getId(),user.getName()});
int i = 10/0;
System.out.println("保存成功!");
}
这时候运行我的测试类,数据将不会插入成功,而去掉实现类上面的事务注解@Transactional,再运行测试类,这是虽然也抛异常,但数据已经插入到数据库了,可以看到事务的功能。
分享到:
相关推荐
spring对jdbc的支持的测试jar包下载 spring采用的是4.0版本
开源框架spring详解-----spring对JDBC的支持开源框架spring详解-----spring对JDBC的支持开源框架spring详解-----spring对JDBC的支持
spring-jdbc-4.3.8.RELEASE.jar,Spring支持数据库所需jar包
包含spring-jdbc-4.3.7.RELEASE.jar和spring-tx-4.3.7.RELEASE.jar两个jar包
spring-JDBC的jar包整合,自用
hualinux spring xml开发系列 hualinux spring 3.16:Spring对JDBC的支持.pdf文字版
使用Spring提供的JdbcTemplate模板类实现对数据库的更新和查询操作、使用JdbcTemplate实现具体的DAO类、使用支持具名参数的JDBC模板类对数据库进行操作
这是一个自己搭建的spring mvc框架,使用jdbc连接关系型数据库,也可以使用非关系型数据库mongodb。 接口使用json数据格式通讯,也支持jsonp
spring-data-jdbc-repository, Spring Data JDBC泛型DAO实现 Spring Data JDBC泛型DAO实现查看正在积极开发和维护的 jirutka/spring-data-jdbc-repository fork 。 不再支持这里存储库。本项目的目的是为基于 ...
NULL 博文链接:https://zhangyulong.iteye.com/blog/992578
主要介绍了spring对JDBC和orm的支持实例详解,需要的朋友可以参考下
Spring JDBC Plus Spring JDBC Plus提供了基于的扩展。 当编写比CrudRepository支持的功能更复杂SQL时,它提供必要的功能。 如果您需要结合使用Spring Data JDBC的Persistence功能和SQL执行功能,则Spring JDBC ...
没有用到hibernate,使用了spring里的jdbcTemplate,spring专门支持JDBC的工具类 项目比较简单吧
spring-jdbc-5.0.8.RELEASE.jar
基于Spring JDBC 的一个公用持久化层源代码,支持普通的增删改查,仅支持Spring JDBC环境使用~
Spring JDBC Spring的JDBC模块负责数据库资源管理和错误处理,大大简化了开发人员对数据库的操作,使得开发人员可以从繁琐的数据库操作中解脱出来,从而将更多的精力投入到编写业务逻辑当中。 Spring JdbcTemplate...
Spring框架所提供的JDBC支持与其它Spring部分并非是紧耦合的,这极有利于代码的可维护性。本程序将向你展示任何直接使用JDBC(也即是,不通过一些O/R映射框架本身使用JDBC)的应用程序是如何从Spring中受益的。
基于spring jdbc的上层封装,底层jdbc操作基于JdbcTemplate,支持MySql、SqlServer、Oracle数据库,强弱类型完美结合 1、mini-jdbc:针对spring jdbc的一些不方便的地方,做了一些封装,大小写不敏感,简化了日常的...
完成了Spring的 aop 相关测试,以及Spring 对JDBC支持的简单测试
跟我学Spring3(7.5)对JDBC的支持之集成SpringJDBC及最佳实践Java开发Java经验技巧共5页.pdf.zip