package databaseUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;
public class SetBean<T> {
/**
* @param clazz
* 所要封装的javaBean
* @param rs
* 记录集
* @return ArrayList 数组里边装有 多个javaBean
* @throws Exception
*/
public List<T> getList(Class<T> clazz, ResultSet rs) {
Field field = null;
List<T> lists = new ArrayList<T>();
try {
// 取得ResultSet列名
ResultSetMetaData rsmd = rs.getMetaData();
// 获取记录集中的列数
int counts = rsmd.getColumnCount();
// 定义counts个String 变量
String[] columnNames = new String[counts];
// 给每个变量赋值(字段名称全部转换成小写)
for (int i = 0; i < counts; i++) {
columnNames[i] = rsmd.getColumnLabel(i + 1).toLowerCase();
}
// 变量ResultSet
int pp =0;
while (rs.next()) {
T t = clazz.newInstance();
// 反射, 从ResultSet绑定到JavaBean
//System.out.print("pp:" + (++pp) + "====");
for (int i = 0; i < counts; i++) {
// 设置参数类型,此类型应该跟javaBean 里边的类型一样,而不是取数据库里边的类型
field = clazz.getDeclaredField(columnNames[i]);
// 这里是获取bean属性的类型
Class<?> beanType = field.getType();
// 根据 rs 列名 ,组装javaBean里边的其中一个set方法,object 就是数据库第一行第一列的数据了
Object value = rs.getObject(columnNames[i]);
//System.out.print("value:" + value);
// 处理value的类型,从数据库类型转换成javaBean类型
if (value != null) value = dealWithValue(value,beanType);
String setMethodName = "set"
+ firstUpperCase(columnNames[i]);
// 第一个参数是传进去的方法名称,第二个参数是 传进去的类型;
Method m = t.getClass().getMethod(setMethodName, beanType);
// 第二个参数是传给set方法数据;如果是get方法可以不写
m.invoke(t, value);
}
//System.out.println();
lists.add(t);
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return lists;
}
/**
* @param clazz
* bean类
* @param rs
* 结果集 (只有封装第一条结果)
* @return 封装了查询结果的bean对象
*/
public T getObj(Class<T> clazz, ResultSet rs) {
Field field = null;
T obj = null;
try {
// 取得ResultSet列名
ResultSetMetaData rsmd = rs.getMetaData();
// 获取记录集中的列数
int counts = rsmd.getColumnCount();
// 定义counts个String 变量
String[] columnNames = new String[counts];
// 给每个变量赋值(字段名称全部转换成小写)
for (int i = 0; i < counts; i++) {
columnNames[i] = rsmd.getColumnLabel(i + 1).toLowerCase();
}
// 变量ResultSet
if (rs.next()) {
T t = clazz.newInstance();
// 反射, 从ResultSet绑定到JavaBean
for (int i = 0; i < counts; i++) {
try{
// 设置参数类型,此类型应该跟javaBean 里边的类型一样,而不是取数据库里边的类型
field = clazz.getDeclaredField(columnNames[i]);
}catch(Exception ex){
ex.printStackTrace();
continue;
}
// 这里是获取bean属性的类型
Class<?> beanType = field.getType();
// 根据 rs 列名 ,组装javaBean里边的其中一个set方法,object 就是数据库第一行第一列的数据了
Object value = rs.getObject(columnNames[i]);
//处理value的类型,从数据库类型转换成javaBean类型
if (value != null) value = dealWithValue(value,beanType);
String setMethodName = "set"
+ firstUpperCase(columnNames[i]);
// 第一个参数是传进去的方法名称,第二个参数是 传进去的类型;
Method m = t.getClass().getMethod(setMethodName, beanType);
// 第二个参数是传给set方法数据;如果是get方法可以不写
m.invoke(t, value);
}
obj = t;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return obj;
}
private Object dealWithValue(Object value, Class<?> beanType) {
// 这里是获取数据库字段的类型
Class<?> dbType = value.getClass();
// 处理日期类型不匹配问题
if (dbType == java.sql.Timestamp.class
&& beanType == java.util.Date.class) {
// value = new
// java.util.Date(rs.getTimestamp(columnNames[i]).getTime());
value = new java.util.Date(
((java.sql.Timestamp) value).getTime());
}
// 处理double类型不匹配问题
if (dbType == java.math.BigDecimal.class
&& beanType == double.class) {
// value = rs.getDouble(columnNames[i]);
value = new Double(value.toString());
}
// 处理int类型不匹配问题
if (dbType == java.math.BigDecimal.class
&& beanType == int.class) {
// value = rs.getInt(columnNames[i]);
value = new Integer(value.toString());
}
// 处理raw类型不匹配问题
if (dbType == byte[].class
&& beanType == byte[].class) {
// value = rs.getInt(columnNames[i]);
value = value.toString().getBytes();
}
return value;
}
// 首写字母变大写
public static String firstUpperCase(String old) {
return old.substring(0, 1).toUpperCase() + old.substring(1);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
IDEA快速搭建SpringCloud项目结构
共23个文件
java:14个
xml:8个
properties:1个
1星 需积分: 28 47 下载量 39 浏览量
2018-11-30
11:17:12
上传
评论
收藏 21KB RAR 举报
温馨提示
使用IDEA开发工具,基于maven快速搭建一个基础项目结构,可在同一个项目下创建多module来分别打包不同的api应用,进行分布式部署。commonProject内包括多个modules为不同的api应用提供公共的可复用代码。
资源推荐
资源详情
资源评论
收起资源包目录
MyprojectCSDN.rar (23个子文件)
MyprojectCSDN
MyprojectCSDN
initProject
pom.xml 565B
commonProject
MyDatabaseUtils
pom.xml 510B
src
test
java
main
resources
java
databaseUtils
JDBC.java 3KB
DBexecute.java 2KB
SetBean.java 7KB
DBconnectInfo.java 2KB
pom.xml 780B
MyFileUtils
pom.xml 771B
src
test
java
main
resources
java
test
TestFile.java 207B
excelFileUtils
ExcelUtils.java 3KB
MyHttpUtils
pom.xml 944B
src
test
java
main
resources
java
HttpApiUtil
HttpAPIService.java 4KB
MyObjectUtils
pom.xml 508B
src
test
java
main
resources
java
ObjectUtil
NotNullUtil.java 501B
object2Xml.java 2KB
ReflexObjectUtil.java 7KB
apiProject
test1api
pom.xml 3KB
src
test
java
com
apiproject
test1api
Test1apiApplicationTests.java 351B
main
resources
static
templates
application.properties 0B
java
com
apiproject
test1api
dao
model
QfTest.java 461B
Test1apiApplication.java 412B
service
Controller
DBtestController.java 879B
pom.xml 1KB
共 23 条
- 1
资源评论
- XHF98CS17172022-02-24没什么用,太简单了
knn_knn
- 粉丝: 54
- 资源: 182
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功