JDBC分层开发
来源:互联网 发布:cnstorm和淘宝比哪个好 编辑:程序博客网 时间:2024/04/27 23:57
为了更明了的安全的操作数据库数据,我们将用户通过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<Employee> 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{ //从conn.properties读取配置文件中,在静态代码块中为了只读取一次 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<Employee> selectAll(){ Connection conn = getConn(); String sql = "select * from emp"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.execute(); List<Employee> empList = new ArrayList<Employee>(); 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文件参数,到实现接口继承抽象类,再到实现类的完成访问功能,是一个典型的使用面向对象编程的步骤,包括了封装继承多态,对重复代码的提取封装,代码分工明确,思路明了,在以后的学习中我们会慢慢体会到分层开发的代码之美.
1 0
- JDBC分层开发
- JDBC分层事务管理机制
- JDBC分层事务管理机制
- JDBC的分层
- 分层开发
- 分层开发
- 分层开发
- 分层开发
- 分层开发
- 分层开发
- 分层开发思想
- Asp.Net 分层开发
- java开发爱分层
- 分层开发思想
- J2EE开发分层浅析
- 分层开发-三层概念
- 分层开发 单元测试查询
- 分层开发、实体类
- Frscon的使用
- nginx安装lua模块
- 用dimens去实现 屏幕适配
- jQuery 中 attr() 和 prop() 方法的区别
- SynchronizedMap和ConcurrentHashMap的深入分析
- JDBC分层开发
- USB全速和低速设备的检测
- 查看ADB被占用的情况
- IT杂谈之一:野蛮生长到精细分工
- Hibernate - Batch update returned unexpected row count from update: 0 actual row count: 0 expected:
- POJ#1002_487-3279
- STM32启动模式及API
- windows 下 OpenResty 的使用
- apache-->tomcat的方向代理配置