一.这里我用了三层架构的思想
UI(表现层): 主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。
BLL:(业务逻辑层): UI层和DAL层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。
DAL:(数据访问层): 与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当然这些操作都是基于UI层的。用户的需求反映给界面(UI),UI反映给BLL,BLL反映给DAL,DAL进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)
**Entity(实体层):**它不属于三层中的任何一层,但是它是必不可少的一层。
Entity在三层架构中的作用:
1、实现面向对象思想中的"封装";
2、贯穿于三层,在三层之间传递数据;(注:确切的说实体层贯穿于三层之间,来连接三层)
3、对于初学者来说,可以这样理解:每张数据表对应一个实体,即每个数据表中的字段对应实体中的属性(注:当然,事实上不是这样。为什么?1>,可能我们需要的实体在数据表对应的实体中并不存在;2>,我们完全可以将所有数据表中的所有字段都放在一个实体里)
4、每一层(UI—>BLL—>DAL)之间的数据传递(单向)是靠变量或实体作为参数来传递的,这样就构造了三层之间的联系,完成了功能的实现。
三层及实体层之间的依赖关系:
在工具类里边,写了两个工具类,分别是
JDBCUtils(Druid连接池的工具类)
package wedu.util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* Druid连接池的工具类
*/
public class JDBCUtils {
//1.定义成员变量 DataSource
private static DataSource ds ;
static{
try {
//1.加载配置文件
Properties pro = new Properties();
//JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties")
pro.load(new FileInputStream("src/main/resources/Druid.properties"));
//2.获取DataSource
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
/**
* 释放资源
*/
public static void close(Statement stmt,Connection conn){
close(null,stmt,conn);
}
public static void close(ResultSet rs , Statement stmt, Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();//归还连接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 获取连接池方法
*/
public static DataSource getDataSource(){
return ds;
}
}
JDBC_DynamicConnection(动态获取sql执行语句)
package wedu.util;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
* @author BaBa
* @Version 1/0
*
*/
public class JDBC_DynamicConnection {
//获取实体类的名字
private static String entityName="";
//通过反射获取到属性所组成的数组
private static Field[] fields;
//获取到需要修改的值的数组
public static List getfield(Object object){
//反射接收的类
Class c = object.getClass();
//定义需要更改的数组
List list = new ArrayList();
//获取到该类的类名
String classname = object.getClass().getSimpleName();
//由于数据库是小写的所以转换为小写
entityName = classname.toLowerCase();
//获取所有的属性
fields=c.getDeclaredFields();
//获取所有的get方法
Method[] methods = c.getMethods();
//外层遍历属性,内层再开始方法,为什么?因为需要先通过属性得到所对应的get方法,再去所有的方法中比对有没有,再获取改变的值,再放到数组中,没有改变的值就为空或者0,不需要改动。
//遍历外层循环
for (int i=0;i< fields.length;i++){
//拼接所对应的get方法,就比如getId,get首先不用大写,属性首个字母需要大写,其后的小写
String m = "get"+fields[i].getName().toUpperCase().charAt(0)+fields[i].getName().substring(1);
//对方法进行遍历,找到相同的方法
for (int j=0;j< methods.length;j++){<