软件分层模式
1.为什么需要分层
业务处理的代码与JSP代码混在一起,不易于阅读,不易于代码维护,采用三层软件设计架构后,软件系统在可扩展性和可复用性方面得到极大提高,2.软件设计中的分层模式
分层模式是最常见的一种架构模式;甚至可以说分层模式是很多架构模式的基础。3.分层
①分层模式是将解决方案的组件分隔不同的层中(分工合作,细化)
②每一层的组件应保持内聚性(部门之间常联系)
③每一层都应与其下面的各层保持松耦合4.三层架构:表示层、业务逻辑层、数据访问层
①表示层:位于最外层 ( 最上层 ),使用户能够直接访问,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作界面。在 Web 应用程 序中,表示层一般以 JSP 文件、HTML文件为主;②业务逻辑层:其主要功能是提供对业务逻辑处理的封装,在业务逻辑层中,通常会定义些接口,表示层通过调用业务逻辑层的接口实现各种操作, 如数据有效性的检验. 业务辑描述等相关功能,业务逻辑层经常放在 service 包或 biz 包下,btz 是英文 buslness 的缩写,意思是 '业务逻 辑";
③数据访问层:该层实现对数据的保存和读取操作。数据访问,可以访问关系数椐库、文件或 XML 文档等。数据访问层通常放在 dao 包下,DAO 是 英文 Data Access Object 的缩写,意思是 "数据访问对象 ";
接口对象
package cn.edu.mju.project1.persiste; import cn.edu.mju.project1.entity.Band; import cn.edu.mju.project1.util.Pager; import java.util.List; public interface IBandDao { /** * 添加数据到数据库band表中 * @param band * @return */ public boolean insert(Band band); /** * 根据主键修改数据库表中的相应数据 * @param band * @return */ public boolean update(Band band); /** * 根据主键删除记录 * @param id * @return */ public boolean delete(Integer id); /** * 根据主键查询数据 * @param id 主键编号 * @return */ public Band findById(Integer id); /** * 查询所有的数据 * @return */ public List<Band> findAll(); /** * 根据条件查询相关数据 * @param band * @return */ public List<Band> find(Band band); /** * 分页查询相关数据 * @param page * @param pageSize * @param band * @return */ public Pager paginate(int page, int pageSize, Band band); }
业务逻辑层
package cn.edu.mju.project1.persiste.impl; import cn.edu.mju.project1.entity.Band; import cn.edu.mju.project1.persiste.IBandDao; import cn.edu.mju.project1.util.Pager; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class BandDao implements IBandDao { @Override public boolean insert(Band band) { boolean ret = false; try { Connection conn = MySqlDbUtil.getConnection(); String sql = "INSERT INTO band(name,remark) VALUES(?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1,band.getName()); pstmt.setString(2, band.getRemark()); int result = pstmt.executeUpdate(); System.out.println(result); if(result > 0){ ret = true; } pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return ret; } @Override public boolean update(Band band) { boolean ret = false; try { Connection conn = MySqlDbUtil.getConnection(); String sql = "UPDATE band SET name=?,remark=? WHERE id=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1,band.getName()); pstmt.setString(2, band.getRemark()); pstmt.setInt(3, band.getId()); int result = pstmt.executeUpdate(); if(result > 0){ ret = true; } pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return ret; } @Override public boolean delete(Integer id) { boolean ret = false; try { Connection conn = MySqlDbUtil.getConnection(); String sql = "DELETE FROM band WHERE id=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, id); int result = pstmt.executeUpdate(); if(result > 0){ ret = true; } pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return ret; } @Override public Band findById(Integer id) { Band band = null; try { Connection conn = MySqlDbUtil.getConnection(); String sql = "SELECT * FROM band WHERE id=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1,id); ResultSet rs = pstmt.executeQuery(); if(rs.next()){ band = new Band(); band.setId(rs.getInt("id")); band.setName(rs.getString("name")); band.setRemark(rs.getString("remark")); } rs.close(); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return band; } @Override public List<Band> findAll() { List<Band> bands = new ArrayList<>(); try { Connection conn = MySqlDbUtil.getConnection(); String sql = "SELECT * FROM band"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while(rs.next()){ Band band = new Band(); band.setId(rs.getInt("id")); band.setName(rs.getString("name")); band.setRemark(rs.getString("remark")); bands.add(band); } rs.close(); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return bands; } @Override public List<Band> find(Band band) { List<Band> bands = new ArrayList<>(); List<Object> params = new ArrayList<>(); try { Connection conn = MySqlDbUtil.getConnection(); String sql = "SELECT * FROM band WHERE 1=1 "; if(band != null){ if(band.getName() != null && !"".equals(band.getName())){ sql = sql + " AND name LIKE ? "; params.add("%" + band.getName() + "%"); } if(band.getRemark() != null && !"".equals(band.getRemark())){ sql = sql + " AND remark LIKE ? "; params.add("%" + band.getRemark() + "%"); } } PreparedStatement pstmt = conn.prepareStatement(sql); for(int i=0; i< params.size(); i++){ pstmt.setObject(i+1, params.get(i)); } ResultSet rs = pstmt.executeQuery(); while(rs.next()){ band = new Band(); band.setId(rs.getInt("id")); band.setName(rs.getString("name")); band.setRemark(rs.getString("remark")); bands.add(band); } rs.close(); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return bands; } }