JavaBean
来源:互联网 发布:更改路由器mac 编辑:程序博客网 时间:2024/06/12 01:38
JavaBean
在JSP中如果要应用JSP提供的JavaBean的标签来操作简单类,则此类必须满足如下条件:
如果一个类没有明确地定义一个构造方法,会自动生成一个无参的什么都不做的构造方法。
如果一个类中只包含了属性、setter、getter方法,那么这种类就称为简单JavaBean,还可以称为POJO、VO、TO。
Web开发的标准目录结构
Web项目中各个目录的作用
JavaBean的保存范围
- page:保存在一页的范围中,跳转后此Javabean无效
- request:一个JavaBean对象可以保存在一次服务器跳转的范围中
- session:在一个用户的操作范围中保存,重新打开浏览器时才会声明新的JavaBean
- application:在整个服务器上保存,服务器关闭时才会消失
使用removeAttribute()
删除JavaBean。
设置属性<jsp:setProperty>
DAO设计模式
DAO(Data Access Object,数据访问对象)。
客户层:一般指浏览器
显示层:使用JSP/Servlet进行页面效果的显示
业务层(Business Object,业务对象):会将多个原子性的DAO操作进行组合,组合成一个完整的业务逻辑
数据层(DAO):提供多个原子性的DAO操作,如增加、修改、删除等,都属于原子性的操作。
例子:
VO类,包含了属性、getter、setter方法
package com.wz.lxh.vo;import java.util.Date;public class Emp { private int empno; private String ename; private String job; private Date hiredate; private float sal; public int getEmpno() { return empno; } public void setEmpno(int empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public Date getHiredate() { return hiredate; } public void setHiredate(Date hiredate) { this.hiredate = hiredate; } public float getSal() { return sal; } public void setSal(float sal) { this.sal = sal; }}
DatabaseConnection.java
类,此类主要完成数据库的打开及关闭操作。
package com.wz.lxh.dbc;import java.sql.Connection;import java.sql.DriverManager;public class DatabaseConnection { private static final String DBDRIVER = "com.mysql.jdbc.Driver"; private static final String DBURL = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8"; private static final String DBUSER = "root"; private static final String DBPASS = ""; private Connection conn = null; public DatabaseConnection() throws Exception { try { Class.forName(DBDRIVER); this.conn =DriverManager.getConnection(DBURL,DBUSER, DBPASS); } catch (Exception e) { throw e; } } public Connection getConnection() { return this.conn; } public void close() throws Exception{ if(this.conn != null){ try { this.conn.close(); } catch (Exception e) { throw e; } } }}
定义DAO**接口**,在定义DAO接口之前必须对业务进行详细的分析,要清楚地知道一张表在整个系统中应该具备何种功能。
package com.wz.lxh.dao;import java.util.List;import com.wz.lxh.vo.Emp;//定义DAO操纵接口public interface IEmpDAO { /** * 数据的增加操作,一般以doXxx的方式命名 * @param emp 要增加的数据对象 * @return 是否增加成功的标记 * @throws Exception 有异常交给被调用处处理 */ public boolean doCreate(Emp emp) throws Exception; /** * 查询全部的数据,一般以findXxx的方式命名 * @param keyWord 查询的关键字 * @return 返回全部的查询结构,每一个Emp对象表示表的一行记录 * @throws Exception 有异常交给被调用处处理 */ public List<Emp> findAll(String keyWord) throws Exception; /** * 根据雇员编号查询雇员信息 * @param empno 雇员编号 * @return 雇员的VO对象 * @throws Exception 有异常交给被调用处处理 */ public Emp findById(int empno) throws Exception;}
DAO接口定义完成后需要做具体的实现类,但是这里的DAO实现类有两种,一种是真实主题实现类,另外一种是代理操作类。
真实主题类主要负责具体的数据库操作,在操作时为了性能及安全将使用PreparedStatement
接口完成。
真实主题实现类——EmpDAOImpl.java
package com.wz.lxh.dao.impl;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import com.wz.lxh.dao.IEmpDAO;import com.wz.lxh.vo.Emp;public class EmpDAOImpl implements IEmpDAO { private Connection conn = null;//数据库连接对象 private PreparedStatement pstmt = null;//数据库操作对象 public EmpDAOImpl(Connection conn) { this.conn = conn; } @Override public boolean doCreate(Emp emp) throws Exception { boolean flag = false; String sql = "INSERT INTO emp (empno, ename, job, hiredate ,sal) " +"VALUES (?,?,?,?,?)"; this.pstmt = this.conn.prepareStatement(sql); this.pstmt.setInt(1, emp.getEmpno()); this.pstmt.setString(2, emp.getEname()); this.pstmt.setString(3, emp.getJob()); this.pstmt.setDate(4, new java.sql.Date(emp.getHiredate().getTime())); this.pstmt.setFloat(5, emp.getSal()); if(this.pstmt.executeUpdate() > 0){//更新记录的行数大于0 flag = true; } this.pstmt.close(); return flag; } @Override public List<Emp> findAll(String keyWord) throws Exception { List<Emp> all = new ArrayList<Emp>(); String sql = "SELECT empno, ename, job, hiredate, sal FROM " +"emp WHERE ename LIKE ? OR job LIKE ?"; this.pstmt = this.conn.prepareStatement(sql); this.pstmt.setString(1, "%"+keyWord+"%");//设置查询关键字 this.pstmt.setString(2, "%"+keyWord+"%"); ResultSet rs = this.pstmt.executeQuery(); Emp emp = null; while(rs.next()){ emp = new Emp(); emp.setEmpno(rs.getInt(1)); emp.setEname(rs.getString(2)); emp.setJob(rs.getString(3)); emp.setHiredate(rs.getDate(4)); emp.setSal(rs.getFloat(5)); all.add(emp); } this.pstmt.close(); return all; } @Override public Emp findById(int empno) throws Exception { Emp emp = null; String sql = "SELECT empno, ename, job, hiredate, sal " + "FROM emp WHERE empno=?"; this.pstmt = this.conn.prepareStatement(sql); this.pstmt.setInt(1, empno); ResultSet rs = this.pstmt.executeQuery(); while (rs.next()) { emp = new Emp(); emp.setEmpno(rs.getInt(1)); emp.setEname(rs.getString(2)); emp.setJob(rs.getString(3)); emp.setHiredate(rs.getDate(4)); emp.setSal(rs.getFloat(5)); } this.pstmt.close(); return emp; }}
在真实主题的实现类中,根本没有处理数据库的打开和连接操作,只是通过构造方法取得了数据库的连接,而真正负责打开和关闭的操作将由代理类完成。
代理主题实现类——IEmpDAOProxy.java
package com.wz.lxh.dao.proxy;import java.util.List;import com.wz.lxh.dao.IEmpDAO;import com.wz.lxh.dao.impl.EmpDAOImpl;import com.wz.lxh.dbc.DatabaseConnection;import com.wz.lxh.vo.Emp;public class EmpDAOProxy implements IEmpDAO { private DatabaseConnection dbc = null;//定义数据库连接类 private IEmpDAO dao = null;//声明DAO对象 public EmpDAOProxy() throws Exception { this.dbc = new DatabaseConnection(); this.dao = new EmpDAOImpl(this.dbc.getConnection()); } @Override public boolean doCreate(Emp emp) throws Exception { boolean flag = false; try { if(this.dao.findById(emp.getEmpno()) == null){//如果雇员的编号不存在 flag = this.dao.doCreate(emp);//调用真实主题操作 } } catch (Exception e) { throw e; }finally { this.dbc.close();//关闭数据库连接 } return flag; } @Override public List<Emp> findAll(String keyWord) throws Exception { List<Emp> all = null; try { all = this.dao.findAll(keyWord); } catch (Exception e) { throw e; }finally { this.dbc.close(); } return all; } @Override public Emp findById(int empno) throws Exception { Emp emp = null; try { emp = this.dao.findById(empno); } catch (Exception e) { throw e; }finally { this.dbc.close(); } return emp; }}
编写DAO工厂类,DAOFactory
package com.wz.lxh.factory;import com.wz.lxh.dao.IEmpDAO;import com.wz.lxh.dao.proxy.EmpDAOProxy;public class DAOFactory { public static IEmpDAO getIEmpDAOInstance() throws Exception{ return new EmpDAOProxy(); }}
- JavaBean
- JAVABEAN
- JavaBean
- javabean
- JAVABEAN
- javabean
- javabean
- JavaBean
- JavaBean
- javabean
- JavaBean
- JavaBean
- JavaBean
- JavaBean
- JavaBean
- JavaBean
- JavaBean
- javaBean
- bzoj4538: [Hnoi2016]网络
- Java创建新文件的同时创建相应目录
- Java代码规范和一些常见问题
- Puzzle - Light Bulb Switching
- mac osx下 react 开发环境搭建
- JavaBean
- 数据结构之循环链表
- php中代码开始标志类型(<?php ?>,<? ?>,<?= ?>,<% %>,<%= %>)
- android-引导页的实现方式
- 对HttpClient的理解
- POJ 3104-Drying(二分+贪心)
- 平衡二叉树
- eclipse中使用git
- oracle临时表