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
  • 相关阅读:
    元组,字典
    python字符串
    tensorflow 学习笔记
    tensorflow example1
    python第二章(2)列表
    python3.5学习第二章(1)标准库,bytes
    类加载过程
    数据值与地址值
    类的初始化与实例化顺序
    SpringCloudBus
  • 原文地址:https://www.cnblogs.com/vaer/p/4344587.html
Copyright © 2011-2022 走看看