DAO设置模式
区分:
J2EE的组件层次:
客户端---表示层---业务层---数据层---数据库---数据库
DAO属于数据层的操作,即:在DAO中封装了一个表在项目中的多有的操作
举例:
person表 id name password age
定义各种操作:
在java中只有通过接口可以定义标准----DAO规定的就是一个接口
在插入---针对对象插入
对象叫做---vo TO POJO (值对象、传输对象、最根本的JAVA对象)
即:只包含属性和setter 和getter方法
VO对象和表中的数据字段对应
以下是代码:
1 定义接口即:PersonDAO.java:
Code
public interface PersonDAO
{
// 增加操作
public void insert(Person person) throws Exception ;
// 修改操作
public void update(Person person) throws Exception ;
// 删除操作
public void delete(String id) throws Exception ;
// 按ID查询操作
public Person queryById(String id) throws Exception ;
// 查询全部
public List queryAll() throws Exception ;
// 模糊查询
public List queryByLike(String cond) throws Exception ;
}
public interface PersonDAO
{
// 增加操作
public void insert(Person person) throws Exception ;
// 修改操作
public void update(Person person) throws Exception ;
// 删除操作
public void delete(String id) throws Exception ;
// 按ID查询操作
public Person queryById(String id) throws Exception ;
// 查询全部
public List queryAll() throws Exception ;
// 模糊查询
public List queryByLike(String cond) throws Exception ;
}
2 定义数据库连接类:
Code
public class DataBaseConnection
{
private final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
private final String DBURL = "jdbc:oracle:thin:@localhost:1521:JAVA" ;
private final String DBUSER = "ss" ;
private final String DBPASSWORD = "aa" ;
private Connection conn = null ;
public DataBaseConnection()
{
try
{
Class.forName(DBDRIVER) ;
this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
}
catch (Exception e)
{
}
}
// 取得数据库连接
public Connection getConnection()
{
return this.conn ;
}
// 关闭数据库连接
public void close()
{
try
{
this.conn.close() ;
}
catch (Exception e)
{
}
}
};
public class DataBaseConnection
{
private final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
private final String DBURL = "jdbc:oracle:thin:@localhost:1521:JAVA" ;
private final String DBUSER = "ss" ;
private final String DBPASSWORD = "aa" ;
private Connection conn = null ;
public DataBaseConnection()
{
try
{
Class.forName(DBDRIVER) ;
this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
}
catch (Exception e)
{
}
}
// 取得数据库连接
public Connection getConnection()
{
return this.conn ;
}
// 关闭数据库连接
public void close()
{
try
{
this.conn.close() ;
}
catch (Exception e)
{
}
}
};
3 实现接口PersonDAOImpl.java
Code
// 此类需要完成具体的数据库操作,需要JDB代码
public class PersonDAOImpl implements PersonDAO
{
// 增加操作
public void insert(Person person) throws Exception
{
String sql = "INSERT INTO person (id,name,password,age,email) VALUES (?,?,?,?,?)" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
pstmt.setString(1,person.getId()) ;
pstmt.setString(2,person.getName()) ;
pstmt.setString(3,person.getPassword()) ;
pstmt.setInt(4,person.getAge()) ;
pstmt.setString(5,person.getEmail()) ;
// 进行数据库更新操作
pstmt.executeUpdate() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
}
// 修改操作
public void update(Person person) throws Exception
{
String sql = "UPDATE person SET name=?,password=?,age=?,email=? WHERE id=?" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
pstmt.setString(1,person.getName()) ;
pstmt.setString(2,person.getPassword()) ;
pstmt.setInt(3,person.getAge()) ;
pstmt.setString(4,person.getEmail()) ;
pstmt.setString(5,person.getId()) ;
// 进行数据库更新操作
pstmt.executeUpdate() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
}
// 删除操作
public void delete(String id) throws Exception
{
String sql = "DELETE FROM person WHERE id=?" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
pstmt.setString(1,id) ;
// 进行数据库更新操作
pstmt.executeUpdate() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
}
// 按ID查询操作
public Person queryById(String id) throws Exception
{
Person person = null ;
String sql = "SELECT id,name,password,age,email FROM person WHERE id=?" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
pstmt.setString(1,id) ;
// 进行数据库查询操作
ResultSet rs = pstmt.executeQuery() ;
if(rs.next())
{
// 查询出内容,之后将查询出的内容赋值给person对象
person = new Person() ;
person.setId(rs.getString(1)) ;
person.setName(rs.getString(2)) ;
person.setPassword(rs.getString(3)) ;
person.setAge(rs.getInt(4)) ;
person.setEmail(rs.getString(5)) ;
}
rs.close() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
return person ;
}
// 查询全部
public List queryAll() throws Exception
{
List all = new ArrayList() ;
String sql = "SELECT id,name,password,age,email FROM person" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
// 进行数据库查询操作
ResultSet rs = pstmt.executeQuery() ;
while(rs.next())
{
// 查询出内容,之后将查询出的内容赋值给person对象
Person person = new Person() ;
person.setId(rs.getString(1)) ;
person.setName(rs.getString(2)) ;
person.setPassword(rs.getString(3)) ;
person.setAge(rs.getInt(4)) ;
person.setEmail(rs.getString(5)) ;
// 将查询出来的数据加入到List对象之中
all.add(person) ;
}
rs.close() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
return all ;
}
// 模糊查询
public List queryByLike(String cond) throws Exception
{
List all = new ArrayList() ;
String sql = "SELECT id,name,password,age,email FROM person WHERE name LIKE ? or email LIKE ?" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
// 设置模糊查询条件
pstmt.setString(1,"%"+cond+"%") ;
pstmt.setString(2,"%"+cond+"%") ;
// 进行数据库查询操作
ResultSet rs = pstmt.executeQuery() ;
while(rs.next())
{
// 查询出内容,之后将查询出的内容赋值给person对象
Person person = new Person() ;
person.setId(rs.getString(1)) ;
person.setName(rs.getString(2)) ;
person.setPassword(rs.getString(3)) ;
person.setAge(rs.getInt(4)) ;
person.setEmail(rs.getString(5)) ;
// 将查询出来的数据加入到List对象之中
all.add(person) ;
}
rs.close() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
return all ;
}
};
// 此类需要完成具体的数据库操作,需要JDB代码
public class PersonDAOImpl implements PersonDAO
{
// 增加操作
public void insert(Person person) throws Exception
{
String sql = "INSERT INTO person (id,name,password,age,email) VALUES (?,?,?,?,?)" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
pstmt.setString(1,person.getId()) ;
pstmt.setString(2,person.getName()) ;
pstmt.setString(3,person.getPassword()) ;
pstmt.setInt(4,person.getAge()) ;
pstmt.setString(5,person.getEmail()) ;
// 进行数据库更新操作
pstmt.executeUpdate() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
}
// 修改操作
public void update(Person person) throws Exception
{
String sql = "UPDATE person SET name=?,password=?,age=?,email=? WHERE id=?" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
pstmt.setString(1,person.getName()) ;
pstmt.setString(2,person.getPassword()) ;
pstmt.setInt(3,person.getAge()) ;
pstmt.setString(4,person.getEmail()) ;
pstmt.setString(5,person.getId()) ;
// 进行数据库更新操作
pstmt.executeUpdate() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
}
// 删除操作
public void delete(String id) throws Exception
{
String sql = "DELETE FROM person WHERE id=?" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
pstmt.setString(1,id) ;
// 进行数据库更新操作
pstmt.executeUpdate() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
}
// 按ID查询操作
public Person queryById(String id) throws Exception
{
Person person = null ;
String sql = "SELECT id,name,password,age,email FROM person WHERE id=?" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
pstmt.setString(1,id) ;
// 进行数据库查询操作
ResultSet rs = pstmt.executeQuery() ;
if(rs.next())
{
// 查询出内容,之后将查询出的内容赋值给person对象
person = new Person() ;
person.setId(rs.getString(1)) ;
person.setName(rs.getString(2)) ;
person.setPassword(rs.getString(3)) ;
person.setAge(rs.getInt(4)) ;
person.setEmail(rs.getString(5)) ;
}
rs.close() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
return person ;
}
// 查询全部
public List queryAll() throws Exception
{
List all = new ArrayList() ;
String sql = "SELECT id,name,password,age,email FROM person" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
// 进行数据库查询操作
ResultSet rs = pstmt.executeQuery() ;
while(rs.next())
{
// 查询出内容,之后将查询出的内容赋值给person对象
Person person = new Person() ;
person.setId(rs.getString(1)) ;
person.setName(rs.getString(2)) ;
person.setPassword(rs.getString(3)) ;
person.setAge(rs.getInt(4)) ;
person.setEmail(rs.getString(5)) ;
// 将查询出来的数据加入到List对象之中
all.add(person) ;
}
rs.close() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
return all ;
}
// 模糊查询
public List queryByLike(String cond) throws Exception
{
List all = new ArrayList() ;
String sql = "SELECT id,name,password,age,email FROM person WHERE name LIKE ? or email LIKE ?" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
// 下面是针对数据库的具体操作
try
{
// 连接数据库
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
// 设置模糊查询条件
pstmt.setString(1,"%"+cond+"%") ;
pstmt.setString(2,"%"+cond+"%") ;
// 进行数据库查询操作
ResultSet rs = pstmt.executeQuery() ;
while(rs.next())
{
// 查询出内容,之后将查询出的内容赋值给person对象
Person person = new Person() ;
person.setId(rs.getString(1)) ;
person.setName(rs.getString(2)) ;
person.setPassword(rs.getString(3)) ;
person.setAge(rs.getInt(4)) ;
person.setEmail(rs.getString(5)) ;
// 将查询出来的数据加入到List对象之中
all.add(person) ;
}
rs.close() ;
pstmt.close() ;
}
catch (Exception e)
{
throw new Exception("操作出现异常") ;
}
finally
{
// 关闭数据库连接
dbc.close() ;
}
return all ;
}
};
4 接口直接通过其子类实例化,
PersonDAO person=new PersonDAOImpl(),直接影响就是程序在调用时必须知道具体的子类,
这样会造成修改的不方便,如数据库换为了MYSQL
所以,必须使用工厂设计,使前台部关注具体子类是谁
DAO整体设计模式:
调用处---DAO工厂---具体子类实现--完成数据库操作
Code
public class DAOFactory
{
public static PersonDAO getPersonDAOInstance()
{
return new PersonDAOImpl() ;
}
};
public class DAOFactory
{
public static PersonDAO getPersonDAOInstance()
{
return new PersonDAOImpl() ;
}
};