从db反射出java dao,Java基于自定义注释和反射机制实现初级通用DAO

本文介绍了如何通过Java编程获取Entityclass注解的表名,属性列名,判断字段是否为id,以及执行CRUD操作(查询、插入、更新、删除)数据库表。重点展示了getTableName, getColumnName, isId和数据库操作相关的方法。
摘要由CSDN通过智能技术生成

/**

* 获取Entity class注释的数据库表名

*

* @param clazz

* @return table name

*/

private static String getTableName(Class> clazz) {

String tableName = null;

if (clazz.isAnnotationPresent(Table.class)) {

Table table = clazz.getAnnotation(Table.class);

tableName = table.value();

}

return tableName;

}

/**

* 获取属性注释的列名

*

* @param field 属性

* @return column name

*/

private static String getColumnName(Field field) {

String colName = null;

if (field.isAnnotationPresent(Column.class)) {

Column column = field.getAnnotation(Column.class);

colName = column.value();

}

return colName;

}

/**

* 判断属性是否为id

*

* @param field 属性

* @return boolean

*/

private static boolean isId(Field field) {

boolean flag = false;

if (field.isAnnotationPresent(Id.class)) {

flag = true;

}

return flag;

}

/**

* 查询Entity对应数据库表所有数据

*

* @param clazz Entity

* @param sql queryString

* @param args parameters

* @return the result list

*/

private static List get(Class> clazz, String sql, Object... args) {

List arrList = new ArrayList<>();

Connection conn = DBHelper.getConnection();

PreparedStatement pstmt = null;

ResultSet rs = null;

Field[] fields = clazz.getDeclaredFields();

try {

pstmt = conn.prepareStatement(sql);

int len = (args == null) ? 0 : args.length;

for (int i = 0; i < len; ++i) {

pstmt.setObject(i + 1, args[i]);

}

rs = pstmt.executeQuery();

String colName;

while (rs.next()) {

Object ob = clazz.newInstance();

for (Field fi : fields) {

fi.setAccessible(true);

colName = getColumnName(fi);

if (colName == null) {

colName = fi.getName();

}

fi.set(ob, rs.getObject(colName));

}

arrList.add(ob);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

DBHelper.closeRes(conn, pstmt, rs);

}

return arrList;

}

/**

* 查询表所有数据

*

* @param clazz

* @return the result class

*/

public static List getList(Class> clazz) {

String tableName = getTableName(clazz);

if (tableName == null) {

tableName = clazz.getSimpleName();

}

String sql = "select * from " + tableName;

return get(clazz, sql);

}

/**

* 查询Entity对应数据库表所有数据

*

* @param clazz Entity

* @param sql queryString

* @param args parameters

* @return the result list

*/

public static List getListBySome(Class> clazz, String sql, Object... args) {

return get(clazz, sql, args);

}

/**

* 插入数据

*

* @param obj a persistent class

* @return boolean

*/

public static boolean save(Object obj) {

boolean flag = false;

Connection conn = DBHelper.getConnection();

PreparedStatement pstmt = null;

Class clazz = obj.getClass();

Field[] fields = clazz.getDeclaredFields();

String tableName = getTableName(clazz);

if (tableName == null) {

tableName = clazz.getSimpleName();

}

StringBuilder sb = new StringBuilder();

sb.append("insert into ");

sb.append(tableName);

sb.append(" (");

int len = fields.length;

int id = 0;

for (int i = 0; i < len; ++i) {

if (isId(fields[i])) {

id = i;

continue;

}

String colName = getColumnName(fields[i]);

if (colName == null) {

colName = fields[i].getName();

}

sb.append(colName);

if (i != len - 1) {

sb.append(" , ");

}

}

sb.append(") values (");

for (int i = 1; i < len; ++i) {

sb.append(" ? ");

if (i != len - 1) {

sb.append(" , ");

}

}

sb.append(")");

try {

pstmt = conn.prepareStatement(sb.toString());

for (int i = 0, j = 1; i < len; ++i) {

if (i == id) {

continue;

}

fields[i].setAccessible(true);

pstmt.setObject(j++, fields[i].get(obj));

}

int res = pstmt.executeUpdate();

if (res > 0) {

flag = true;

}

} catch (Exception sqle) {

sqle.printStackTrace();

} finally {

DBHelper.closeRes(conn, pstmt);

}

return flag;

}

/**

* 更新entity数据

*

* @param obj an entity class to update

* @return boolean

*/

public static boolean update(Object obj) {

boolean flag = false;

Connection conn = DBHelper.getConnection();

PreparedStatement pstmt = null;

Class clazz = obj.getClass();

Field[] fields = clazz.getDeclaredFields();

String tableName = getTableName(clazz);

if (tableName == null) {

tableName = clazz.getSimpleName();

}

StringBuilder sb = new StringBuilder();

sb.append("update ");

sb.append(tableName);

sb.append(" set ");

int len = fields.length;

String idName = "id";

int id = 0;

for (int i = 0; i < len; ++i) {

if (isId(fields[i])) {

id = i;

String tmp = getColumnName(fields[i]);

if (tmp != null) {

idName = tmp;

} else {

idName = fields[i].getName();

}

continue;

}

fields[i].setAccessible(true);

String colName = getColumnName(fields[i]);

if (colName == null) {

colName = fields[i].getName();

}

sb.append(colName);

sb.append(" = ? ");

if (i != len - 1) {

sb.append(", ");

}

}

sb.append(" where ");

sb.append(idName);

sb.append(" = ?");

try {

pstmt = conn.prepareStatement(sb.toString());

for (int i = 0, j = 1; i < len; ++i) {

if (i == id) {

continue;

}

fields[i].setAccessible(true);

pstmt.setObject(j++, fields[i].get(obj));

}

fields[id].setAccessible(true);

pstmt.setObject(len, fields[id].get(obj));

int res = pstmt.executeUpdate();

if (res > 0) {

flag = true;

}

} catch (Exception e) {

e.printStackTrace();

} finally {

DBHelper.closeRes(conn, pstmt);

}

return flag;

}

/**

* 更新数据库表数据某几项

*

* @param sql updateString

* @param args values

* @return boolean

*/

public static boolean updateSome(String sql, Object... args) {

boolean flag = false;

Connection conn = DBHelper.getConnection();

PreparedStatement pstmt = null;

try {

pstmt = conn.prepareStatement(sql);

for (int i = 0, len = args.length; i < len; ++i) {

pstmt.setObject(i + 1, args[i]);

}

int res = pstmt.executeUpdate();

if (res > 0) {

flag = true;

}

} catch (Exception e) {

e.printStackTrace();

} finally {

DBHelper.closeRes(conn, pstmt, null);

}

return flag;

}

/**

* 删除数据库表某几条记录

*

* @param tableName 表名

* @param name 属性名

* @param value 属性值

* @return boolean

*/

public static boolean delete(String sql) {

boolean flag = false;

Connection conn = DBHelper.getConnection();

PreparedStatement pstmt = null;

try {

pstmt = conn.prepareStatement(sql);

int res = pstmt.executeUpdate();

if (res > 0) {

flag = true;

}

} catch (Exception e) {

e.printStackTrace();

} finally {

DBHelper.closeRes(conn, pstmt);

}

return flag;

}

/**

* 注释Entity对应的数据库表名

* Created by lezg on 15/11/21.

*/

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

public @interface Table {

String value();

}

/**

* 注释Entity属性对应数据库的列名

* Created by lezg on 15/11/21.

*/

@Target({ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)

public @interface Column {

String value();

}

/**

* id标识

* Created by lezg on 15/11/22.

*/

@Target({ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)

public @interface Id {

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的体育馆管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此体育馆管理系统利用当下成熟完善的SpringBoot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理收货地址管理、购物车管理、场地管理、场地订单管理、字典管理、赛事管理、赛事收藏管理、赛事评价管理、赛事订单管理、商品管理、商品收藏管理、商品评价管理、商品订单管理、用户管理、管理员管理等功能。体育馆管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:体育馆管理系统;SpringBoot框架;Mysql;自动化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值