1、数据库当中的表设计
2、对应数据表的实体Bean (id为主键)
public class EnginConfigVO {
int id = 0;
int THREADS_COUNT;
/**
* @return the id
*/
public int primaryGetId() {
return id;
}
/**
* @param id the id to set
*/
public void primarySetId(int id) {
this.id = id;
}
/**
* @return the tHREADS_COUNT
*/
public int getTHREADS_COUNT() {
return THREADS_COUNT;
}
/**
* @param tHREADS_COUNT the tHREADS_COUNT to set
*/
public void setTHREADS_COUNT(int tHREADS_COUNT) {
THREADS_COUNT = tHREADS_COUNT;
}
}
由于没有像hibernate那样的注解机制,所以只能在主键的setter和getter方法上动动手脚primaryGetId() ,primarySetId(int id)
而实体bean的类名在与数据表的匹配上最后多了“vo” 两个字母,所以在下面方法中将这两个字母剪裁掉。
反射方法:
T o 对应的就是实体Bean,这样的方法当然是写在DAO层中,供上层的service调用,传入需要修改的实体Bean
public <T> void updatePropertiesValues(T o) {
StringBuilder sd = new StringBuilder("update ");
sd.append(o.getClass().getSimpleName().toLowerCase().substring(0, o.getClass().getSimpleName().length()-2)).append(" ");
sd.append("set ");
StringBuilder id = new StringBuilder("where ");
try {
for(Method m : o.getClass().getDeclaredMethods()) {
String name = m.getName();
if (name.startsWith("get")) {
sd.append(name.substring(3).toLowerCase()).append("=");
if(m.invoke(o) instanceof String) {
sd.append("'").append(m.invoke(o)).append("', ");
}else {
sd.append(m.invoke(o)).append(", ");
}
}
if(name.startsWith("primaryGet")) {
id.append(name.substring(10).toLowerCase()).append("=");
if(m.invoke(o) instanceof String) {
id.append("'").append(m.invoke(o)).append("';");
}else {
id.append(m.invoke(o)).append(";");
}
}
}
sd.delete(sd.length()-2, sd.length());
sd.append(" ");
sd.append(id);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
executeTrans(sd.toString());
}
这样以后便可以拼凑出完整的sql语句,为我们解决了功能相似代码的冗余。。
另外在查找时,我们还可以利用发射机制,将数据库返回的resultset 对象包装成List<T>
public static <T> List<T> getObjectsList(ResultSet rs, Class<T> k)
throws SQLException {
List<T> bl = new ArrayList<T>();
if (rs != null) {
while (rs.next()) {
// System.out.println("result is not null");
T o = null;
try {
o = k.newInstance();
for (Method m : k.getDeclaredMethods()) {
String name = m.getName();
if (name.startsWith("set")) {
// System.out.println(rs.getObject(name.substring(3)).getClass().getName());
m.invoke(o, rs.getObject(name.substring(3)));
}
}
bl.add(o);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
return bl;
}
return null;
}
这样,我们就可以从底层直接获得包装好的List<T>集合。。不足之处,欢迎大家讨论。。
- 大小: 26.1 KB
分享到:
相关推荐
JAVA的反射机制 JDBC连接各种数据库的方法
利用反射机制连接mysql数据库,不需要输入繁琐的sql语句
JDBC连接数据库的步骤: 1.注册驱动(加载驱动): 注册的方式: 1.使用类加载器(使用反射的方式) Class.forName(driverName); 2.实例化Driver Driver driver = new oracle.jdbc.driver.OracleDriver(); ...
如何使用JDBC连接数据库? Java中的集合框架是什么?常用的集合类有哪些? 请解释Java中的分布式框架是什么?常用的分布式框架有哪些? 你如何处理数据库连接池中的连接泄漏(Leak)? 你如何解决MyBatis中查询慢的...
反射机制 2:数据库(Oracle或者MySQL) SQL语句 多表连接,内外连接, 子查询等 管理表、视图、索引、序列、约束等 树状结构存储 存储过程、触发器 数据库设计三范式、 3:JDBC JDBC基础 连接池 树状结构存储与...
3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 ...
3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 ...
8.利用反射机制进行排序工具类,支持数组、List、Set、Map的排序,可以支持多属性排序,支持子对象中的属性排序(例user对象中的role的name属性进行排序,method="role.name") 9.JVM参数获取工具 10.Java对象比较、...
Java知识集是Java编程语言的核心概念和技术,涵盖了Java编程语言的基础知识、面向对象编程、数据结构与算法、图形用户界面(GUI)和网络编程等各个方面。...反射机制:包括Class、Method、Field等类的使用。
学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...
导入clone项目后,导入JDBCDao,JDBCHelper,JDBCObject,JDBCSetting四个类即可初始化在JDBCSetting类中修改常量URL,USERNAME,PASSWORD为自己连接sqlserver数据库的参数public class JDBCSetting { static final String...
反射机制:Class、Field、Method、Constructor等 注解:自定义注解、注解的应用等 数据库操作:JDBC、ORM框架、连接池等 常用的框架:Spring、SpringMVC、MyBatis、Hibernate等 分布式相关技术:Dubbo、Zookeeper、...
*第五阶段:JDBC编程:包括JDBC原理,JDBC连接库,JDBC API,虽然现在Hibernate比JDBC要方便许多,但是JDBC技术仍然在使用,JDBC思想尤为重要; *第六阶段:JDBC深入理解高级特性:包括数据库连接池,存储过程,...
16.6 在应用程序中显式指定迫切左外连接检索策略 16.7 属性级别的检索策略 16.8 小结 16.9 思考题 第17章 Hibernate的检索方式(上) 17.1 Hibernate的检索方式简介 17.1.1 HQL检索方式 17.1.2 QBC...
16.6 在应用程序中显式指定迫切左外连接检索策略 16.7 属性级别的检索策略 16.8 小结 16.9 思考题 第17章 Hibernate的检索方式(上) 17.1 Hibernate的检索方式简介 17.1.1 HQL检索方式 17.1.2 QBC...
16.6 在应用程序中显式指定迫切左外连接检索策略 16.7 属性级别的检索策略 16.8 小结 16.9 思考题 第17章 Hibernate的检索方式(上) 17.1 Hibernate的检索方式简介 17.1.1 HQL检索方式 17.1.2 QBC...
16.6 在应用程序中显式指定迫切左外连接检索策略 16.7 属性级别的检索策略 16.8 小结 16.9 思考题 第17章 Hibernate的检索方式(上) 17.1 Hibernate的检索方式简介 17.1.1 HQL检索方式 17.1.2 QBC...
11.commons-dbcp.jar:是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。 12.commons-DbUtils.jar:Apache组织提供的一个资源JDBC工具类库,它是对JDBC的简单封装,对传统操作...
- **第三部分:JavaSE核心高级应用:**`集合`、`I/O`、`多线程`、`网络编程`、`反射机制`、 - **第四部分:Java新特性:**`Lambda表达式`、`函数式编程`、`新Date/Time API`、`接口的默认、静态和私有方法`、 - **第...