Java刚入门的菜鸟一枚,最近在完成一个JDBC连接数据库的小项目中,想到一种小思路:可以写一个带泛型的通用方法,直接将任意对象添加到MySql数据库指定的表中。这样可以在一定程度上减少SQL语句,提高代码的通用性。
1. 带泛型的增删改查dao层接口
public interface GeneralDao {
<T> int addMess(T t);
int deleteMess(Integer id, String tableName, String primeKey);
<T> int alterMess(T t, Integer id,String primeKey);
<T> List<T> selectMess(T t, Class<T> clazz, String... params);
<T> PageInfo<T> findMessByPage1(T t, Class<T> clazz, String nowPage, String pageNum, String... params);
优点: 不用写单表增删改查的sql语句,减少一些工作量。
缺点: 不能适用于连表查询,使用的时候具有局限性,java中实体类名、属性名必须要与MySql中的表名、字段名完全对应。
2.接口的具体实现和关键工具类方法
新增一条数据
public <T> int addMess(T t) {
String[] allFieldName = TableUtil.getAllFieldName(t);
String s = StringUtil.getMark(allFieldName.length, "?");
String sql = "INSERT INTO " + TableUtil.getClassName(t).toLowerCase() + "(" + StringUtil.getMark("", allFieldName) + ") VALUES(" + s + ");";
return JDBCUtil.operateDML(sql, TableUtil.getInstanceAllField(t));
删除一条数据
public int deleteMess(Integer id, String tableName, String primeKey) {
String sql = "delete from " + tableName + " where " + primeKey + " =?";
return JDBCUtil.operateDML(sql, id);
-修改一条数据
public <T> int alterMess(T t, Integer id,String primeKey) {
String[] allFieldName = TableUtil.getAllNotNullFieldName(t);
String sql = "UPDATE " + TableUtil.getClassName(t).toLowerCase() + " SET " + StringUtil.getMark(" = ?", allFieldName) + " WHERE "+primeKey+" = " + id + ";";
return JDBCUtil.operateDML(sql, TableUtil.getInstanceAllNotNullField(t));
查询一条数据
public <T> List<T> selectMess(T t, Class<T> clazz, String... params) {
String selectSql = StringUtil.getSelectSql(t, params);
return JDBCUtil.operateDQL(clazz, selectSql);
工具类方法
int JDBCUtil.operateDML(String sql,Object...parmas)
--人人都写过的JDBC执行DML语句的万能方法
List<T> JDBCUtil.operateDQL(Class clazz,String selectSql,Object...parmas)
--执行DQL语句的万能方法
Field[] TableUtil.getAllFieldName(T t)
--获取泛型对象的所有成员属性
String StringUtil.getMark(int fieldLength, String mark)
--根据成员属性的个数拼接字符
String[] TableUtil.getAllFieldName(T t)
--获取泛型对象的属性名
Object[] TableUtil.getInstanceAllField(T t)
--获取泛型对象的所有属性值
String[] TableUtil.getAllNotNullFieldName(T t)
--获取泛型对象的所有非空属性名
Object[] TableUtil.getInstanceAllNotNullField(T t)
--获取泛型对象的所有非空属性值
String StringUtil.getSelectSql(t, params)
--获取泛型对象的查询语句:t中非空的属性为查询条件,parmas为模糊查询的字段数组
具体工具类方法的实现在下一篇
- 5505
-
apartmentmanager
JavaScript