一般都是javabean对象。
1DAO是Data Access Object数据访问接口。数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
2Bean包就是专门放置属性类的,比如在数据库中创建了一个表,那么你可以把这个表的各个字段,分别定义成属性放置在一个类里,并写明setter和getter方法,然后把这个类放置在bean包下面。
3Conn建立了一个数据库连接对象,其他所有涉及到数据库 *** 作的文件都需要包含这个文件并引用该对象。
J2EE 开发人员使用数据访问对象(Data Access Object DAO)设计模式,以便将低级别的数据访问逻辑与高级别的业务逻辑分离。实现 DAO 模式涉及比编写数据访问代码更多的内容。
数据访问对象(Data Acess Object) 模式
一环境
根据数据源不同,数据访问也不同。根据存储的类型(关系数据库、面向对象数据库、文件等等)和供应商实现不同,持久性存储(比如数据库)的访问差别也很大。
二问题
许多真是的J2EE应用程序需要在一定程度上使用持久性数据。对于许多应用程序,持久性存储是使用不同的机制实现的,并且用来访问这些不同的持久性存储机制的API也有很大的不同。
比如,应用程序使用实体bean(这里应该是指BMP的bean,CMP的bean已大大降低了与RDBMS的耦合)的分布式组件来表示持久性数据,或者使用JDBC API来访问驻留在某关系数据库管理系统(RDBMS)中的数据,这些组件中包含连接性性和数据访问代码会引入这些组件与数据源实现之间的紧密耦合。组件中这类代码依赖性使应用程序从某种数据源迁移到其他种类的数据源将变得非常麻烦和困难。当数据源变化时,组件也需要改变,以便于能够处理新类型的数据源。
(举个例子来说,我们UPTEL系统是使用JDBC API对 ORACLE数据库进行连接和数据访问的,这些JDBC API与SQL语句散布在系统中,当我们需要将UPTEL迁移到其他RDBMS时,比如曾经迁移到INFORMIX,就面临重写数据库连接和访问数据的模块。)
三作用力
1诸如bean管理的实体bean、会话bean、servlet等组件往往需要从持久性存储数据源中检索数据,以及进行数据存储等 *** 作。
2根据产品供应商的不同,持久性存储API差别也很大,这些API和其能力同样根据存储的类型不同也有差别,这样存在以下缺点,即访问这些独立系统的API很不统一。
3组件需要透明于实际的持久性存储或者数据源实现,以便于提供到不同供应商产品、不同存储类型和不同数据源类型的更容易的移植性。
四解决方案
使用数据访问对象(DAO)模式来抽象和封装所有对数据源的访问。DAO管理着与数据源的连接以便检索和存储数据。
DAO实现了用来 *** 作数据源的访问机制。数据源可以时RDBMS,LDAP,File等。依赖于DAO的业务组件为其客户端使用DAO提供更简单的接口。DAO完全向客户端隐藏了数据源实现细节。由于当低层数据源实现变化时,DAO向客户端提供的接口不会变化,所有该模式允许DAO调整到不同的存储模式,而不会影响其客户端或者业务组件。重要的是,DAO充当组件和数据源之间的适配器。
(按照这个理论,如果我们UPTEL系统使用了DAO模式,就可以无缝的从ORACLE迁移到任何一个RDBMS了。梦想总是很完美的,且看看DAO模式如何实现)
>
数据库中有个学生表(STUDENT),字段有学号、姓名、性别、生日。
1、建立学生对应的JavaBean
public class Student {private int no;
private String name;
private int sex;
private Date birthday;
// setter 、getter方法
}
2、从数据库中查询数据封装到JavaBean中
String sql = "select from student";ps = connectionpreparestatement(sql);
rs = psexeceteQuery();
ArrayList<Student> list = new ArrayList<Student>();
while(rshasNext()) {
Student s = new Student();
ssetNo(rsgetInt("NO"));
//
listadd(s);
}
//然后遍历list就可以拿到Student的数据了。
JDBC是java数据库连接技术的简称,它提供了连接各种数据库的能力,这便使程序的可维护性和可扩展性大大的提高了JDBC连接数据库常见的驱动方式有两种,一种是jdbc-odbc即桥连另外一种是纯java驱动一般在做java开发的时候用第二种so前一种我就不说了,纯java驱动方式连接步骤如下:
1先把一个jdbc的jar包导入到项目(用MyEclipse开发)的lib中
2代码如下:
[c-sharp] view plain copy
import javasql;
/
连接数据库帮助类
@author Administrator
/
public class BaseDao {
private static final String DRIVER="commicrosoftsqlserverjdbcSQLServerDriver";
private static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManageSystem";
private static final String USERNAME="sa";
private static final String PASSWORD="sa";
/
连接数据库
@return 数据库连接对象
@throws ClassNotFoundException
@throws SQLException
/
public Connection getConn()throws ClassNotFoundException,SQLException{
ClassforName(DRIVER);
Connection conn = DriverManagergetConnection(URL,USERNAME,PASSWORD);
return conn;
}
/
释放资源
@param conn
@param pstmt
@param rs
@throws SQLException
/
public void closeAll(Connection conn,PreparedStatement pstmt,ResultSet rs)throws SQLException{
if(rs!=null){
rsclose();
}
if(pstmt!=null){
pstmtclose();
}
if(conn!=null){
connclose();
}
}
/
执行SQL语句,可以进行增、删、改的 *** 作
@param sql
@return 影响条数
@throws ClassNotFoundException
@throws SQLException
/
public int executeSQL(String sql)throws ClassNotFoundException,SQLException{
Connection conn = thisgetConn();
PreparedStatement pstmt = connprepareStatement(sql);
int number = pstmtexecuteUpdate();
thiscloseAll(conn, pstmt, null);
return number;
}
}
从代码知道首先吧jdbc驱动类装载java虚拟机中,即ClassforName(DRIVER);其次加载驱动并建立于数据库的连接Connection conn = DriverManagergetConnection(URL,USERNAME,PASSWORD);;然后发送SQL语句并的到结果集之后处理结果,最后要关闭数据库的连接,释放资源当然我说的这样连接数据库的方式使用的软件是sql和MyEclipse
使用配置文件来连接数据库,当然这样的连接需要进行一些配置其实这样的连接用专业术语来说就是连接池,连接池是负责分配管理和释放数据库连接它允许用用程序重复使用一个现有的数据库连接不再重复建立连接释放空闲时间超过最大空闲时间的数据库连接以避免因为没有释放数据库而引起的数据库遗漏
连接池的创建分为以下几个步骤:1配置contextxml文件 这个文件是服务器(指tomcat)的一个conf文件夹中,拷贝出来放入项目的lib文件夹中,具体配置如下:
[c-sharp] view plain copy
<Resource name="jdbc/book" auth="Container" type="javaxsqlDataSource"
maxActive="100" maxIdle="20" maxWait="100" username="sa" password="sa"
driverClassName="commicrosoftsqlserverjdbcSQLServerDriver"
url="jdbc:sqlserver://localhost:1433;dataBaseName=book"
/>在configxml文件中加入Resource标签,然后对数据库信息进行配置,当然这个数据库指的也是sqlserver有疑问可以qq757966892联系
之后把数据库的驱动包,这里指的是sql2005的包放入服务器的lib中,这样以后如果在你自己的机子上都不用在重新导入这个包了
然后就是从MyEclipse中取得这样的连接从而对数据库进行一些 *** 作具体代码如下:
[c-sharp] view plain copy
package weblogindao;
import javasqlConnection;
import javasqlPreparedStatement;
import javasqlResultSet;
import javaxnamingContext;
import javaxnamingInitialContext;
import javaxsqlDataSource;
public class BaseDao {
protected Connection conn;
protected PreparedStatement ps;
protected ResultSet rs;
protected String sql;
public Connection getConn(){
try {
Context context=new InitialContext();
DataSource ds=(DataSource)contextlookup("java:comp/env/jdbc/user");
return dsgetConnection();
} catch (Exception e) {
eprintStackTrace();
return null;
}
}
public void closeAll(Connection conn,PreparedStatement ps,ResultSet rs){
try {
if(rs!=null){
rsclose();
rs=null;
}
if(ps!=null){
psclose();
ps=null;
}
if(conn!=null){
connclose();
conn=null;
}
} catch (Exception e) {
eprintStackTrace();
}
}
}
之后便可以建立业务类从而对数据库进行 *** 作接口是为了屏蔽不同数据库的JDBC实现差异而出现的。
以常见的系统组织结构为例,管理系统里有一个部门department表用于存放部门信息,因为部门下面可能有子部门所以表中的字段要定义成类似树形结构的方式(parentId呀什么的)。这时我们想在java中用sql去查询指定部门下的数据,你就要考虑不同数据库的SQL语句的问题了:Oracle sql提供了树查询的方法,你只需要发一句sql就能查询出该部门下的所有子部门信息;但是mysql就不行,mysql就只能通过java递归一条一条查询。那么假如我们的系统即要支持Oracle又要支持mysql,这时我们查询部门怎么办呢?这时就要考虑接口,看下面的代码:
首先定义一个部门接口,该接口有一个findDept方法用于查询部门下的所有子部门
Interface DepartmentDao{
//根据父部门ID查询部门下的所有子部门
public List findDept(int deptId);
}
有了接口,我们就需要有实现类了,这时我们为了考虑兼容性就需要编写两套接口类,一个是用mysql语句实现的类,另一个是用Oracle实现的类:
class MySqlDepartmentDaoImpl implement DepartmentDao{
//根据父部门ID查询部门下的所有子部门
public List findDept(int deptId){String sql="mysql的sql语句"}
}
class OracleDepartmentDaoImpl implement DepartmentDao{
//根据父部门ID查询部门下的所有子部门
public List findDept(int deptId){String sql="Oracle的sql语句"}
}
一个Dao工厂,这个工厂返回部门Dao接口的实例
class DaoFactory{
public DepartmentDao getDepartmentDao(){
if(使用的是Mysql数据库){
return new MySqlDepartmentDaoImpl ();
}else{
return new OracleDepartmentDaoImpl ();
}
}
}
上面的编码DaoFactory是关键,通过这个这个工厂只返回给我们接口实例,这样就屏蔽了不同数据库的差异性(如果用户使用的是mysql数据库就会返回new MySqlDepartmentDaoImpl ()反之为new OracleDepartmentDaoImpl ())。我们在编码中只需要通过DepartmentDao deptDao = DaoFactorygetDepartmentDao();deptDaofindDept就可以查询我们需要的数据了。
所以面向接口编程是很重要的东西,建议你学习一下spring的IOC,代码写多了你就明白接口的重要性了
dao是保存实体的。db里存数据库的相关 *** 作的。vo是界面。servlet是控制层。
举个例子:存钱 *** 作
dao包里的类是存账户信息;db实现帐户余额在数据库中增加并同步到数据库;vo是让用户看到的界面,例如:输入存钱金额;显示余额的;servlet是服务器端和底层交换数据的接口以及控制界面转向哪个界面(是显示提示输入金额的界面啊还是存钱完了后的显示余额界面呢,就是它说了算)。
以上就是关于Java开发“dao”“model”“service”“impl”“util”通常是什么意思全部的内容,包括:Java开发“dao”“model”“service”“impl”“util”通常是什么意思、Java架构中DAO干什么用的、用javabean怎么样才能显示数据库中的数据,(Java与数据库已通过jdbc在另已在dao中连接 )等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)