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模块的更多相关文章

  1. Spring【DAO模块】就是这么简单

    前言 上一篇Spring博文主要讲解了如何使用Spring来实现AOP编程,本博文主要讲解Spring的DAO模块对JDBC的支持,以及Spring对事务的控制... 对于JDBC而言,我们肯定不会陌 ...

  2. Spring的DAO模块

    Spring的DAO模块提供了对JDBC.Hibernate.JDO等DAO层支持. DAO模块依赖 commons-pool.jar.commons-collections.jar package ...

  3. Spring DAO模块

    Spring的DAO模块提供了对JDBC.Hibernate.Mybatis等DAO层支持,本节介绍DAO模块对JDBC的支持.DAO模块依赖ommons-dbcp.jar.commons-pool. ...

  4. spring的核心模块有哪些?

    Spring的七个核心模块,供大家参考,具体内容如下 1.Spring core:核心容器 核心容器提供spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关 ...

  5. Spring第七篇【Spring的JDBC模块】

    前言 上一篇Spring博文主要讲解了如何使用Spring来实现AOP编程,本博文主要讲解Spring的对JDBC的支持- 对于JDBC而言,我们肯定不会陌生,我们在初学的时候肯定写过非常非常多的JD ...

  6. Spring【AOP模块】就是这么简单

    前言 到目前为止,已经简单学习了Spring的Core模块.....于是我们就开启了Spring的AOP模块了...在讲解AOP模块之前,首先我们来讲解一下cglib代理.以及怎么手动实现AOP编程 ...

  7. Maven 搭建spring boot多模块项目(附源码),亲测可以,感谢原创

    原创地址:https://segmentfault.com/a/1190000005020589 我的DEMO码云地址,持续添加新功能: https://gitee.com/itbase/Spring ...

  8. 1.Spring——七大主要模块

    Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,MVC,WEB,Content. 下面分别简单介绍: 1.Spring Core Core模块是Spring的核心类库 ...

  9. 一头扎进Spring之---------Spring七大核心模块

    Spring七大核心模块 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.Spring使用BeanF ...

随机推荐

  1. elasticsearch logstash jdbc 配置 增量更新

    环境前提: centos 6.5 x64 jdk 1.8 elasticsearch 6.1.4 logstash 6.1.4 kibana 6.1.4 mysql 5.x 保证上面软件已经安装,并且 ...

  2. ios开发-日期处理(类似朋友圈,微博等的发送时间)

    ios开发中,我们经常要处理从服务器获取的时间.类似朋友圈,微博这些应用.我们经常可以看到“刚刚”,“31分钟前发表”,“昨天5点”,之类的字样. 当时我们从服务器端获取的都是那条朋友圈信息,或者微博 ...

  3. python字符串-内置方法列举

    所谓内置方法,就是凡是字符串都能用的方法,这个方法在创建字符串的类中,下面是总结: 首先,我们要学习一个获取帮助的内置函数 help(对象) ,对象可以是一个我们创建出来的,也可以是创建对象的那个类, ...

  4. [NOIp 2016]天天爱跑步

    Description 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图 ...

  5. 线性规划与网络流24题●09方格取数问题&13星际转移问题

    ●(做codevs1908时,发现测试数据也涵盖了1907,想要一并做了,但因为“技术”不佳,搞了一上午) ●09方格取数问题(codevs1907  方格取数3) 想了半天,也没成功建好图: 无奈下 ...

  6. 洛谷P2042 [NOI2005]维护数列

    #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #in ...

  7. APIO 2014

    练习赛,评测的时候好像出了些问题,最后我拿自己机子测的212/300,第二题负责评测的写的SPJ就判了第一行的答案,不知道有没出什么问题. T1.palindrome 题目大意:给定一个长度为N的字符 ...

  8. 例10-1 uva11582(裴波那切数列)

    题意:你的任务是计算f(a^b)除以n的余数.其中f(0)=f(1)=1,且对于所有非负整数i,f(i+2)=f(i+1)+f(i). 思路: 由于是模运算,因此整个序列肯定会出现重复序列,所以先找出 ...

  9. poj2947 高斯消元

    Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 5218   Accepted: 1802 De ...

  10. SPOJ Query on a tree V

    You are given a tree (an acyclic undirected connected graph) with N nodes. The tree nodes are number ...