(残梦追月原创,转载请注明)
本文地址:http://www.blogjava.net/cmzy/archive/2008/09/11/228271.html
今天看SpringAPI的时候无意中发现了Spring2.5新增了一个RowMapper的实现类
org.springframework.jdbc.core.BeanPropertyRowMapper,但是貌似Spring的refrence里
面根本就没提及到。Google了一下……貌似也莫得多少文档。
Spring API Doc的说明如下:
RowMapper implementation that converts a
row into a new instance of the specified mapped target class. The mapped
target class must be a top-level class and it must have a default or
no-arg constructor.
Column values are mapped based on matching
the column name as obtained from result set metadata to public setters
for the corresponding properties. The names are matched either directly
or by transforming a name separating the parts with underscores to the
same name using "camel" case.
Mapping is provided for fields in the
target class for many common types, e.g.: String, boolean, Boolean,
byte, Byte, short, Short, int, Integer, long, Long, float, Float,
double, Double, BigDecimal, java.util.Date, etc.
To facilitate mapping between columns and
fields that don't have matching names, try using column aliases in the
SQL statement like "select fname as first_name from customer".
Please note that this class is designed to
provide convenience rather than high performance. For best performance
consider using a custom RowMapper.
也就说,它可以把ResultSet和实体类的字段进行实现自动映射。
一个具体的例子如下:
假如有这样一个表,SQL-Server2000的建表脚本如下:
-
/*
-
管理员表
-
*/
-
CREATE
TABLE
admin(
-
id int
identity(1,1)
primary
key
,
-
username varchar
(20)
not
null
,
-
password
varchar
(32)
not
null
,
-
)
为此,我们编写一个对应的实体类admin,它是一个标准的javaBean,代码如下:
-
-
-
-
package
db.demo;
-
-
-
-
-
-
-
-
-
public
class
Admin {
-
private
int
id;
-
private
String username;
-
private
String password;
-
-
public
int
getId() {
-
return
id;
-
}
-
-
public
void
setId(
int
id) {
-
this
.id = id;
-
}
-
-
public
String getUsername() {
-
return
username;
-
}
-
-
public
void
setUsername(String username) {
-
this
.username = username;
-
}
-
-
public
String getPassword() {
-
return
password;
-
}
-
-
public
void
setPassword(String password) {
-
this
.password = password;
-
}
-
}
以前,在相应的AdminDAO中,我们以前是这么做滴,看起来很麻烦,如果一个表的字段很多的话,就要人命了,我们必须不停的set、get:
-
-
-
-
package
db.demo;
-
-
import
java.sql.ResultSet;
-
import
java.sql.SQLException;
-
import
java.util.List;
-
-
import
org.springframework.jdbc.core.RowMapper;
-
import
org.springframework.jdbc.core.support.JdbcDaoSupport;
-
-
-
-
-
-
-
-
public
class
AdminDAO
extends
JdbcDaoSupport {
-
-
private
final
String ID =
"id"
;
-
private
final
String USERNAME =
"username"
;
-
private
final
String PASSWORD =
"password"
;
-
private
final
String TABLE_NAME =
"admin"
;
-
-
-
-
-
public
List<Admin> queryAll() {
-
final
String sql =
"Select * from "
+ TABLE_NAME;
-
-
return
getJdbcTemplate().query(sql,
new
RowMapper(){
-
-
public
Object mapRow(ResultSet rs,
int
rowNum)
throws
SQLException {
-
Admin admin = new
Admin();
-
admin.setId(rs.getInt(ID));
-
admin.setUsername(rs.getString(USERNAME));
-
admin.setPassword(rs.getString(PASSWORD));
-
return
admin;
-
}
-
-
});
-
}
-
}
可见,我们必须的手工对ResultSet和Admin进行映射。而现在,我们只是需要这样:
-
-
-
-
package
db.demo;
-
-
import
java.util.List;
-
-
import
org.springframework.jdbc.core.BeanPropertyRowMapper;
-
import
org.springframework.jdbc.core.support.JdbcDaoSupport;
-
-
-
-
-
-
-
-
public
class
AdminDAO
extends
JdbcDaoSupport {
-
-
private
final
String TABLE_NAME =
"admin"
;
-
-
-
-
-
public
List<Admin> queryAll() {
-
final
String sql =
"Select * from "
+ TABLE_NAME;
-
-
return
getJdbcTemplate().query(sql,
new
BeanPropertyRowMapper(Admin.
class
));
-
}
-
}
呵呵,只是一句话就完全搞定了……Sprin会为我们自动映射……显然这样比以前方便多了。我们还可以把它用在其它任何使用RowMapper的场合……毕竟它继承自RowMapper……
需要注意的是:BeanPropertyRowMapper是根据字段名和实体类中的标准Setter方法进行映射滴。也就是说,我们需要使表中的字段名和实体类的成员变量名称一致。
分享到:
相关推荐
【GO】关于一个分布式事务的中间件,目前通信是走的http协议_pgj
2024免费毕业设计成品,包括源码+数据库+往届论文资料 录屏:https://www.bilibili.com/video/BV1Rb421H7AA 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC
"相场锂枝晶与温度场:微观与宏观的交互影响研究",相场锂枝晶—温度场 ,相场锂枝晶; 温度场; 锂枝晶生长; 温度变化; 生长过程控制; 结构变化,相场锂枝晶与温度场交互研究
FLAC3D 7.0:修正剑桥模型下的固结排水三轴试验研究与应用,flac3d7.0 修正剑桥模型,固结排水三轴试验 ,核心关键词:flac3d7.0; 修正剑桥模型; 固结排水三轴试验;,FLAC3D 7.0优化剑桥模型:固结排水三轴试验的修正
基于卷积神经网络与门控循环单元的深度学习模型:融合SE注意力机制的数据回归预测(CNN-GRU-SE机制)在MATLAB环境下的应用与评价指标R2、MAE、MBE及RMSE分析。,基于卷积神经网络-门控循环单元结合SE注意力机制的数据回归预测(CNN-GRU-SE) 基于MATLAB环境 替自己的数据即可 数据回归预测评价指标为R2 MAE MBE RMSE ,核心关键词:卷积神经网络; 门控循环单元; SE注意力机制; 数据回归预测; MATLAB环境; R2; MAE; MBE; RMSE,基于SE注意力机制的CNN-GRU混合模型在MATLAB中的数据回归预测
项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea
Java弹球小游戏.zip毕设案例程序资源
【Python】毕业设计项目,基于深度学习的实时语义分割算法研究,python实现
内容概要:该论文探讨了通过融合生物医学文本挖掘及先进的知识图谱补全模型来为新冠肺炎寻找新用途药物的方法。研究者采用了神经网络方法从大量文献中提取有价值的语义三元组并构建一个大型知识图谱,在此基础上应用最新的嵌入技术和模式发现手段。此外,文中还进行了广泛的对比实验和性能评估,提出了几个有潜力的新药如紫杉醇(Paclitaxel),SB 203580 和抗纤溶素(α2-Antiplasmin),并对它们的作用机制进行了理论分析。这表明文献为基础的知识发现可以作为辅助药物筛选的有效工具。 适合人群:对生物医药大数据、人工智能、特别是机器学习应用于医学研究感兴趣的研究人员及专业人士。 使用场景及目标:该方法不仅可以快速确定可能有效的治疗新冠肺炎的新用途药物,还可以通过提供详细的分子机制解释帮助临床验证阶段的决策支持。这种创新性计算方法同样适用于其他疾病领域内的药物重定位任务。 其他说明:该研究展示了如何有效整合大规模非结构化医疗数据与现有生物数据库之间的关联信息,从而加速科学研究进程。然而作者指出未来需要进一步扩大样本量进行实证检验,并且考虑引入更多维度的数据集以完善预测准确性。此外,为了便于后续研究和技术交流,相关源代码已经发布到了GitHub平台。
前端Node:第四章:大事件
项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea
仿真 java单机小游戏程序资源实践案例学习资源
# 基于Java Swing的水果管理系统 ## 项目简介 本项目是一个基于Java Swing库开发的水果管理系统,主要用于管理水果的库存信息。系统提供了查看、修改、添加和删除水果信息的功能,适用于小型水果店的库存管理。 ## 项目的主要特性和功能 1. 水果信息管理 查看水果的详细信息,包括图片链接、名称、价格和库存。 修改现有水果的价格和库存信息。 添加新的水果到系统中。 删除不再销售的水果。 2. 用户界面 使用Java Swing库构建图形用户界面,界面分为四个主要部分中心(显示水果信息)、南部(显示制作信息)、西部(显示页码和翻页按钮)和北部(操作按钮)。 东部使用卡片布局,根据用户的选择切换不同的操作面板(查看、修改、添加、删除)。 3. 数据处理 使用DecimalFormat类格式化价格和库存数据,确保显示的数值保留两位小数。
基于动态控制策略的光伏混合储能直流微网系统功率共享技术研究,光伏混合储能直流微网 基于动态演化控制的混合储能系统功率共享方法 A Dynamic Evolution Control Based PowerSharing Method for Hybrid Energy StorageSystem lunwen复现 直流母线电压不随光伏强度、负载变化发生改变,维持在50v ,光伏混合储能; 直流微网; 动态演化控制; 功率共享方法; 直流母线电压稳定(50v); 混合储能系统。,光伏微网下混合储能动态控制策略研究
本项目是自己做的设计,有GUI界面,完美运行,适合小白及有能力的同学进阶学习,大家可以下载使用,整体有非常高的借鉴价值,大家一起交流学习。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。
# 基于PythonOpenCV的津南数字制造图像识别系统 ## 项目简介 本项目是一个基于Python和OpenCV库的图像识别系统,主要用于津南数字制造算法挑战赛中处理图像数据。项目包含多个部分,如图像处理、目标检测、模型训练与评估等,旨在通过计算机视觉技术识别图像中的特定目标。 ## 项目的主要特性和功能 1. 图像处理与标注项目提供了图像处理功能,包括图像读取、滤波、颜色空间转换等,以及基于json格式的图像标注信息,支持图像和标注信息的关联。 2. 目标检测使用图像处理技术,如边缘检测、颜色过滤和形态学操作,对图像中的目标进行识别。 3. 模型训练与评估构建和训练卷积神经网络(CNN)模型,用于图像分类任务。同时,提供模型评估功能,用于评估模型的性能。 4. 结果提交与保存项目提供了结果提交和保存功能,将处理结果以JSON格式保存,方便后续处理和分析。 ## 安装使用步骤
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
基于FPGA的Verilog语言实现FOC控制:三相永磁同步与异步电机的开环闭环PI控制策略,FPGA_Verilog语言_FOC控制三相永磁同步 异步电机_开环 闭环控制_PI控制 ,FPGA; Verilog语言; FOC控制; 三相永磁同步电机; 异步电机; 开环控制; 闭环控制; PI控制,FPGA实现Verilog编程,FOC控制三相永磁同步/异步电机:开环与闭环PI控制
《基于Omron欧姆龙PLC技术的温室大棚自动控制系统的设计与实现》,No.1072 基于Omron欧姆龙PLC的温室大棚自动控制系统的设计 ,Omron PLC; 温室大棚; 自动控制系统; 设计; No.1072,基于Omron PLC的温室大棚自动化控制系统设计 No.1072
大厂标准PCSS储能系统仿真模型源代码实现,大厂量产的PCS储能仿真模型 源代码实现的仿真模型 ,大厂; 量产; PCS储能; 仿真模型; 源代码实现; 模型; 能量存储,大厂量产PCS储能模型源代码实现