一、三层组成
1 表示层(USL,Userm Show Layer 视图层)
(1)前台:
对应于MVC中的View,用于与用户交互,界面的显示。
(通过jsp,js,html,css,jquery等Web前端技术)代码位置:WebContent
(2)后台:
对应MVC的Controller,用于控制跳转,调用业务逻辑层.
(通过Selvlet ,SpringMVC ,Struts等实现)2 业务逻辑层(BLL,Business Logic Layer; Service层)
接收表示层的请求 调用
组装数据访问层,逻辑性的操作(例如:增删改查 例如:删除操作:先判断是否存在,存在才删除(查+删))3 数据访问层(DAL,Data Access Layer; Dao层)
直接访问数据库的操作,原子性的操作 (增删改查)
位于 xxx.dao包
二、三层优化
(1).加入接口
建议面向接口开发:先接口-再实现类
(在service、dao中加入接口)接口与实现类的命名规范:
① 接口 interface:
命名: IStudentService,IStudentDao② 实现类 implements:
命名: StudentServiceImpl,StudentDaoImpl接口: I实体类层所在包名 IStudentService、IStudentDao
所在的包: xxx.service xx.dao实现类: 例如 StudentServiceImpl、StudentDaoImpl
所在的包:xxx.service.impl xx.dao.impl使用接口/实现类时,推荐写法:
接口 x = new 实现类();
例:IStudentDao studentDao = new StudentDaoImpl();
(2).DBUtil
通用的数据库帮助类,可以简化Dao层的代码量帮助类 一般建议写在 xxx.util包3、数据库访问层
①数据访问接口 里面写方法体,如: public List<News> getAll(); public int addXw(News nx); ②数据访问接口的实现 就可以跟以前一样写方法,如: //三兄弟 private Connection con=null; private PreparedStatement ps=null; private ResultSet rs=null; /** * 查询全部新闻 * @return 新闻集合 */ public List<News> getAll(){ List<News> ls=new ArrayList<News>(); try { //创建连接 con=DBHelper.getCon(); //定义sql语句 String sql="select nid,nname,nzz from xw order by nid desc"; //获得执行对象 PreparedStatement ps=con.prepareStatement(sql); //获得结果集 ResultSet rs=ps.executeQuery(); while(rs.next()) { //实例化新闻对象 News n=new News(); //给对象赋值 n.setNid(rs.getInt(1)); n.setNname(rs.getString(2)); n.setNzz(rs.getString(3)); //加到集合中 ls.add(n); } } catch (Exception e) { e.printStackTrace(); }finally { DBHelper.myClose(con, ps, rs); } return ls;