简单的三层框架以及使用dbutils进行数据库操作(入门)
1.搭建三层框架
1.1.什么是三层框架
三层框架就是将代码简单的分为三层并对某些地方进行必要的封装,方便日后维护,主要分为以下三部分:
界面层(Swing或JSP):主要是界面显示的代码。
业务层(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、实体类属性的名称要与库中字段的名字一致,否则无法查到结果。
b、ResultSetHandler rsh = 接口的实现类
如果返回对象的话使用newBeanHandler();
如果返回的是集合的话使用 newBeanListHandler();
这里只介绍了dbutils的一种基本用法,至于dbutils的其他用法,有兴趣的朋友可以参考一下dbutils帮助文档。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/saga1320/archive/2008/11/09/3257994.aspx
相关推荐
而为了简化代码,往往会使用JDBC的高级封装框架,例如Apache的DbUtils或者MyBatis等,这些框架提供了更为简洁的API,并且封装了诸如资源管理等复杂的操作。 通过上述内容,可以得知,JDBC是Java进行数据库编程的...
【mybatis01_入门案例】是一个介绍MyBatis框架基础使用的教程,旨在帮助初学者了解MyBatis如何简化数据库操作。以下是对标题和描述中所述知识点的详细说明: 一、框架的理解 框架在软件开发中扮演着重要的角色,它...
在学习Hibernate之前,文档提到了使用DbUtils组件进行数据库操作的例子。DbUtils是一个轻量级的JDBC工具包,简化了JDBC的使用过程。通过DbUtils,开发者可以更容易地执行常见的数据库操作,例如插入、查询等。下面是...
Java的学习之路,学习JavaEE以及框架时候的一些项目,结合博客和源码,让你受益匪浅,适合Java初学者和刚入门开始学框架者用户名与介绍:[Database-support-package]-数据库需要用到的-c3p0/dbcp/dbUtils工具支持包...
尝试自己编写简单的Java应用程序,并利用DBUtils进行数据库操作。这样既能加深理解,也能提高解决问题的能力。随着你对Java基础和DBUtils的深入学习,相信你会很快掌握Java编程,并为找到理想的工作做好准备。记住,...
[Database-support-package]-数据库需要用到的-c3p0/...[myDbPoolUse]C3P0连接池配置/DBCP连接池配置/Apache的DBUtils框架使用 [myFilterDemoWeb]过滤器Filter学习-设置全站编码与设置页面缓存 [myGzipWeb]全站压缩
- **操作XML文件进行CRUD**:最初的方法之一是在DAO层操作XML文件,这种方法虽然简单,但是效率较低,不适合大规模应用。 - **使用原生JDBC**:随后,开发人员开始使用Java数据库连接(JDBC)API直接与数据库交互。...
- **Apache DBUtils**:同样是对JDBC的封装,简化数据库操作。 5. **Mybatis特点**: - **半自动ORM框架**:提供SQL语句映射机制,支持手动编写SQL并结合对象关系映射(ORM)特性。 - **灵活性**:允许直接编写...
本项目"spring_trans.zip"是一个基于Spring框架、DBUtils和XML配置的简单事务控制实例,非常适合初学者入门。以下是这个项目涉及的知识点详解: 1. **Spring框架**:Spring是一个开源的应用框架,提供了依赖注入...
这个项目利用了jsp(JavaServer Pages)、servlet和MySQL数据库,以及第三方库DbUtils和C3P0数据连接池。下面将详细介绍这些关键知识点。 1. **JSP (JavaServer Pages)** JSP是Java的一个动态网页技术,允许开发者...
4. **Apache DBUtils** 和 **Spring JDBCTemplate**:这两个框架对 SQL 语句进行了封装,但相比 ORM 框架,它们的抽象程度较低,需要更多的手动操作。 **使用 Hibernate 的原因** Hibernate 通过封装 JDBC,减少了...
让我们可以操作实体类就实现操作数据库表。 user User id userId user_name userName 今天我们需要做到 实体类中的属性和数据库表的字段名称保持一致 user User id id user_name user_...
MyBatis是一个优秀的持久层框架,它支持简单的SQL查询、存储过程以及高级映射功能。通过使用MyBatis,开发人员可以大大减少JDBC代码量,不再需要手动设置参数和处理结果集。MyBatis提供了一个简单的方法来映射接口和...
MySQL数据库作为数据存储的后端,项目中对其进行了深入学习,包括数据库的设计、表的创建和操作,以及DML(Data Manipulation Language)语句的使用,如INSERT、SELECT、UPDATE和DELETE。通过JDBC(Java Database ...
- 文档通常会涵盖JFinal的安装、配置、路由设置、模板引擎使用、数据库操作、拦截器、插件应用等方面。 - 入门教程会讲解如何创建一个简单的JFinal项目,包括目录结构、配置文件的编写、Hello World示例等。 - ...
- **JDBC**:直接使用Java进行数据库操作,灵活性高但开发效率低。 - **dbutils**:提供了一些工具方法来简化JDBC的操作,提高开发效率。 - **MyBatis**:结合了JDBC的灵活性与ORM(对象关系映射)的优点,适合...
后台框架:Servlet、JSP、JDBC、DbUtils UI界面:EasyUI、jQuery、Ajax 数据库:MySQL 三、系统功能 系统共分为三种用户: 1. 学生模块 个人信息管理、同学通讯录、成绩查询、修改密码 2. 教师...
三、 数据库多表 四、 事务的管理 五、 JDBC 六、 JDBC连接池 七、 DBUtils 八、 Tomcat & Http 九、 Servlet & request & response 十、 JSP & EL 十一、 Cookie & Session 十二、 Listener 十三、 ...