DAO类下的各种关系可以用一张图来表示。
在这里插入图片描述

1.DAO类介绍:

1.介绍
1) DAO=DataBase Access Object; 数据库操作对象
2) 在一个DAO类中封装针对某张表操作细节
3) 在项目中所有的DAO类都应该存放在dao包
4) DAO类命名规则 = 表名+Dao DeptDao/EmpDao

例如这样一张表。
在这里插入图片描述
1.实体类介绍:
一个实体类用于描述一张表的结构
2) 实体类的类名应该与表名相同的
dept.frm-------- Dept.class
3) 实体类的属性名应该与表中字段匿名相同
DEPTNO INT private Integer deptNo
DNAME VARCHAR private String dname
LOC VARCHAR private String loc
4)一个实体类的实例对象用于描述表文件一行数据
dept.frm
deptno dname loc
10 Accounting xx
20 Sales BOSTON
Dept dept1 = new Dept(10,‘Accounting’,‘xx’);
Dept dept2 = new Dept(20,‘Sales’,‘BOSTON’)
2.实体类作用: 实体类降低DAO类开发难度
1.有效减少Dao类中方法参数个数,
降低方法开发与使用难度
2.有效减少Dao类与ResultSet操作难度

/**
 * 实体类属性的数据类型必须都是高级引用类型,目的方便存储null值
 * 2021/1/23
 */
public class Dept {

    private Integer deptNo ;
    private String  dname;
    private String  loc;

    public Integer getDeptNo() {
        return deptNo;
    }

    public Dept setDeptNo(Integer deptNo) {
        this.deptNo = deptNo;
        return this;
    }

    public String getDname() {
        return dname;
    }

    public Dept setDname(String dname) {
        this.dname = dname;
        return this;
    }

    public String getLoc() {
        return loc;
    }

    public Dept setLoc(String loc) {
        this.loc = loc;
        return this;
    }

    public Dept(Integer deptNo, String dname, String loc) {
        this.deptNo = deptNo;
        this.dname = dname;
        this.loc = loc;
    }

    public Dept() {
    }
}

基于功能封装—JdbcUtil
1.什么是功能:
一行命令就是一个功能.比如 int a =10
2.JDBC开发流程:
1) 建立一个连接通道
2) 创建一个交通工具
3) 推送SQL命令并得到处理结果
4) 销毁资源
3.JdbcUtil作用降低DAO类开发时,使用JDBC技术难度

ReflectUtil

public class ReflectUtil {

    /*
    *  作用:动态生成INSERT语句
    *
    *  insert语句结构:
    *
    *  insert into  表    (字段名1,字段名2,字段名3) values(值1,值2)
    *  -----------  --    ---------------        ---------------
    *       1        2           3                     4
    *
    *   问题1:如何能够得到表名
    *         实体类的类名应该与对应的表名相同
    *
    *   问题2:如何得到表中字段名
    *         实体类的属性名应该与对应的表中字段名相同
    *
    *   问题3:如何得到要插入的数据行
    *         一个实体类的实例对象封装表文件中一个数据行
    */

    public String  createInsertSql(Object instance)throws Exception{

         String tableName = null;
         Class classManager = null;
         Field fieldArray[]=null;
         StringBuffer columns = new StringBuffer(" (");
         StringBuffer sql = new StringBuffer("insert into ");
         StringBuffer values = new StringBuffer(" values(");

         classManager= instance.getClass(); //得到实例对象,隶属的类文件的管理者
         fieldArray = classManager.getDeclaredFields();
        //1.得到插入语句关联的表名
        tableName = classManager.getSimpleName();

        //2.得到插入语句关联的字段名
        for(Field field:fieldArray){

            String fieldName = field.getName();//得到管理的属性的名称,这个名称就是字段名
            if(!columns.toString().equals(" (")){
                columns.append(",");
            }
            columns.append(fieldName);
        }
        columns.append(")");

        //3.得到插入语句对应的值
        for(Field field:fieldArray){
              field.setAccessible(true);
              Object value = field.get(instance);
              //如果添加的值不是第一个值,则在值添加的到StringBuffer之前,先添加一个","进入到StringBuffer
              if(!values.toString().equals(" values(")){
                  values.append(",");
              }
              values.append("'");
              values.append(value);
              values.append("'");
        }
        values.append(")");

        //拼接
        sql.append(tableName);
        sql.append(columns);
        sql.append(values);

        return sql.toString();
    }

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐