Spring之DAO模块

Spring的DAO模块提供了对JDBC、Hibernate、JDO等DAO层支持

DAO模块依赖于commons-pool.jar、commons-collections.jar

Spring完全抛弃了JDBC API,开发者只需要使用封装好的JdbcTemplate执行SQL语句,然后得到需要的结果

DAO层业务逻辑

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. public interface IpersonDao{  
  2.       public String getPersonName(Integer id);  
  3.       public void addPerson(Person person);  
  4.       public int getPersonCount();  
  5.       public List<Person> listPersons();  
  6. }  
  7.    
  8. import  org.springframework.jdbc.core.support.JdbcDaoSupport;  
  9. public classPersonDaoImpl extends JdbcDaoSupport implements IPersonDao{  
  10.    
  11.       public void initDatabase(){  
  12.              //初始化数据库  
  13.       }  
  14.       public String getPersonName(Integer id){  
  15.              String sql = "select namefrom t_person where id = "+id;  
  16.              return (String)getJdbcTemplate().queryForObject(sql,String.class);  
  17.       }  
  18.       public void addPerson(Person person){  
  19.              String sql = "insert intot_person (name,sex,age,birthday) values(?,?,?,?) ";  
  20.              Object [] params ={person.getName(),person.getSex(),person.getAge(),person.getBirthday() };  
  21.              getJdbcTemplate().update(sql, params);  
  22.       }  
  23.       public int getPersonCount(){  
  24.              String sql = "selectcount(*) from t_person";  
  25.              returngetJdbcTemplate().queryForInt(sql);  
  26.       }  
  27.       public List<Person> listPersons(){  
  28.              String sql = "selectid,name,sex,age,birthday from t_person ";  
  29.              List<Map<String,Object>>list= getJdbcTemplate().queryForList(sql);  
  30.              List<Person> personList  = new ArrayList<Person> ();  
  31.              for(Map< String,Object > row: list){  
  32.                     Person person = newPerson();  
  33.    
  34.                     person.setId((Integer)row.get("id"));  
  35.                     person.setName((String)row.get("sex"));  
  36.                     person.setSex((String)row.get("name"));  
  37.                     person.setAge((Integer)row.get("age"));  
  38.                     person.setBirthday((Date)row.get("birthday"));  
  39.                     personList.add(person);  
  40.              }  
  41.              return personList;  
  42.       }  
  43.        
  44. }  


 

配置数据源

[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <bean id="dataSource" class="org.apche.commons.dbcp.BasicDataSurce" destroy-method="close">  
  2.       <property name="diverClassName" value="com.mysql.jdbc.Driver" />  
  3.       <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8"/>    
  4.       <property name="username" value="root"/>    
  5.       <property name="password" value="admin"/>    
  6. </bean>  
  7.    
  8. <bean id="personDao" class="com.clf.spring.PersonDaoImpl" depends-on=" dataSource"init-method="initDatabase">  
  9.       <property name="dataSource" ref="dataSource" />  
  10. </bean>  
 

返回实体对象

MappingSqlQuery是一个抽象类,开发者需要实现它的mapRow(ResultSet,int)方法实现从ResultSet到Java对象的映射,该方法可以直接返回实体类对象

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. import  org.springframework.jdbc.object.MappingSqlQuery;  
  2.    
  3. public class PersonMappingQuery extends MappingSqlQuery{  
  4.       protected Object mapRow(ResultSet rs,int columnIndex) throws SQLException {  
  5.              Person person = new Person();  
  6.    
  7.              person.setId(rs.getInt("id"));  
  8.              person.setName(rs.getString("name"));  
  9.              person.setSex(rs.getString("sex"));  
  10.              person.setAge(rs.getInt("age"));  
  11.              person.setBirthday(rs.getTimstamp("birthday"));  
  12.    
  13.              return person;  
  14.       }  
  15. }  
  16.    
  17. public List findAllPersons(){  
  18.       PersonMappingQuery personQuery = newPersonMappingQuery();  
  19.       personQuery.setDataSource(getDataSource());  
  20.       personQuery.setSql("select *from t_person where age > ?");  
  21.       personQuery.declareParameter(newSqlParameter(java.sql.Types.NUMERIC));  
  22.       personQuery.compile();  
  23.       return personQuery.execute(new Object [] {newInteger(25) });  
  24. }  
 

SqlUpdate类

利用SqlUpdate来实现某个功能的模块化

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. public class UpdateSql extends SqlUpdate{  
  2.       public UpdateSql(DataSource ds){  
  3.              setDataSource(ds);  
  4.              setSql("……");  
  5.              declareParameter(newSqlParameter(Tpyes.NUMERIC));  
  6.              declareParameter(newSqlParameter(Tpyes.NUMERIC));  
  7.              compile();  
  8.       }  
  9.        
  10.       public int run(int id,int num){  
  11.              Object [] params = new Object [] {  
  12.                     new Integer(id),  
  13.                     new Integer(num)  
  14.              };  
  15.              return update(sql);  
  16.       }  
  17. }  

事务管理

[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <!--  JDBC事务管理-->  
  2. <bean id="jdbcTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  3.       <property name="dataSource" ref="dataSource" />  
  4. </bean>  
  5.    
  6. <!--  为所有的方法配置事务-->  
  7. <bean id="transactionAttributeSource" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">  
  8.       <property name="properties">  
  9.              <props>  
  10.                     <prop key="*">PROPAGATION_REQUIRED</prop><!--事务类型-->  
  11.              </props>  
  12.       </property>  
  13. </bean>  
  14.    
  15. <bean id="transactiionRun" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
  16.       <property name="transactionManager" ref=" jdbcTransactionManager" />  
  17.       <property name="target" >  
  18.              <bean class="com.clf.spring.TransactionRun">  
  19.                     <property name="personDao" ref="personDao"></property>  
  20.              </bean>  
  21.       </property>  
  22.       <property name="transactionAttributeSource" ref=" transactionAttributeSource" />  
  23. </bean>  


[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. // TransactionRun为用户自定义类  
  2. TransactionRun transactionRun = factory.getBean("transactionRun");  
  3. transactionRun.run();  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值