zoukankan      html  css  js  c++  java
  • 反射泛型,Dao设计模型 (编码时需要用到)

    Dao
    package com.xiaofan.reflect;
    
    import java.io.Serializable;
    
    public interface Dao<T> {
        /**
         * 添加实体(Entity--Domain)数据到数据库中
         * @param t
         */
        void save(T t);
        /**
         * 修改数据库中的实体
         * @param t
         */
        void update(T t);
        /**
         * 根据主键删除记录
         * @param pk
         */
        void delete(Serializable pk);
        /**
         * 根据主键查询一条记录
         * @param pk
         * @return
         */
        T find(Serializable pk);
        
    }
    Dao

     DAOBase

    package com.xiaofan.reflect;
    
    import java.io.Serializable;
    import java.lang.reflect.ParameterizedType;
    
    import org.hibernate.Session;
    
    public abstract class DAOBase<T> implements Dao<T> {
        private Session session;
        private Class clazz;
        //反射泛型
        public DAOBase(){
            Class clz = this.getClass();//具体的Dao实现类  com.xiaofan.reflect.BookDaoImpl
    //        System.out.println(clz.getName());
            ParameterizedType pt = (ParameterizedType)clz.getGenericSuperclass();//  DAOBase<Book>
    //        System.out.println(pt);
            clazz = (Class)pt.getActualTypeArguments()[0];// Book.class
    //        System.out.println(clazz);
        }
        
        public void save(T t) {
            session.save(t);
        }
    
        public void update(T t) {
            session.update(t);
        }
    
        public void delete(Serializable pk) {
            T t = (T)session.get(clazz, pk);
            session.delete(t);
        }
    
        public T find(Serializable pk) {
            return (T)session.get(clazz, pk);
        }
    
    }
    DAOBase

    BookDao

    package com.xiaofan.reflect;
    
    public interface BookDao extends Dao<Book>{
        /**
         * 根据条件查询
         * @param where
         */
        void queryByCondition(String where);
    }
    BookDao

    BookDaoImpl

    package com.xiaofan.reflect;
    
    
    public class BookDaoImpl extends DAOBase<Book> implements BookDao{
        
        public void queryByCondition(String where) {
            
        }
    
    }
    BookDaoImpl

    Book

    package com.xiaofan.reflect;
    
    public class Book {
    
    }
    Book

    CustomerDao

    package com.xiaofan.reflect;
    
    public interface CustomerDao extends Dao<Customer>{
    
    }
    CustomerDao

    CustomerDaoImpl

    package com.xiaofan.reflect;
    
    
    public class CustomerDaoImpl extends DAOBase<Customer> implements CustomerDao {
        
    }
    CustomerDaoImpl

    Customer

    package com.xiaofan.reflect;
    
    public class Customer {
    
    }
    Customer

    Client

    package com.xiaofan.reflect;
    
    public class Client {
    
        public static void main(String[] args) {
            BookDao bDao = new BookDaoImpl();
            bDao.queryByCondition("condition");
            CustomerDao cDao = new CustomerDaoImpl();
            cDao.find(001);
        }
    
    }
    Client
  • 相关阅读:
    关于Class.getResource和ClassLoader.getResource的路径问题
    JavaScript高级程序设计(读书笔记)(一)
    CSS3常用选择器(二)
    CSS3常用选择器(一)
    JS中的for/in语句和arguments参数
    css绘制特殊图形基础
    css3 3d效果及动画学习
    圣杯布局和双飞翼布局
    css3弹性盒子模型
    css盒子模型
  • 原文地址:https://www.cnblogs.com/vaer/p/4344587.html
Copyright © 2011-2022 走看看