zoukankan      html  css  js  c++  java
  • 使用反射写个通用型的数据库增删改查

    在砺锋暑假班做电信计费系统的时候,由于要写一大堆Dao,感觉很无趣,因为我宁愿做更复杂一点的工作,也不想做重复的工作,结合前几天学的反射。我顿时有了个大胆的想法。。。

    我们知道,数据库中的表对应着Java中的pojo类,表中的列名对应着pojo类中的字段,例如:Student表的结构如下:

    create table student(
    
      stud_no varchar(50)  not null  primary key,
    
      stud_name  varchar(50) not null,
    
      password  varchar(50) not null,
    
      create_date datetime not null
    
    );

    可以对应成以下的Java Pojo类:

    public class Student{
    
      private String stud_no;
    
      private String stud_name;
    
      private String password;
    
      private java.util.Date create_date;
    
    }

    其中,数据库表中的varchar类型对应着Java中的String类型,datetime类型对应着Java中的java.util.Date类型。当然你也可以在数据库中用timestamp,这又是题外话了。

    好了,也许这以上都是废话,那么接下来我要做个小小的改动,我给Student这个Pojo加个字段,用来指定Student表的主键是谁,字段名就叫它keyname吧,那么有:

    public class Student{
    
      private String stud_no;
    
      private String stud_name;
    
      private String password;
    
      private java.util.Date create_date;
    
      private String keyname="stud_no";
    
    }

    这里我们指定stud_no为主键。所以要让keyname="stud_no";什么,你说要以多个字段作为主键?那就是另一回事了,这里我们只研究单主键的情况。

    好的,接下来我们来讲一下反射,反射是大部分框架的基础,像什么Spring啊,Hibernate啊,都是基于反射原理来完成,当然还有一些其他的工作。

    我们想知道这个类的名字(这里是取简单的名字,非限定名),可以有几种方式。

    1.

    Student.class.getSimpleName(); 

    //这里是通过Student.class来获取Student的Class类,然后获取它的名字;

    2.

    Student student = new Student(); 
    student.getClass().getSimpleName(); 

    //这里是通过Student类的实例.getClass方法获取它的Class类,然后获取它的名字,这种用的比较多一点。

    3.

    public class BaseDAO<T> {
        protected String keyname="";
        DataSource ds;
        private Class<T> entityClass;
            public BaseDAO(){
            Type genType = getClass().getGenericSuperclass();  
                Type[] params = ((ParameterizedType)genType).getActualTypeArguments();  
                entityClass = (Class) params[0];
                System.out.println(entityClass.getName());
            }
    }

    这是第3种方法,可以获取到泛型类的Class类和类名。这也是我接下来也会用到的一种方法。

  • 相关阅读:
    使用MetaLogo对不等长序列绘制Sequence logo
    RocketMQ源码 索引文件/indexFile 和 消费队列/ConsumeQueue
    看了两篇教程,我的博客炸了
    BCD注册表找不到怎么办?
    扫一扫PC版 V0.3
    java_Lambda表达式
    Java_多线程
    java_静态方法和非静态方法的区别
    idea_快捷键
    Java_稀疏数组
  • 原文地址:https://www.cnblogs.com/xhfcoding/p/7441798.html
Copyright © 2011-2022 走看看