在实际的开发中有一种项目的程序组织架构方案叫做MVC模式,按照程序 的功能将他们分成三个层,如下图
Modle层(模型层)、View层(显示层)、Controller层(控制层)。
Modle层:可以分两层,DAO层、service层,基文本功能 如下
service层:主要去负责一些业务处理,比如取得连接、关闭数据库连接、事务回滚,一些复杂的逻辑业务处理就放到service层
DAO层:负责访问数据库进行数据的操作,取得结果集,之后将结果集中的数据取出封装到VO类对象之后返回给service层
Cotroller层:叫做控制层,主要的功能是处理用户发送的请求。
View层:叫做显示层,主要是负责现实数据。
在实际开发中dao层要先定义出自己的操作标准即标准接口,就是为了解耦合。
Modle层(DAO层和service层)的设计如下。
//BasDaoUtil.java代码,共7个方法 package com.sxt.mvcpro.dao.impl; import java.lang.reflect.Field; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class BaseDAOUtil { private static PreparedStatement pst; private static ResultSet rst; /** * * @param conn * @param sql * @param clz * @param vo * @return * @throws Exception */ publicint save(Connection conn, String sql, Class clz, T vo) throws Exception { //取得预编译对象 pst = conn.prepareStatement(sql); // 为sql设置占位符内容(insert into 表(字段1,字段2,字段3,字段4)VALUES(?,?,?,?)) String[] coulums = sql.split("\\(")[1].split("\\)")[0].split(","); for (int i = 0; i < coulums.length; i++) { Field f = vo.getClass().getDeclaredField(coulums[i]); // 取消私有封装访问限制 f.setAccessible(true); //取得字段对应的属性的值 Object fvalue = f.get(vo); pst.setObject(i + 1, fvalue); } return pst.executeUpdate(); } /** * * @param conn * @param sql * @param vo * @return * @throws Exception */ public int edit(Connection conn,String sql,T vo) throws Exception{ // update emp SET sal=?,job=?,comm=? WHERE empno=? AND ... ; //取得预编译对象 pst=conn.prepareStatement(sql); String[] strs = sql.split("SET")[1].split("WHERE")[0].split(","); int i=0; for(i=0;i ) { //取得要修改的字段名称 String column=strs[i].split("=")[0]; //通过反射取得column对应在vo中的属性对象(就是拿vo的变量,比如ename) Field f = vo.getClass().getDeclaredField(column.trim()); // 取消私有封装访问限制 f.setAccessible(true); //取得该字段在vo对象中的值 Object fvalue=f.get(vo); //为占位符设置具体的内容 pst.setObject(i+1, fvalue); } String coditions = sql.split("WHERE")[1].split("=")[0]; Field f = vo.getClass().getDeclaredField(coditions.trim()); f.setAccessible(true); Object fvalue=f.get(vo); pst.setObject(i+1, fvalue); return pst.executeUpdate(); } /** * * @param conn * @param sql * @param id * @return * @throws Exception */ public int removeById(Connection conn,String sql,Object id) throws Exception{ //取得预编译对象 pst=conn.prepareStatement(sql); pst.setObject(1, id); return pst.executeUpdate(); } /** * * @param conn * @param sql * @param ids * @return * @throws Exception */ public int removeBatch(Connection conn,StringBuffer sql,List