有待改进-------spring配置数据源写的DAO

    技术2022-05-11  87

     1。我需要一个有关存取图书(书名 出版年月) 的系统

    public class Book {  private int pbYear; private String name;   public void setPbYear(int pbYear) {  this.pbYear=pbYear; }  public void setName(String name) {  this.name=name; }     public int getPbYear() {  return pbYear; }  public String getName() {  return name; } 

    }

     

    2。访问图书的DAO接口:package com.yinbodotcc;import java.util.*;

    public interface IBookDao { public List<Book> select(String name); public void insertBook(Book book);

    }

     

    3。具体DAO实现

    package com.yinbodotcc;

    import java.util.*;import javax.sql.DataSource;

    import java.sql.*;

    public class BookDao implements IBookDao{ private DataSource ds; public void setDs(DataSource ds) {  this.ds=ds; } public List<Book> select(String name) {  Connection con=null;  Statement st=null;  List<Book> books=new ArrayList<Book>();  try  {   String sql="select * from book where name='"+name+"'";   con=ds.getConnection();   st=con.createStatement();   ResultSet rs=st.executeQuery(sql);   while(rs.next())   {    Book b=new Book();    b.setName(rs.getString("name"));    b.setPbYear(rs.getInt("PbYear"));    books.add(b);    System.out.println("又找到一个");       }   return books;        }  catch(SQLException e)  {   e.printStackTrace();  }  finally  {   if(con!=null)   {    try{     con.close();    }    catch(Exception e)    {     e.printStackTrace();    }   }   if(st!=null)   {    try{     st.close();    }    catch(Exception e)    {     e.printStackTrace();    }   }     }  return null;   } public void insertBook(Book book) {  Connection con=null;  Statement st=null;  try  {   String sql="insert into book(name,pbYear) values('"+book.getName()+"',"+book.getPbYear()+")";   con=ds.getConnection();   st=con.createStatement();   st.execute(sql);     }  catch(SQLException e)  {   e.printStackTrace();  }  finally  {   if(con!=null)   {    try{     con.close();    }    catch(Exception e)    {     e.printStackTrace();    }   }   if(st!=null)   {    try{     st.close();    }    catch(Exception e)    {     e.printStackTrace();    }   }     } }

    }

    4。配置文件<?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.springframework.jdbc.datasource.DriverManagerDataSource">

    <!--如果把上面一行换为下面这个,就能用连接池了,且程序需用修改。推荐使用--><!--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></beans>

    5。数据库的建立,create database yay:然后source一个脚本文件:create table book(id int(5) auto_increment primary key, name varchar(40) not null, pbYear int(8))注意:       delete from book where id between 2 and 9;这句可能能帮助你重复试验,也减小数据库数据量。

     

    6。测试用例:package com.yinbodotcc;import java.util.*;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;

    public class Test { public static void main(String[]args) {  Book book1=new Book();  book1.setName("Thinking in Java");  book1.setPbYear(20060808);    Book book2=new Book();  book2.setName("Advanced Java game programming");  book2.setPbYear(20061008);    Book book3=new Book();  book3.setName("Advanced Java game programming");  book3.setPbYear(20050808);    ApplicationContext ac=new FileSystemXmlApplicationContext("spring-config.xml");  IBookDao ib=(IBookDao)ac.getBean("bookDao");     ib.insertBook(book1);  ib.insertBook(book2);  ib.insertBook(book3);    List<Book> list=ib.select("Advanced Java game programming");  for(Book book:list)   System.out.println(book.getName()+":"+book.getPbYear());   }

    }

    完成,呵呵,但是还是比较麻烦,于是我决定在下一课开始改进。


    最新回复(0)