准备
开发一个项目最基本的目的是将数据库中的数据显示到客户端或者客户端的数据可以将数据录入数据库实现数据的交互。关系型数据库(比如MySQL)和非关系型数据库(Redis)。关系型数据库是由表组成的,一张数据表一般保存一类信息,那么一张数据表在Java中就对应一个简单Java类(vo 类),我们会定义一个接口来规范操作这张表的实现类开发。
先定义两个简单JAVA类
package com.baidu.vo;
import java.io.Serializable;
//部门表简单Java类
public class Dept implements Serializable {
}
package com.baidu.vo;
import java.io.Serializable;
//雇员表简单Java类
public class Emp implements Serializable {
}
定义两个接口
package com.dao;
import com.baidu.vo.Dept;
//操作部门数据的标准
public interface IDpetDAO {
/**
* 增加部门信息
* @param vo要增加的数据vo对象
* @return受影响的行数
*/
public int daoCreate(Dept vo);
/**
* 批量删除部门信息
* @param dids 保存要删除部门的编号数组
* @return受影响的行数
*/
public int daoRemove(Integer [] dids);
/**
* 修改部门信息
* @param vo包含新据的vo对象
* @return受影响的行数
*/
public int daoUpdate(Dept vo);
/**
* 查询所有部门信息的数据
* @return保存部门信息对象的数组
*/
public Dept [] daoFindAll();
}
package com.dao;
import com.baidu.vo.Emp;
//操作雇员数据的标准
public interface IEmpDAO {
/**
* 增加雇员信息数据
* @param vo
* @return
*/
public int daoCreate(Emp vo);
/**
* 批量删除雇员信息
* @param dids保存要删除雇员信息的编号的数组
* @return受影响的行数
*/
public int daoRemove(Integer [] dids);
/**
* 更新雇员信息
* @param vo包含新数据的vo对象
* @return
*/
public int daoUpdate(Emp vo);
/**
* 查询所有雇员信息的数据
* @return
*/
public Emp [] daoFindAll();
}
可以发现只有接口的名称以及每个方法的参数类型不一样,方法的名称以及形式都是一样的。如果数据表过多,就会出现代码重复的现象,做好的做法是使用一个接口实现多张数据表的数据操作。这就需要使用泛型接口。把要操作的的数据类型使用占位符标记。具体使用接口的时候再根据需求制定泛型的类型。
定义泛型接口
package com.dao;
public interface IBaseDAO<K,V> {
/**
* 增加数据
* @param vo包含了要增加的数据vo对象
* @return 受影响的行数
*/
public int daoCreate(V vo);
/**
* 批量删除信息
* @param dids 保存了要删除的信息编号的数组
* @return 受影响的行数
*/
public int daoRemove(K [] dids);
/**
* 修改信息
* @param vo包含新数据的vo对象
* @return 受影响的行数
*/
public int daoUpdate(V vo);
/**
* 查询所有信息
* @return 受影响的行数
*/
public V [] daoFindAll();
}
在实现类中指定泛型类型
package com.baidu.vo;
import com.dao.IBaseDAO;
public class EmpDAOImpl implements IBaseDAO<Integer,Dept> {
@Override
public int daoCreate(Dept vo) {
return 0;
}
@Override
public int daoRemove(Integer[] dids) {
return 0;
}
@Override
public int daoUpdate(Dept vo) {
return 0;
}
@Override
public Dept[] daoFindAll() {
System.out.println("查询数据完成");
return new Dept[0];
}
}
package com.baidu.vo;
import com.dao.IBaseDAO;
public class EmpDAOImpl implements IBaseDAO<String,Emp> {
@Override
public int daoCreate(Emp vo) {
return 0;
}
@Override
public int daoRemove(String[] dids) {
return 0;
}
@Override
public int daoUpdate(Emp vo) {
return 0;
}
@Override
public Emp[] daoFindAll() {
System.out.println("查询数据完成");
return new Emp[0];
}
}
小结
在定义一个接口的时候如果某些类型不能确定,那么就使用占位符标记,在具体使用的时候再指定泛型的类型