jdbc mysql分层_jdbc的业务分层

为了更明了的安全的操作数据库数据,我们将用户通过java操作数据库管理系统更改数据库表数据的整个过程归纳为三层

-1.表示层:与用户交互,向业务层发送请求得到结果

-2.业务层:用来实现业务逻辑,比如登录注册(处理复杂的逻辑)

-3.数据访问层DAO层:实现对数据库的各种操作(增删改查)

我们在这里主要讲解dao层的分层开发(以oracle的emp表举例)

empmgr包:dao类(BaseDao,EmployeeDao,EmployeeDaoImpl):实现具体的操作数据库管理系统

entity包:存放实体类,根据数据库emp表编写对应实体类Employee

项目下新建一个文件:conn.properties,以键值对的形式存放数据库配置文件(driver=oracle.jdbc.driver.OracleDriver;url=jdbc:oracle:thin:@localhost:1521:orcl;user=scott;pwd=tiger)

下面直接上代码:

1.entity包下的实体类: Employee.java(省略)

2.dao包下的接口:EmployeeDao.java(根据业务需求编写,一般是增删改查)

pubic interface EmployeeDao{

//查询所有员工信息

public List selectAll();

//根据id查员工

public Employ selectById(int id);

//删除指定员工

public boolean deleteById(int id);

//增加新员工

public boolean insertEmp(Employ emp);

//更改员工薪水 --因为这个功能跟以上类似所以省略

public boolean updateEmp(int id,double sal);

}

3.dao子包 impl下的基类BaseDao.java(从EmployeeDaoImpl.java抽取的重复代码)

public class BaseDao{

private static String fileName = "conn.properties";

private static String url;

private static String user;

private static String driver;

private static String pwd;

static{

InputStream is = Thread.currentThread.getclass().getResourceAsStream(fileName

);

//生命一个properties对象

Properties pro = new Properties();

//把输入流is中的数据加载到pro中

pro.load(is);

//通过键读取文件中值得内容

url = pro.getProperties(url);

user = pro.getpropertier(user);

pwd = pro.getProperties(pwd);

driver = pro.getProperties(driver);

}

//获取连接

public Connection getConn(){

Class.forName(driver);

return DriverManager.getConnection(url,user,pwd);

}

//关闭资源

public void closeDBResourse(ResultSet rs,Connection conn , PreparedStatement pstmt){

if(rs!=null)rs.close();

if(conn!=null)conn.close();

if(pstmt!=null)pstmt.close();

}

//使用executeUpadate是抽取的共同部分

public void executeU(PrepaString sql,Object...params){

Connection conn = null;

PreparedStatement pstmt = null;

conn = getConn();

pstmt = conn.prepareStatement(sql);

for(int i=1;i<=params.length;i++){

pstmt.setObject(i,params[i-1]);

pstmt.executeUpdate();

}

closeDBResourse(null,pstmt,conn);

}

}

3.dao包下impl 实现类EmployeeDaoImpl.java,业务层操作此类完成对数据库的访问

public class EmployeeDaoImpl extends BaseDao implements EmployeeDao{

//查询所有员工信息

public List selectAll(){

Connection conn = getConn();

String sql = "select * from emp";

PreparedStatement pstmt = conn.prepareStatement(sql);

ResultSet rs = pstmt.execute();

List empList = new ArrayList();

while(rs.next()){

//根据构造方法获取对应的值

Employee emp = new Employee(rs.getInt("empno")...);

empList.add(emp);

}

closeDBResourse(rs,pstmt,conn);

return empList;

}

//按照id查询员工

public Employee selectById(int id){

Connection conn = genConn();

String sql = "select * from emp where empno = ?";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1,id);

ResultSet rs = pstmt.executeQuery();

if(rs.next()){

Employee emp = new Employee(rs.getInt(empno)...);

}

closeDBResourse(rs,pstmt,conn);

return emp;

}

//删除指定员工信息

public boolean deleteById(int id){

String sql = "delete from emp where empno = ?";

executeU(sql,id);//这里可以准备一个返回值判断执行成功失败

//return true;

}

//添加员工

public boolean insertEmp(Employee emp){

String sql = "insert into emp values(?,?,?,?,?,?)";

executeU(sql,emp.empno,emp.ename.......);

//return true;

}

}

以上代码就是对jdbc 数据访问层进行了简单的封装,从读取preporties文件参数,到实现接口继承抽象类,再到实现类的完成访问功能,是一个典型的使用面向对象编程的步骤,包括了封装继承多态,对重复代码的提取封装,代码分工明确,思路明了,在以后的学习中我们会慢慢体会到分层开发的代码之美.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值