开发环境
Eclipse2022+JDK1.8
目录
1. 概述
每一个信息系统或多或少都带有一些数据字典,在维护上,基本上分为增删改查,也就是对数据库进行CRUD操作。为每一个字典新建实体类,在dao层也就会进行一些常规的CRUD接口操作。如果为每一个实体类都写一个interface接口,这个感觉就比较繁琐。为此,想简化下工作量,在网上找了不少文章,具有此想法的大佬还是不少。设计的思路是定义一个通用接口,通过泛型,定义CRUD相关基本接口.
2. 实现步骤
2.1 定义通用接口
通过泛型定义接口,也就是说,传递进来的V,可以是任意实体类,比如User(用户)、Dept(科室)等数据字典表.
package fxjk;
import java.util.List;
public interface ICommonIntf<K,V> {
int add(V v);
int delete(V v);
int update(V v);
V find(V v);
}
2.2 定义实体类
我在本地新建了User类,赋予账号、密码属性。
package entity;
public class User {
private String username;
private String password;
public User() {
super();
}
public User(String username, String password) {
super();
this.username= username;
this.password= password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
2.3 接口扩展
考虑到User类可能有特殊的操作,通过接口继承接口,对通用接口进行了扩展,这只是一个思路. 需要注意的是,在代码实现接口部分,确定了具体实体类User. 在此基础上,额外的扩展了query方法。
package fxjk;
import java.util.Map;
import entity.User;
public interface IUserIntf extends ICommonIntf<String, User> {
Map<String,Object> query(Object obj);
}
2.4 接口实现
新建类 UserIntfImpl 实现接口 IUserIntf,而 IUserIntf 又继承了通用接口 ICommonIntf,所有,在 UserIntfImpl 里实现了IUserIntf 和 ICommonIntf的方法。此处我直接写了实现
package fxjk;
import java.util.*;
import entity.User;
public class UserIntfImpl implements IUserIntf {
@Override
public int add(User v) {
User user= (User)v;
System.out.println("[add]: "+ user);
return 1;
}
@Override
public int delete(User v) {
User user= (User)v;
System.out.println("[delete]: "+ user);
return 1;
}
@Override
public int update(User v) {
User user= (User)v;
System.out.println("[update]: "+ user);
return 1;
}
@Override
public User find(User v) {
User user= (User)v;
System.out.println("[find]: "+ user);
return user;
}
@Override
public Map<String, Object> query(Object obj) {
Page page= (Page)obj;
Map<String,Object> map= new HashMap<>();
User user1= new User("ceaning","123qwe,.");
User user2= new User("king","321qwe,.");
map.put("1", user1);
map.put("2", user2);
map.put("1", user2);
System.out.println("[query]: "+ map);
return map;
}
}
2.5 功能测试
新建一个测试类,加入main方法,代码如下:
package fxjk;
import entity.User;
public class UserTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
IUserIntf service= new UserIntfImpl();
User user= new User("heelo", "world");
//Page page= new Page(1, 10);
service.add(user);
service.delete(user);
service.update(user);
service.find(user);
service.query(user);
}
}
3. 结语
这种写法适合维护数据字典,在实际开发中,可能还是有这种写法。开发方法多种多样,也许还有其他更有趣的写法。