Spring之DAO模块
Spring的DAO模块提供了对JDBC、Hibernate、JDO等DAO层支持
DAO模块依赖于commons-pool.jar、commons-collections.jar
Spring完全抛弃了JDBC API,开发者只需要使用封装好的JdbcTemplate执行SQL语句,然后得到需要的结果
DAO层业务逻辑
public interface IpersonDao{ public String getPersonName(Integer id); public void addPerson(Person person); public int getPersonCount(); public List<Person> listPersons(); } import org.springframework.jdbc.core.support.JdbcDaoSupport; public classPersonDaoImpl extends JdbcDaoSupport implements IPersonDao{ public void initDatabase(){ //初始化数据库 } public String getPersonName(Integer id){ String sql = "select namefrom t_person where id = "+id; return (String)getJdbcTemplate().queryForObject(sql,String.class); } public void addPerson(Person person){ String sql = "insert intot_person (name,sex,age,birthday) values(?,?,?,?) "; Object [] params ={person.getName(),person.getSex(),person.getAge(),person.getBirthday() }; getJdbcTemplate().update(sql, params); } public int getPersonCount(){ String sql = "selectcount(*) from t_person"; returngetJdbcTemplate().queryForInt(sql); } public List<Person> listPersons(){ String sql = "selectid,name,sex,age,birthday from t_person "; List<Map<String,Object>>list= getJdbcTemplate().queryForList(sql); List<Person> personList = new ArrayList<Person> (); for(Map< String,Object > row: list){ Person person = newPerson(); person.setId((Integer)row.get("id")); person.setName((String)row.get("sex")); person.setSex((String)row.get("name")); person.setAge((Integer)row.get("age")); person.setBirthday((Date)row.get("birthday")); personList.add(person); } return personList; } }配置数据源
<bean id="dataSource" class="org.apche.commons.dbcp.BasicDataSurce" destroy-method="close"> <property name="diverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="admin"/> </bean> <bean id="personDao" class="com.clf.spring.PersonDaoImpl" depends-on=" dataSource"init-method="initDatabase"> <property name="dataSource" ref="dataSource" /> </bean>返回实体对象
MappingSqlQuery是一个抽象类,开发者需要实现它的mapRow(ResultSet,int)方法实现从ResultSet到Java对象的映射,该方法可以直接返回实体类对象
import org.springframework.jdbc.object.MappingSqlQuery; public class PersonMappingQuery extends MappingSqlQuery{ protected Object mapRow(ResultSet rs,int columnIndex) throws SQLException { Person person = new Person(); person.setId(rs.getInt("id")); person.setName(rs.getString("name")); person.setSex(rs.getString("sex")); person.setAge(rs.getInt("age")); person.setBirthday(rs.getTimstamp("birthday")); return person; } } public List findAllPersons(){ PersonMappingQuery personQuery = newPersonMappingQuery(); personQuery.setDataSource(getDataSource()); personQuery.setSql("select *from t_person where age > ?"); personQuery.declareParameter(newSqlParameter(java.sql.Types.NUMERIC)); personQuery.compile(); return personQuery.execute(new Object [] {newInteger(25) }); }SqlUpdate类
利用SqlUpdate来实现某个功能的模块化
public class UpdateSql extends SqlUpdate{ public UpdateSql(DataSource ds){ setDataSource(ds); setSql("……"); declareParameter(newSqlParameter(Tpyes.NUMERIC)); declareParameter(newSqlParameter(Tpyes.NUMERIC)); compile(); } public int run(int id,int num){ Object [] params = new Object [] { new Integer(id), new Integer(num) }; return update(sql); } }事务管理
<!-- JDBC事务管理--> <bean id="jdbcTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 为所有的方法配置事务--> <bean id="transactionAttributeSource" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource"> <property name="properties"> <props> <prop key="*">PROPAGATION_REQUIRED</prop><!--事务类型--> </props> </property> </bean> <bean id="transactiionRun" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref=" jdbcTransactionManager" /> <property name="target" > <bean class="com.clf.spring.TransactionRun"> <property name="personDao" ref="personDao"></property> </bean> </property> <property name="transactionAttributeSource" ref=" transactionAttributeSource" /> </bean>// TransactionRun为用户自定义类 TransactionRun transactionRun = factory.getBean("transactionRun"); transactionRun.run();
Spring之DAO模块的更多相关文章
- Spring【DAO模块】就是这么简单
前言 上一篇Spring博文主要讲解了如何使用Spring来实现AOP编程,本博文主要讲解Spring的DAO模块对JDBC的支持,以及Spring对事务的控制... 对于JDBC而言,我们肯定不会陌 ...
- Spring的DAO模块
Spring的DAO模块提供了对JDBC.Hibernate.JDO等DAO层支持. DAO模块依赖 commons-pool.jar.commons-collections.jar package ...
- Spring DAO模块
Spring的DAO模块提供了对JDBC.Hibernate.Mybatis等DAO层支持,本节介绍DAO模块对JDBC的支持.DAO模块依赖ommons-dbcp.jar.commons-pool. ...
- spring的核心模块有哪些?
Spring的七个核心模块,供大家参考,具体内容如下 1.Spring core:核心容器 核心容器提供spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关 ...
- Spring第七篇【Spring的JDBC模块】
前言 上一篇Spring博文主要讲解了如何使用Spring来实现AOP编程,本博文主要讲解Spring的对JDBC的支持- 对于JDBC而言,我们肯定不会陌生,我们在初学的时候肯定写过非常非常多的JD ...
- Spring【AOP模块】就是这么简单
前言 到目前为止,已经简单学习了Spring的Core模块.....于是我们就开启了Spring的AOP模块了...在讲解AOP模块之前,首先我们来讲解一下cglib代理.以及怎么手动实现AOP编程 ...
- Maven 搭建spring boot多模块项目(附源码),亲测可以,感谢原创
原创地址:https://segmentfault.com/a/1190000005020589 我的DEMO码云地址,持续添加新功能: https://gitee.com/itbase/Spring ...
- 1.Spring——七大主要模块
Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,MVC,WEB,Content. 下面分别简单介绍: 1.Spring Core Core模块是Spring的核心类库 ...
- 一头扎进Spring之---------Spring七大核心模块
Spring七大核心模块 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.Spring使用BeanF ...
随机推荐
- 将 Net 项目升级 Core项目经验:(一)迁移Net项目为Net Core\Standard项目
迁移Net项目为Net Core\Standard项目 背景: 我们公司内部有自己ORM开发框架,最新因为需要将系统迁移到国产服务器上,所以首先需要将最基础的ORM框架改造可以运行在国产服务器上.对于 ...
- ES6(正则扩展)
ES6中正则的扩展 正则新增特性 一.构造函数的变化 1.ES5中new一个正则对象方法 (一行中2个参数,二行中1个参数) (第一行中的第一个参数必须是字符串) 2.ES6中新增一种方法(构造函数) ...
- UVALive - 3027:Corporative Network
加权并查集 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring&g ...
- POJ 1486二分图的必要边
题意:有n个大小不等透明的幻灯片(只有轮廓和上面的数字可见)A.B.C.D.E…按顺序叠放在一起,现在知道每个幻灯片大小,由于幻灯片是透明的,所以能看到幻灯片上的数字(给出了每个数字的坐标,但不知道这 ...
- [hdu4694]Important Sisters
来自FallDream的博客,未经允许,请勿转载,谢谢. 给定一张图,求每个点到第n个点必须经过的点的编号之和.n<=50000 一道支配树裸题 然后统计答案的时候可以正着推,ans[i]=an ...
- bzoj1069 [SCOI2007]最大土地面积 旋转卡壳
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3767 Solved: 1501[Submit][Sta ...
- QSDK下驱动AR8035
0 概述 QSDK平台中,我所接触到的版本,能支持MIPS架构的,是基于Openwrt AA版本:虽然CC版本上就已经能很好地支持AR8035了,可是AA版本它本身是不支持的,于是不断有人要求提供补丁 ...
- Java多线程基础总结
一.线程和进程关系 二.创建方式1.继承Thread类,重写run方法2.实现Runable接口,重写run方法3.使用匿名内部类 三.API接口start()currentThread() 获取当前 ...
- Chinese-Text-Classification:Tensorflow CNN 模型实现的中文文本分类器[不分词版]
从现在的结果来看,分词的版本准确率稍微高一点. 训练过程: 模型评估: 实验三,准备换一下数据集,用这里的数据集来跑这个模型:https://zhuanlan.zhihu.com/p/30736422 ...
- jieba库分词统计
代码在github网站,https://github.com/chaigee/chaigee,中的z3.py文件 py.txt为团队中文简介文件 代码运行后词频统计使用xlwt库将数据发送到excel ...