4、应用实例

实例1:
// 表的共性操作的DAO
public class DAO<T> { 
    // 添加一条记录
    public void add(T t) {

    }

    // 删除一条记录
    public boolean remove(int index) {
        return false;
    }

    // 修改一条记录
    public void update(int index,T t) {

    }

    // 查询一条记录
    public T getIndex(int index){
        return null;
    }

    // 查询多条记录
    public List<T> getForList(int index) {
        return null;
    }

    // 泛型方法
    // 举例:获取表中一共有多少条记录?获取最大的员工入职时间?
    public <E> E getValue() {

        return null;
    }
}

=====================================================================

// 此类对应数据库中的customer表
public class Customer { 
    
}

// 只能操作某一个表的DAO
public class CustomerDAO extends DAO<Customer> {
    
}

======================================================================

// 此类对应数据库中的student表
public class Student {
    
}

// 只能操作某一个表的DAO
public class StudentDAO extends DAO<Student> {
    
}

========================================================================

public class DAOTest {

    @Test
    public void test1(){
        CustomerDAO dao1 = new CustomerDAO();

        dao1.add(new Customer());
        List<Customer> list = dao1.getForList(10);

        StudentDAO dao2 = new StudentDAO();
        Student student = dao2.getIndex(1);
    }
}
实例2:泛型嵌套

image-20200828230633364

实例3:
public class DAO<T> {

    private Map<String,T> map = new HashMap<String,T>();
    
    // 保存 T 类型的对象到 Map 成员变量中
    public void save(String id, T entity) {
        map.put(id,entity);
    }
    
    // 从 map 中获取 id 对应的对象
    public T get(String id) {
        return map.get(id);
    }
    
    // 替换 map 中 key 为id的内容,改为 entity 对象
    public void update(String id,T entity) {
        if(map.containsKey(id)) {
            map.put(id,entity);
        }
    }
    
    // 返回 map 中存放的所有 T 对象
    public List<T> list(){
        // 错误的:
        // 原因1:如果 map.values() 的集合就是 List 的,向上转型成 Collection,再向下转型成 List,那没问题;但你不确定 map.values() 的集合就是 List;
        // 原因2:map里面的元素是无序的,你直接生猛的转成 List 有序的,这样不合适;
        // Collection<T> values = map.values();
        // return (List<T>) values;
        // 正确的:
        // 遍历一下,装到新的List中
        ArrayList<T> list = new ArrayList<>();
        Collection<T> values = map.values();
        for(T t : values) {
            list.add(t);
        }
        return list;

    }
    
    // 删除指定 id 对象
    public void delete(String id) {
        map.remove(id);
    }
}

====================================================================================
    
public class User {

    private int id;
    private int age;
    private String name;

    // 省略了 getter/setter 方法

    public User(int id, int age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }

    public User() {

    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

    // 泛型T(具体类型User)会存放到Map集合中,所以通常还会重写equals方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;

        if (id != user.id) return false;
        if (age != user.age) return false;
        return name != null ? name.equals(user.name) : user.name == null;
    }

    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + age;
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }
}

=============================================================================
    
public class DAOTest {

    public static void main(String[] args) {
        DAO<User> dao = new DAO<User>();

        dao.save("1001",new User(1001,34,"周杰伦"));
        dao.save("1002",new User(1002,20,"昆凌"));
        dao.save("1003",new User(1003,25,"蔡依林"));   

        List<User> list = dao.list();
        list.forEach(System.out::println);
        
        dao.update("1003",new User(1003,30,"方文山"));

        dao.delete("1002");
    }
}
posted @ 2020-08-31 22:39  kehuaihan  阅读(166)  评论(0编辑  收藏  举报