今天看了一下java-web中分层的相关的知识,其实对于我们初学者来说,一个好的分层结构不仅仅能让我们很好的清楚自己的逻辑,而且对以后项目的合作也是很重要的,其实我们在网上看一下有很多关于分层的例子,但是对于初学者来说,看懂这些逻辑结构需要的需要一定的java基础。我也是用了好几天才理解(暂且这样说吧)九牛一毛。好了,不扯这些没用的了,其实我们从java-web的项目来看实现的是将数据从数据库中显示到前台,或者是将数据从前台输入存入数据库这样的一个过程,我们需要在这个中间过程中对事物进行处理,于是就出现了java-web中的分层。出现了java-web的分层也让逻辑更加的清晰,实现功能更加的强大。其实我们在进行分层的时候,基本上是在java-web项目中创建不同的包,每个包具有不同的功能,请看:
com.cart,也就是 "公司名字.项目名字",下面我们来看一下每个包下的错存放的类的作用如何,获取这个我们来看:
这个图我们从网页上输入数据然后一步一步的存入到数据库中库中将经过的类,当然从数据库中的数据反过来反应到前台,我们说从数据库中数据放到网页上这个过程吧
我们通过这个例子来看起层次结构。,首先是dao层,我在dao层中创建了两个另个类一个是
我们开看baseDao内容:
package com.cart.dao.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//baseDao实现的是数据库 连接,和一个查询的工作
//还有就是数据源的开始和关闭
//这个就是为什么说Dao层用来实现操作数据库
public class BaseDao {
//定义驱类型
private static final String className="oracle.jdbc.driver.OracleDriver";
//定义数据库的url
private static final String url="jdbc:oracle:thin:@127.0.0.1:1521:wdg";
//登录数据库的用户名
private static final String userName="scott";
//登录数据库的密码
private static final String userPwd="tiger";
//获取Connetion对象
public static Connection getConnection() throws ClassNotFoundException, SQLException
{
Connection conn=null;
Class.forName(className);
conn=DriverManager.getConnection(url,userName,userPwd);
return conn;
}
//数据库连接成功
//添加查询数据库并且返回结果
public static ResultSet queryData(String sql) throws ClassNotFoundException, SQLException
{
//获取到数据库连接
Connection conn=getConnection();
//获取执行对象
Statement stmt=conn.createStatement();
//执行结果
ResultSet rs=null;
rs=stmt.executeQuery(sql);
return rs;
}
//关闭数据库源
public static void closeAllResource(Connection conn,Statement stmt,ResultSet rs)
{
//最后打开的先关闭
if(null!=rs)
{
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(null!=stmt)
{
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(null!=conn)
{
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
这个里面有两个方法,一个是连接数据库,一个是关闭数据库打开的资源,当然还有一个是做查询工作,这个查询是
而且这个查询也是没有说针对某一个表,也就是说这个BaseDao我们完全是可是移植到其他的项目中可以说之和数据库打交道,只要我们改动数据库的名称是完全可以迁移的。
然后还有一个类是ProductDaoImpl
package com.cart.dao.impl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.cart.dao.ProductDao;
import com.cart.domain.Product;
public class ProductDaoImpl implements ProductDao{
@Override
public List<Product> quryAllProduct() throws ClassNotFoundException, SQLException {
//查询产品的集合
String sql="select * from prol";
List<Product> products=new ArrayList<>();
//定义产品 对象
Product pro=null;
//创建连接数据库
Connection conn=BaseDao.getConnection();
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
//处理结果集合
if(null!=rs)
{
while(rs.next())
{
pro=new Product(
rs.getInt(1),
rs.getString(2),
rs.getDouble(3),
rs.getInt(4),
rs.getString(5));
//将产品添加到集合中
products.add(pro);
}
}
BaseDao.closeAllResource(conn, stmt, rs);
return products;
}
@Override
public Product isExist(int proId) throws ClassNotFoundException, SQLException {
Product pro=null;
String sql="select * from prol where id="+proId;
//创建连接数据库的对象
System.out.println(sql);
Connection conn=BaseDao.getConnection();
//创建sql连接数据库
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
//创建结果集对象
if(null!=rs)
{
//结果集中存在数据
if(rs.next())
{
pro=new Product(rs.getInt(1),
rs.getString(2),
rs.getInt(3),
rs.getInt(4));
}
}
//关闭资源
BaseDao.closeAllResource(conn, stmt, rs);
return pro;
}
}
这个就使用到上面的BaseDao了具体到某一个数据库,而且是针对某一个实体类所进行的操作,我们可以看到的是查询是针对prol这个数据表,而且isExist是针对某一个一个数据表,其实我们在是在到层的实现,dao包里面创建定义的都是一些接口,比如说ProductDao这个接口:
package com.cart.dao;
import java.sql.SQLException;
import java.util.List;
import com.cart.domain.Product;
public interface ProductDao {
public List<Product> quryAllProduct() throws ClassNotFoundException, SQLException;
public Product isExist(int proId) throws ClassNotFoundException, SQLException;
}
到这个地方我们可以说dao层的功能大致可以看的清楚,其所实现的一些功能是和数据库进行打交道,
实现的是连接数据,关闭资源,还有具体到某一个实现的DaoImpl比如这个地方的是ProductDaoImpl就是实现某某一个表的操作,比如说获取到数据,或者根据ID来查找某一个实体类,更加进一步的是我们可以根据一个值来对数据库里面的表进行一些增啊,删啊,改的之类,这个都是在具体的ProductDaoImpl类里面实现。
通过上面的分析,希望大家对dao层有一定的了解,其他的层,我们下回分解。
2017年1月2日