package com.sourcefour.dao.base;
import java.lang.reflect.Field;
import java.util.Date;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.SQLQuery;
/**
* @author sourcefour
*/
public class AddScalar {
/**
* 将field type 和 Hibernate的类型进行了对应。这里其实不是多余的,如果不进行一定的对应可能会有问题。
* 问题有两个:
* 1. 在oracle中我们可能把一些字段设为NUMBER(%),而在Bean中的字段定的是long。那么查询时可能会报:
* java.math.BeigDecimal不能转换成long等错误
* 2. 如果不这样写的话,可能Bean中的field就得是大写的,如:name就得写成NAME,userCount就得写成USERCOUNT
* 这样是不是很扯(V_V)
*
* @param <T>
* @param sqlQuery
* SQLQuery
* @param clazz
* T.class
* @param fieldList
* 要查询的成员变量名称
*/
public static <T> void addSclar(SQLQuery sqlQuery, Class<T> clazz, List<String> fieldList) {
if (clazz == null) {
throw new NullPointerException("[clazz] could not be null!");
}
if ((fieldList != null) && (fieldList.size() > 0)) {
Field[] fields = clazz.getDeclaredFields();
for (String fieldName : fieldList) {
for (Field field : fields) {
if (fieldName.equals(field.getName())) {
if ((field.getType() == long.class) || (field.getType() == Long.class)) {
sqlQuery.addScalar(field.getName(), Hibernate.LONG);
} else if ((field.getType() == int.class) || (field.getType() == Integer.class)) {
sqlQuery.addScalar(field.getName(), Hibernate.INTEGER);
} else if ((field.getType() == char.class) || (field.getType() == Character.class)) {
sqlQuery.addScalar(field.getName(), Hibernate.CHARACTER);
} else if ((field.getType() == short.class) || (field.getType() == Short.class)) {
sqlQuery.addScalar(field.getName(), Hibernate.SHORT);
} else if ((field.getType() == double.class) || (field.getType() == Double.class)) {
sqlQuery.addScalar(field.getName(), Hibernate.DOUBLE);
} else if ((field.getType() == float.class) || (field.getType() == Float.class)) {
sqlQuery.addScalar(field.getName(), Hibernate.FLOAT);
} else if ((field.getType() == boolean.class) || (field.getType() == Boolean.class)) {
sqlQuery.addScalar(field.getName(), Hibernate.BOOLEAN);
} else if (field.getType() == String.class) {
sqlQuery.addScalar(field.getName(), Hibernate.STRING);
} else if (field.getType() == Date.class) {
sqlQuery.addScalar(field.getName(), Hibernate.TIMESTAMP);
}
}
}
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在’,但我确实没有看到附件。所以没办法只能改个名字了…………。(V_V)。
资源推荐
资源详情
资源评论
收起资源包目录
hibernate将本地SQL查询结果封装成对象(最终).rar (46个子文件)
native sql query
src
com
sourcefour
dao
NativeSqlDao.java 808B
base
BaseDaoSupport.java 2KB
AddScalar.java 3KB
bean
NativeSqlBean.java 1KB
applicationContext.xml 2KB
.classpath 2KB
.mymetadata 321B
.settings
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.core.resources.prefs 187B
org.eclipse.wst.jsdt.ui.superType.name 6B
.jsdtscope 500B
.myeclipse
.project 1KB
WebRoot
META-INF
MANIFEST.MF 36B
index.jsp 834B
test.sql 842B
WEB-INF
classes
META-INF
persistence.xml 1KB
com
sourcefour
dao
NativeSqlDao.class 1KB
base
BaseDaoSupport.class 2KB
BaseDaoSupport$1.class 2KB
AddScalar.class 3KB
bean
NativeSqlBean.class 1KB
test
dao
NativeSqlDaoTest.class 2KB
applicationContext.xml 2KB
lib
dom4j-1.6.1.jar 307KB
slf4j-log4j12-1.5.8.jar 9KB
commons-logging-1.0.4.jar 37KB
mysql-connector-java-5.1.7-bin.jar 693KB
hibernate3.jar 2.64MB
hibernate-entitymanager.jar 116KB
aspectjrt.jar 112KB
antlr-2.7.6.jar 433KB
log4j-1.2.15.jar 383KB
spring.jar 2.81MB
commons-pool-1.2.jar 41KB
hibernate-commons-annotations.jar 65KB
javassist-3.9.0.GA.jar 583KB
slf4j-api-1.5.8.jar 23KB
cglib-nodep-2.1_3.jar 317KB
hibernate-annotations.jar 273KB
commons-collections-3.1.jar 546KB
aspectjweaver.jar 1.47MB
commons-dbcp-1.2.1.jar 105KB
jta-1.1.jar 13KB
web.xml 371B
test
com
sourcefour
test
dao
NativeSqlDaoTest.java 1000B
hibernate将本地SQL查询结果封装成对象.docx 29KB
共 46 条
- 1
sourceFour
- 粉丝: 5
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页