1.       搭建三层框架

1.1.     什么是三层框架

三层框架就是将代码简单的分为三层并对某些地方进行必要的封装,方便日后维护,主要分为以下三部分:

界面层(SwingJSP):主要是界面显示的代码。

业务层(business):主要是处理业务逻辑的代码。

数据访问层(DAO):主要是与数据库交互的代码。


1.2.     各层之间如何协作


关系:界面层(调用)à业务层(调用)à数据访问层(与数据库交互)

         (显示)界面层  ß  (结果)业务层  ß (结果)数据访问层

数据传递:各层之间将数据封装成实体类(entity)进行传递。


写入信息:界面层将用户录入的信息封装成实体类对象,然后传给业务层进行相关的业务处理,然后业务层选择需要调用的数据访问层,数据访问层负责将传递过来的实体对像中封装的信息提取出来,并且拼出SQL语句,将信息写入数据库。


显示信息:数据访问层将数据库中的数据提取出来封装成实体对象,如果有多个对象的话继而封装成集合,然后传递给调用它的业务层进行业务处理,业务层再将处理过的实体对象或是集合传递给调用业务层的界面,界面最后将实体对象或是集合中封装的信息提取出来进行显示。

===============================================================================

2.       编写实例(省略界面层和业务层)


需要的jar包:数据库直连包,dbutils

数据库:stuDB

表:USERS

表结构:userId int NOT NULLIDENTITY(1,1) PRIMARY KEY,

          userName nvarchar(20) NOT NULL,

          password nvarchar(20) NOT NULL,

          realName nvarchar(20) ,

          sex nvarchar(2)

=========================================================

实体类:UsersEntity

view plaincopy to clipboardprint?

package com.saga.entity;  


/**  

*USERS表的实体类

*@author saga1320  

*/  


public class UsersEntity {    

     private int userId;  

    private String userName;  

    private String password;  

    private String realName;  

    private String sex;  

    public UsersEntity() {    

    }    

    public String getPassword() {  

         return password;  

    }  

    public void setPassword(String password) {  

         this.password = password;  

    }  

    public String getRealName() {  

         return realName;  

    }  

    public void setRealName(String realName) {    

         this.realName = realName;    

   }    

    public String getSex() {    

         return sex;    

    }    

    public void setSex(String sex) {    

         this.sex = sex;    

     }    

    public int getUserId() {  

         return userId;    

    }    

    public void setUserId(int userId) {    

         this.userId = userId;    

    }    

    public String getUserName() {    

         return userName;    

    }    

    public void setUserName(String userName) {    

         this.userName = userName;    

    }          

}  



package com.saga.entity;


/**


*USERS表的实体类


*@author saga1320


*/


public class UsersEntity {  


    private int userId;


    private String userName;


    private String password;


    private String realName;


    private String sex;


    public UsersEntity() {


    }




    public String getPassword() {


         return password;


    }


    public void setPassword(String password) {


         this.password = password;


    }


    public String getRealName() {


         return realName;


    }


    public void setRealName(String realName) {


         this.realName = realName;


    }


    public String getSex() {


         return sex;


    }


    public void setSex(String sex) {


         this.sex = sex;


    }


    public int getUserId() {


         return userId;


    }


    public void setUserId(int userId) {


         this.userId = userId;


    }


    public String getUserName() {


         return userName;


    }


    public void setUserName(String userName) {


         this.userName = userName;


    }    


}

===============================================================

2.1.     没有使用dbutils的数据访问层(只需直连包)


首先,创建所有数据访问类的抽象基类BaseDAO

view plaincopy to clipboardprint?

package com.saga.dao;  

import java.sql.Connection;  

import java.sql.DriverManager;  

import java.sql.PreparedStatement;  

import java.sql.ResultSet;  

import java.sql.SQLException;  

/**  

* 所有数据访问类的基类,其他数据访问类需继承此类

*@author saga1320  

*/

public abstract class BaseDAO {    

    //数据库连接驱动名

    private static final String DRIVERNAME    

="com.microsoft.sqlserver.jdbc.SQLServerDriver";    

    //数据库连接URL    

    private static final String RUL    

="jdbc:sqlserver://localhost:1433;databaseName=stuDB";    

    //数据库用户名

    private static final String UNAME="sa";    

    //密码

    private static final String PWD="";    

    private Connection conn=null;    


    /**  

     * 建立数据库连接

     * @throws ClassNotFoundException  

     * @throws SQLException    

     */    

    private void getConnection()      

throws ClassNotFoundException,SQLException{    

         Class.forName(DRIVERNAME);    

         conn=DriverManager.getConnection(RUL,UNAME,PWD);        

    }          

    public BaseDAO() {    

         super();    

    }    


    /**  

     * 执行增,删,改,(带参数)  

     * @param strSql sql语句

     * @param param 参数

     * @return sql语句所影响的行数

     * @throws SQLException    

     * @throws ClassNotFoundException  

     */  

    protected int executeUpdate(String strSql,Object[] param)    


throws ClassNotFoundException,SQLException{  


         if(conn==null || conn.isClosed()){  


                this.getConnection();  


         }  


         PreparedStatement pstat=conn.prepareStatement(strSql);  


         for (int i = 0; i < param.length; i++) {  


               pstat.setObject(i+1,param[i]);  


         }  


         return pstat.executeUpdate();  


    }  


    /**  


     * 执行增,删,改,(不带参数)  


     * @param strSql sql语句


     * @return sql语句所影响的行数


     * @throws SQLException  


     * @throws ClassNotFoundException  


     */  


    protected int executeUpdate(String strSql)    


throws ClassNotFoundException,SQLException{  


         if(conn==null || conn.isClosed()){  


                this.getConnection();  


         }  


         PreparedStatement pstat=conn.prepareStatement(strSql);  


         return pstat.executeUpdate();  


    }  


    /**  


     * 带参数查询


     * @param strSql sql语句


     * @param param 参数


     * @return ResultSet 结果集


     * @throws ClassNotFoundException  


     * @throws SQLException  


     */  


    protected ResultSet executeQuery(String strSql,Object[] param)    


throws SQLException,ClassNotFoundException{  


         if(conn==null || conn.isClosed()){  


                this.getConnection();  


         }  


         PreparedStatement pstat=conn.prepareStatement(strSql);  


         for (int i = 0; i < param.length; i++) {  


               pstat.setObject(i+1,param[i]);  


         }  


         return pstat.executeQuery();  


    }  


    /**  


     * 无参查询


     * @param strSql sql语句


     * @param param 参数


     * @return ResultSet 结果集


     * @throws SQLException  


     * @throws ClassNotFoundException  


     */  


    protected ResultSet executeQuery(String strSql)    


throws SQLException,ClassNotFoundException{  


         if(conn==null || conn.isClosed()){  


                this.getConnection();  


         }  


         PreparedStatement pstat=conn.prepareStatement(strSql);  


         return pstat.executeQuery();  


    }  




    /**  


     * 关闭数据库连接


     * @throws SQLException  


     */  

    protected void closeConnection() throws SQLException{  

         if(conn!=null){  

                if(!conn.isClosed()){  

                     conn.close();  

                }  

         }  

    }  

}  

package com.saga.dao;




import java.sql.Connection;


import java.sql.DriverManager;


import java.sql.PreparedStatement;


import java.sql.ResultSet;


import java.sql.SQLException;


/**


* 所有数据访问类的基类,其他数据访问类需继承此类


*@author saga1320


*/


public abstract class BaseDAO {


    //数据库连接驱动名


    private static final String DRIVERNAME


="com.microsoft.sqlserver.jdbc.SQLServerDriver";


    //数据库连接URL


    private static final String RUL


="jdbc:sqlserver://localhost:1433;databaseName=stuDB";


    //数据库用户名


    private static final String UNAME="sa";


    //密码


    private static final String PWD="";


    private Connection conn=null;




    /**


     * 建立数据库连接


     * @throws ClassNotFoundException


     * @throws SQLException


     */


    private void getConnection()


throws ClassNotFoundException,SQLException{


         Class.forName(DRIVERNAME);


         conn=DriverManager.getConnection(RUL,UNAME,PWD);  


    }




    public BaseDAO() {


         super();


    }




    /**


     * 执行增,删,改,(带参数)


     * @param strSql sql语句


     * @param param 参数


     * @return sql语句所影响的行数


     * @throws SQLException


     * @throws ClassNotFoundException


     */


    protected int executeUpdate(String strSql,Object[] param)


throws ClassNotFoundException,SQLException{


         if(conn==null || conn.isClosed()){


                this.getConnection();


         }


         PreparedStatement pstat=conn.prepareStatement(strSql);


         for (int i = 0; i < param.length; i++) {


                pstat.setObject(i+1,param[i]);


         }


         return pstat.executeUpdate();


    }


    /**


     * 执行增,删,改,(不带参数)


     * @param strSql sql语句


     * @return sql语句所影响的行数


     * @throws SQLException


     * @throws ClassNotFoundException


     */


    protected int executeUpdate(String strSql)


throws ClassNotFoundException,SQLException{


         if(conn==null || conn.isClosed()){


                this.getConnection();


         }


         PreparedStatement pstat=conn.prepareStatement(strSql);


         return pstat.executeUpdate();


    }


    /**


     * 带参数查询


     * @param strSql sql语句


     * @param param 参数


     * @return ResultSet 结果集


     * @throws ClassNotFoundException


     * @throws SQLException


     */


    protected ResultSet executeQuery(String strSql,Object[] param)


throws SQLException,ClassNotFoundException{


         if(conn==null || conn.isClosed()){


                this.getConnection();


         }


         PreparedStatement pstat=conn.prepareStatement(strSql);


         for (int i = 0; i < param.length; i++) {


                pstat.setObject(i+1,param[i]);


         }


         return pstat.executeQuery();


    }


    /**


     * 无参查询


     * @param strSql sql语句


     * @param param 参数


     * @return ResultSet 结果集


     * @throws SQLException


     * @throws ClassNotFoundException


     */


    protected ResultSet executeQuery(String strSql)


throws SQLException,ClassNotFoundException{


         if(conn==null || conn.isClosed()){


                this.getConnection();


         }


          PreparedStatementpstat=conn.prepareStatement(strSql);


         return pstat.executeQuery();


    }




    /**


     * 关闭数据库连接


     * @throws SQLException


     */

    protected void closeConnection() throws SQLException{

         if(conn!=null){

                if(!conn.isClosed()){

                     conn.close();

                }

         }

    }

}






接着,创建USERS表的数据访问类:USersDAO




view plaincopy to clipboardprint?

package com.saga.dao;  




import java.sql.ResultSet;  


import java.sql.SQLException;  


import java.util.ArrayList;  


import java.util.List;  




import com.saga.entity.UsersEntity;  




/**  


*USERS表的数据访问类,继承BaseDAO  


*@author saga1320  


*/  




public class UsersDAO extends BaseDAO{  




    public UsersDAO(){  


         super();  


    }  




    /**  


     * USERS表中添加一条数据


     * @param user UsersEntity封装了数据信息


     * @return int 添加记录的行数


     * @throws SQLException  


     * @throws ClassNotFoundException  


     */  


    public int insertUser(UsersEntity user)    


throws ClassNotFoundException,SQLException{  


         int = 0;  


         String strSql="INSERT INTO USERS VALUES(?,?,?,?)";  


         Object [] param = new Object [] {  


                user.getUserName(),  


                user.getPassword(),  


                user.getRealName(),  


               user.getSex()  


         };  


         i = super.executeUpdate(strSql, param);  


         super.closeConnection();  


         return i;  


    }  




  /**  


     * 根据userId修改USERS信息


      * @param user UsersEntity封装了数据信息


     * @return int 修改记录的行数


     * @throws SQLException  


     * @throws ClassNotFoundException  


     */  


    public int updateUsersById(UsersEntity user)    


throws ClassNotFoundException, SQLException{  


         int = 0;  


         String strSql="UPDATE USERS SET userName=?, password=?, realName=?,sex= WHEREuserId=?";  


         Object [] param = new Object [] {  


                user.getUserName(),  


               user.getPassword(),  


                user.getRealName(),  


                user.getSex(),  


                user.getUserId()  


         };  


         i = super.executeUpdate(strSql, param);  


         super.closeConnection();  


         return i;  


    }  




     /**  


     * 查询USERS表的所有信息


     * @return List<UsersEntity> UsersEntity实体的泛型集合


     * @throws SQLException  


     * @throws ClassNotFoundException  


     */  


    public List<UsersEntity> getAllUsers()    


throws SQLException,ClassNotFoundException{  


         List<UsersEntity> listUsers = newArrayList<UsersEntity>();  


         String strSql="SELECT * FROM USERS";  


         ResultSet rs=this.executeQuery(strSql);  


         while(rs.next()){  


                UsersEntity user=newUsersEntity();  


               user.setUserId(rs.getInt("userId"));  


                user.setUserName(rs.getString("userName"));  


               user.setPassword(rs.getString("password"));  


               user.setRealName(rs.getString("RealName"));  


               user.setSex(rs.getString("sex"));  


                listUsers.add(user);  


         }  


         super.closeConnection();  


         return listUsers;  


    }  




     /**  


     * 根据userId查询USERS表信息


     * @return UsersEntity  


     * @throws SQLException  


     * @throws ClassNotFoundException  


     */  


    public UsersEntity getUserById(String userId)    


throws SQLException,ClassNotFoundException{  


         UsersEntity User = null;  


         String strSql="SELECT * FROM USERS WHERE userId=?";  


         ResultSet rs=this.executeQuery(strSql, new Object [] {userId});  


         if(rs.next()){  


                user=new UsersEntity();  


               user.setUserId(rs.getInt("userId"));  


               user.setUserName(rs.getString("userName"));  


               user.setPassword(rs.getString("password"));  


               user.setRealName(rs.getString("RealName"));  


               user.setSex(rs.getString("sex"));  


         }  


         super.closeConnection();  


         return User;  


    }  


}  

package com.saga.dao;




import java.sql.ResultSet;


import java.sql.SQLException;


import java.util.ArrayList;


import java.util.List;




import com.saga.entity.UsersEntity;




/**


*USERS表的数据访问类,继承BaseDAO


*@author saga1320


*/




public class UsersDAO extends BaseDAO {




    public UsersDAO(){


         super();


    }




    /**


     * USERS表中添加一条数据


     * @param user UsersEntity封装了数据信息


     * @return int 添加记录的行数


     * @throws SQLException


     * @throws ClassNotFoundException


     */


    public int insertUser(UsersEntity user)


throws ClassNotFoundException,SQLException{


         int = 0;


         String strSql="INSERT INTO USERS VALUES(?,?,?,?)";


         Object [] param = new Object [] {


                user.getUserName(),


                user.getPassword(),


                user.getRealName(),


                user.getSex()


         };


         i = super.executeUpdate(strSql, param);


         super.closeConnection();


         return i;


    }




  /**


     * 根据userId修改USERS信息


     * @param user UsersEntity封装了数据信息


      * @return int 修改记录的行数


     * @throws SQLException


     * @throws ClassNotFoundException


     */


    public int updateUsersById(UsersEntity user)


throws ClassNotFoundException,SQLException{


         int = 0;


         String strSql="UPDATE USERS SET userName=?, password=?, realName=?,sex= WHERE userId=?";


         Object [] param = new Object [] {


                user.getUserName(),


                user.getPassword(),


                user.getRealName(),


                user.getSex(),


                user.getUserId()


         };


         i = super.executeUpdate(strSql, param);


         super.closeConnection();


         return i;


    }




     /**


     * 查询USERS表的所有信息


     * @return List<UsersEntity> UsersEntity实体的泛型集合


     * @throws SQLException


     * @throws ClassNotFoundException


     */


    public List<UsersEntity> getAllUsers()


throws SQLException,ClassNotFoundException{


         List<UsersEntity> listUsers = new ArrayList<UsersEntity>();


         String strSql="SELECT * FROM USERS";


         ResultSet rs=this.executeQuery(strSql);


         while(rs.next()){


                UsersEntity user=newUsersEntity();


               user.setUserId(rs.getInt("userId"));


               user.setUserName(rs.getString("userName"));


               user.setPassword(rs.getString("password"));


               user.setRealName(rs.getString("RealName"));


                user.setSex(rs.getString("sex"));


                listUsers.add(user);


         }


         super.closeConnection();


         return listUsers;


    }




     /**


     * 根据userId查询USERS表信息


     * @return UsersEntity


     * @throws SQLException


     * @throws ClassNotFoundException


     */


    public UsersEntity getUserById(String userId)


throws SQLException,ClassNotFoundException{


         UsersEntity User = null;


         String strSql="SELECT * FROM USERS WHERE userId=?";


         ResultSet rs=this.executeQuery(strSql, new Object [] {userId});


         if(rs.next()){


                user=new UsersEntity();


               user.setUserId(rs.getInt("userId"));


                user.setUserName(rs.getString("userName"));


               user.setPassword(rs.getString("password"));


               user.setRealName(rs.getString("RealName"));


               user.setSex(rs.getString("sex"));


         }


         super.closeConnection();


         return User;


    }


}




最后,只需要在业务层调用这些方法就行了。



==============================================================================================================================================================

2.2.     使用dbutils的数据访问层(需直连包,dbutils包)


首先,创建所有数据访问类的抽象基类BaseDAO

view plaincopy to clipboardprint?

package com.saga.dao;  

import java.sql.Connection;  

import java.sql.DriverManager;  

import java.sql.SQLException;    

import java.util.List;    

importorg.apache.commons.dbutils.DbUtils;    

importorg.apache.commons.dbutils.QueryRunner;    

importorg.apache.commons.dbutils.ResultSetHandler;  



public abstract class BaseDAO {    

    private static final String DRIVERNAME      

="com.microsoft.sqlserver.jdbc.SQLServerDriver";    

    private static final String URL    

="jdbc:sqlserver://localhost:1433;databaseName=stuDB";    

    private static final String UID = "sa";    

    private static final String PWD = "";    

    private Connection conn = null;                

    public BaseDAO() {    

         super();    

    }              

------------------------------------------------------------------------------------------------  

    /**  


     *  建立数据库连接

     * @throws SQLException  

     */  

    private void getConnection() throws SQLException{    

         DbUtils.loadDriver(DRIVERNAME);    

         conn = DriverManager.getConnection(URL,UID,PWD);    

    }    

    /**  

     *  关闭数据库连接

     * @throws SQLException  

     */    

    protected void closeConnection() throws SQLException{    

         DbUtils.close(conn);  

    }    

=================================================

    /**  


     * 带参数的查询

     * @param strSql 查询语句

     * @param param 参数

     * @param rsh ResultSetHandler接口的实现对象

     * @return 查询结果的集合

     * @throws SQLException  

     */  

    protected List executeQuery(String strSql, Object[] param,ResultSetHandler rsh) throws SQLException{  

         if (conn == null || conn.isClosed()) {  

                this.getConnection();  

         }  

         QueryRunner runner = new QueryRunner();  

         return (List) runner.query(conn, strSql, param, rsh);  

    }  


    /**  


     * 不带参数的查询

     * @param strSql 查询语句

     * @param rsh ResultSetHandler接口的实现对象

     * @return 查询结果的集合

     * @throws SQLException  

     */  

    protected List executeQuery(String strSql, ResultSetHandler rsh) throwsSQLException{  

         if (conn == null || conn.isClosed()) {  

                this.getConnection();  

         }  

         QueryRunner runner = new QueryRunner();  

         return (List) runner.query(conn, strSql, rsh);  

    }  

    /**  

     * 查询一条记录

     * @param strSql 查询语句

     * @param param 参数

     * @param rsh ResultSetHandler接口的实现对象

     * @return 记录对应的实体

     * @throws SQLException  

     */  

    protected Object executeQueryObject(String strSql, Object[] param,ResultSetHandler rsh) throws SQLException{  

         if (conn == null || conn.isClosed()) {  

               this.getConnection();  

         }  

         QueryRunner runner = new QueryRunner();  

         return  runner.query(conn, strSql,param, rsh);  

     }  

    /**  

     * 带参数的增,,

     * @param strSql ,,改的执行语句

     * @param param 参数

     * @return 影响的记录数

     * @throws SQLException  

     */  

    protected int executeUpdate(String strSql, Object[] param) throwsSQLException{  

         if (conn == null || conn.isClosed()) {  

                this.getConnection();  

         }  

         QueryRunner runner = new QueryRunner();  

         return runner.update(conn, strSql, param);  

    }  


    /**  

     * 不带参数的增,,

     * @param strSql ,,改的执行语句

     * @return 影响的记录数

     * @throws SQLException  

     */  

    protected int executeUpdate(String strSql) throws SQLException{  

         if (conn == null || conn.isClosed()) {  

                this.getConnection();  

         }  

         QueryRunner runner = new QueryRunner();  

         return runner.update(conn, strSql);  

    }  

}  



package com.saga.dao;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.List;

import org.apache.commons.dbutils.DbUtils;

importorg.apache.commons.dbutils.QueryRunner;

importorg.apache.commons.dbutils.ResultSetHandler;

public abstract class BaseDAO {

    private static final String DRIVERNAME

= "com.microsoft.sqlserver.jdbc.SQLServerDriver";

    private static final String URL

="jdbc:sqlserver://localhost:1433;databaseName=stuDB";

    private static final String UID = "sa";

    private static final String PWD = "";

    private Connection conn = null;

    public BaseDAO() {

         super();

    }



    /**


     *  建立数据库连接

     * @throws SQLException

     */

    private void getConnection() throws SQLException{


         DbUtils.loadDriver(DRIVERNAME);


         conn = DriverManager.getConnection(URL,UID,PWD);


    }




    /**


     *  关闭数据库连接


     * @throws SQLException


     */


    protected void closeConnection() throws SQLException{


         DbUtils.close(conn);


    }




    /**


     * 带参数的查询


     * @param strSql 查询语句


     * @param param 参数


     * @param rsh ResultSetHandler接口的实现对象


     * @return 查询结果的集合


     * @throws SQLException


     */


    protected List executeQuery(String strSql, Object[] param,ResultSetHandler rsh) throws SQLException{


         if (conn == null || conn.isClosed()) {


                this.getConnection();


         }


         QueryRunner runner = new QueryRunner();


         return (List) runner.query(conn, strSql, param, rsh);


    }




    /**


     * 不带参数的查询


     * @param strSql 查询语句


     * @param rsh ResultSetHandler接口的实现对象


     * @return 查询结果的集合


     * @throws SQLException


     */


    protected List executeQuery(String strSql, ResultSetHandler rsh) throwsSQLException{


         if (conn == null || conn.isClosed()) {


                this.getConnection();


         }


         QueryRunner runner = new QueryRunner();


         return (List) runner.query(conn, strSql, rsh);


    }




    /**


     * 查询一条记录


     * @param strSql 查询语句


     * @param param 参数


     * @param rsh ResultSetHandler接口的实现对象


     * @return 记录对应的实体


     * @throws SQLException


     */


    protected Object executeQueryObject(String strSql, Object[] param,ResultSetHandler rsh) throws SQLException{


         if (conn == null || conn.isClosed()) {


                this.getConnection();


         }


         QueryRunner runner = new QueryRunner();


         return  runner.query(conn, strSql,param, rsh);


    }




    /**


     * 带参数的增,,


     * @param strSql ,,改的执行语句


     * @param param 参数


     * @return 影响的记录数


     * @throws SQLException


     */


    protected int executeUpdate(String strSql, Object[] param) throwsSQLException{


         if (conn == null || conn.isClosed()) {


                this.getConnection();


         }


         QueryRunner runner = new QueryRunner();


         return runner.update(conn, strSql, param);


    }




    /**


     * 不带参数的增,,


     * @param strSql ,,改的执行语句


     * @return 影响的记录数


     * @throws SQLException


     */


    protected int executeUpdate(String strSql) throws SQLException{


         if (conn == null || conn.isClosed()) {


                this.getConnection();


         }


         QueryRunner runner = new QueryRunner();


         return runner.update(conn, strSql);


    }


}





接着,创建USERS表的数据访问类:USersDAO



view plaincopy to clipboardprint?

package com.saga.dao;  




import java.sql.SQLException;  


import java.util.List;  




importorg.apache.commons.dbutils.ResultSetHandler;  


importorg.apache.commons.dbutils.handlers.BeanHandler;  


importorg.apache.commons.dbutils.handlers.BeanListHandler;  




import com.saga.entity.UsersEntity;  




public class UsersDAO extends BaseDAO{  




    public UsersDAO() {  


         super();  


         // TODO Auto-generated constructor stub  


    }  




    /**  


     * 得到USERS表所有的记录


     * @return List UserEntity的集合


     * @throws SQLException  


     */  


    public List getAllUsers() throws SQLException{  


         List listUsers = null;  


         String strSql = "SELECT * FROM USERS";  


         ResultSetHandler rsh = new BeanListHandler(UsersEntity.class);  


         listUsers = super.executeQuery(strSql, rsh);  


         super.closeConnection();  


         return listUsers;  


    }  




    /**  


     * 根据USERS编号得到USERS信息


     * @param userId USERS编号


     * @return UsersEntity  


     * @throws SQLException  


     */  


    public UsersEntity getUsersById(String userId) throws SQLException{  


         UsersEntity user = null;  


          String strSql = "SELECT * FROMUSERS WHERE userId = ?";  


         ResultSetHandler rsh = new BeanHandler(UsersEntity.class);  


         user = (UsersEntity) super.executeQueryObject(strSql, new Object[]{userId}, rsh);  


         super.closeConnection();  


         return user;  


    }  




    /**  


     * USERS表添加一条记录


     * @param user UsersEntity对象


     * @return int  


     * @throws SQLException  


     */  


     public int insertUser(UsersEntity user)throws SQLException{  


         int i = 0;  


         String strSql = "INSERT INTO USERS VALUES(?,?,?,?)";  


         Object [] param = new Object [] {  


                     user.getUserName(),  


                     user.getPassword(),  


                     user.getRealName(),  


                     user.getSex()  


         };  


         i = super.executeUpdate(strSql, param);  


         super.closeConnection();  


         return i;  


    }  




    /**  


     * 根据USERS编号修改USERS信息


     * @param user UsersEntity对象


     * @return int  


     * @throws SQLException  


     */  


     public int updateUserById(UsersEntityuser) throws SQLException{  


         int i = 0;  


         String strSql = "UPDATE USERS SET userName=?, password=?,realName=?, sex= WHEREuserId=?";  


         Object [] param = new Object [] {  


                     user.getUserName(),  


                     user.getPassword(),  


                     user.getRealName(),  


                     user.getSex(),  


                     user.getUserId()  


         };  


         i = super.executeUpdate(strSql, param);  


         super.closeConnection();  


         return i;  


    }  


}  

package com.saga.dao;




import java.sql.SQLException;


import java.util.List;




import org.apache.commons.dbutils.ResultSetHandler;


importorg.apache.commons.dbutils.handlers.BeanHandler;


importorg.apache.commons.dbutils.handlers.BeanListHandler;




import com.saga.entity.UsersEntity;




public class UsersDAO extends BaseDAO {




    public UsersDAO() {


         super();


         // TODO Auto-generated constructor stub


    }




    /**


     * 得到USERS表所有的记录


     * @return List UserEntity的集合


     * @throws SQLException


     */


    public List getAllUsers() throws SQLException{


         List listUsers = null;


         String strSql = "SELECT * FROM USERS";


         ResultSetHandler rsh = new BeanListHandler(UsersEntity.class);


         listUsers = super.executeQuery(strSql, rsh);


         super.closeConnection();


         return listUsers;


    }




    /**


     * 根据USERS编号得到USERS信息


     * @param userId USERS编号


     * @return UsersEntity


     * @throws SQLException


     */


    public UsersEntity getUsersById(String userId) throws SQLException{


         UsersEntity user = null;


         String strSql = "SELECT * FROM USERS WHERE userId = ?";


         ResultSetHandler rsh = new BeanHandler(UsersEntity.class);


          user = (UsersEntity)super.executeQueryObject(strSql, new Object []{userId}, rsh);


         super.closeConnection();


         return user;


    }




    /**


     * USERS表添加一条记录


     * @param user UsersEntity对象


     * @return int


     * @throws SQLException


     */


    public int insertUser(UsersEntity user) throws SQLException{


         int i = 0;


         String strSql = "INSERT INTO USERS VALUES(?,?,?,?)";


         Object [] param = new Object [] {


                     user.getUserName(),


                     user.getPassword(),


                     user.getRealName(),


                     user.getSex()


         };


         i = super.executeUpdate(strSql, param);


         super.closeConnection();


         return i;


    }




    /**


     * 根据USERS编号修改USERS信息


     * @param user UsersEntity对象


     * @return int


     * @throws SQLException


     */


    public int updateUserById(UsersEntity user) throws SQLException{


         int i = 0;


         String strSql = "UPDATE USERS SET userName=?, password=?,realName=?, sex= WHERE userId=?";


         Object [] param = new Object [] {


                    user.getUserName(),


                     user.getPassword(),


                     user.getRealName(),


                     user.getSex(),


                     user.getUserId()


         };


         i = super.executeUpdate(strSql, param);


         super.closeConnection();


         return i;


    }


}






最后,只需要在业务层调用这些方法就行了。


但是,如果使用dbutils包的话,需要注意以下几点:


a、实体类属性的名称要与库中字段的名字一致,否则无法查到结果。


bResultSetHandler rsh = 接口的实现类


如果返回对象的话使用newBeanHandler();


如果返回的是集合的话使用 newBeanListHandler();    




这里只介绍了dbutils的一种基本用法,至于dbutils的其他用法,有兴趣的朋友可以参考一下dbutils帮助文档。




本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/saga1320/archive/2008/11/09/3257994.aspx