改进了-------spring用JdbcTemplate写的DAO

 1。**************************************首先看DAO类怎么具体实现***********************************************



package com.yinbodotcc;
/*
 * 说明,在下面的例子中,凡是用?的均是我喜欢的,至少以后不用平凡用单引号了,呵呵;
 *
 * 下面这两种格式是通用的,
 * jdbcTemplate.update(sql, new Object[]{new Integer(year)});
 * jdbcTemplate.queryForXX(sql,new Object[]{name})
 *
 */
import java.util.*;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.*;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;

 

public class BookDao2 implements IBookDao
{
 private JdbcTemplate jdbcTemplate;
 
 //设置DataSource,并生成JdbcTemplate实例
 public void setDs(DataSource ds)
 {
  jdbcTemplate=new JdbcTemplate(ds);
 }
 
 //以书名为依据来找寻某本/些书
 public List<Book> select(String name)
 {
  List<Book> books=new ArrayList<Book>();
  
  //下面这个也可以,但是我还是觉得用?的方式比较好
  //String sql="select * from book where name='"+name+"'";
  //Iterator it=jdbcTemplate.queryForList(sql).iterator();
  
  
  String sql="select * from book where name=?";
  Iterator it=jdbcTemplate.queryForList(sql,new Object[]{name}).iterator();
  
  while(it.hasNext())
  {
   Map m=(Map)it.next();
   String theName=m.get("name").toString();
   int theBirthday=new Integer(m.get("pbYear").toString());
   Book tempBook=new Book();
   tempBook.setName(theName);
   tempBook.setPbYear(theBirthday);
   books.add(tempBook);
   
  }
  return books; 
    
 }
 
 //插入某本书
 public void insertBook(Book book)
 {
  //String sql="insert into book(name,pbYear) values('"+book.getName()+"',"+book.getPbYear()+")";
  //jdbcTemplate.execute(sql);
  //或者用update();
  
  String sql="insert into book(name,pbYear) values(?,?)";
  jdbcTemplate.update(sql, new Object[]{book.getName(),book.getPbYear()});
   
 }
 
 //插入很多书
 public void insertBooks(List<Book> book)
 {
  final List<Book> tempBook=book;
  String sql="insert into book(name,pbYear) values(?,?)";
  jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter()
  {
   public void setValues(PreparedStatement ps,int i)throws SQLException
   {
    String name=tempBook.get(i).getName();
    int pbYear=tempBook.get(i).getPbYear();
    ps.setString(1, name);
    ps.setInt(2, pbYear);
   }
   public int getBatchSize()
   {
    return tempBook.size();
   }
  });
    
 }
 
 //更新书的出版年月
 public void updateBookPbYear(Book book,int year)
 {
  //内部类要访问得外围类得变量,必须是final
  final String name=book.getName();
     final String sql="update book set pbYear=? where name='"+name+"'";
     final int temYear=year;
  
  jdbcTemplate.update(new PreparedStatementCreator()
  {
   public PreparedStatement createPreparedStatement(Connection con)throws SQLException
   {
    PreparedStatement ps=con.prepareStatement(sql);
    ps.setInt(1,temYear);
    return ps;
   }
  });
  
  jdbcTemplate.update(sql, new PreparedStatementSetter()
  {
   public void setValues(PreparedStatement ps)throws SQLException
   {
    ps.setInt(1,temYear);
   }
  });
   
  
  
     //虽然需要得是int,但是我们这里给了它Integer是可以得
  //jdbcTemplate.update(sql, new Object[]{new Integer(year)});
  
  //当然直接updae里面放sql语句也是可以的。
 
 }
 
 //从库中删除某书
 public void delete(Book book)
 {
  String sql="delete from book where name=?";
  jdbcTemplate.update(sql, new Object[]{book.getName()});
 }
 
 //查询库中所有的书
 public List<Book> selectAll()
 {
  List<Book> books=new ArrayList<Book>();
    
  
  String sql="select * from book";
  Iterator it=jdbcTemplate.queryForList(sql).iterator();
  
  while(it.hasNext())
  {
   Map m=(Map)it.next();
   String theName=m.get("name").toString();
   int theBirthday=new Integer(m.get("pbYear").toString());
   Book tempBook=new Book();
   tempBook.setName(theName);
   tempBook.setPbYear(theBirthday);
   books.add(tempBook);
   
  }
  return books; 
 }
}

2。***************************************看看接口DAO的具体方法****************************************

package com.yinbodotcc;
import java.util.*;

public interface IBookDao {
 public List<Book> select(String name);
 public void insertBook(Book book);
 public void updateBookPbYear(Book book,int year);
 public void insertBooks(List<Book> book);
 public void delete(Book book);
 public List<Book> selectAll();

}

3。**************************************看看具体配置文件*************************************************

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
 "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
 <property name="driverClassName">
  <value>com.mysql.jdbc.Driver</value>
 </property>
 
 <property name="url">
  <value>jdbc:mysql://localhost:3306/yay</value>
 </property>
 
 <property name="username">
  <value>root</value>
 </property>
 
 <property name="password">
  <value>qwe123</value>
 </property>
</bean>

<bean id="bookDao" class="com.yinbodotcc.BookDao">
 <property name="ds">
  <ref bean="datasource"/>
 </property>
</bean>
<bean id="bookDao2" class="com.yinbodotcc.BookDao2">
 <property name="ds">
  <ref bean="datasource"/>
 </property>
</bean>
</beans>

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值