在javaEE中,java类的属性通过getter和setter来定义,get(或set)方法去除get(set)后,首字母小写即为Java类的属性。操作java类的属性有一个工具包,BeanUtils,其中的setProperty()方法是通过javaBean中的set方法赋值的。

使用BeanUtils需要加入两个jar包,

1.测试BeanUtils中的SetProperty()方法。

@Test
public void testSetProperty() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{
Object object = new Student();
System.out.println(object);
BeanUtils.setProperty(object,"type",2434);
System.out.println(object);
System.out.println(BeanUtils.getProperty(object,"type"));
}

运行后:

①创建一个Student对象student,未赋值之前属性为空;

②BeanUtils.setProperty(object,"type",2434); 为student赋值,属性为对应的Student类get(或set)方法去除get(set)后再把首字母小写;

③赋值后使用BeanUtils.getProperty(object,"type"); 获得属性值。

DAO:Data Access Object,是访问数据信息的类,包含了对数据的CRUD(create,read,update,delete),而不包含任何业务相关的信息,更容易实现功能的模块化,有利于代码的维护和升级。

1.update,包括插入,删除,更新操作

public void update(String sql,Object ... args){
Connection connection=null;
PreparedStatement preparedstatement=null;
ResultSet resultset=null;
try{
connection=JDBCTools.getConnection();
preparedstatement=connection.prepareStatement(sql);
for(int i=0;i<args.length;i++){
preparedstatement.setObject(i+1, args[i]);
}
preparedstatement.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCTools.release(resultset,preparedstatement, connection);
}
}

测试方法:

@Test
public void testUpdate() {
String sql="INSERT INTO EXAMSTUDENT(FlowId,TYPE,IdCard,ExamCard,StudentName,Location,Grade)"
+ "VALUES(?,?,?,?,?,?,?)";
dao.update(sql,1,2,"23313","2321","Li","大连",313);
}

2.查询多条记录,返回对应的查询对象的集合

public <T> List<T> getForList(Class<T> clazz,String sql,Object ... args){
List<T> list=new ArrayList<>();
Connection connection=null;
PreparedStatement preparedstatement=null;
ResultSet resultset=null;
try{
//1.得到结果集resultset
connection=JDBCTools.getConnection();
preparedstatement=connection.prepareStatement(sql);
for(int i=0;i<args.length;i++){
preparedstatement.setObject(i+1, args[i]);
}
resultset=preparedstatement.executeQuery();
//2.处理结果集,将得到的ResultSet结果集中的别名和列值存入到Map中,得到Map的List
List<Map<String,Object>> listMap = handleResultSetToMapList(resultset);
//3.将Map的List转为clazz对应的List,其中Map的key即为clazz对应的属性名,Map的value为clazz对应的属性值
list=transferMapListToBeanList(clazz,listMap);
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCTools.release(resultset,preparedstatement, connection);
}
return list;
}

2.1 得到结果集

2.2 将ResultSet结果集转换为MapList的方法:handleResultSetToMapList(resultset)

private List<Map<String, Object>> handleResultSetToMapList(ResultSet resultset)
throws Exception, SQLException {
List<Map<String,Object>> list=new ArrayList<>();
//得到resultset中的列名
List<String> columnLabels=getColumnLabels(resultset);
Map<String,Object> map=null;
while(resultset.next()){
map=new HashMap<>();
//得到SQL查询的列数
int count=columnLabels.size();
for(String columnLabel:columnLabels){
Object columnValue=resultset.getObject(columnLabel);
//将别名,列值存入到Map中
map.put(columnLabel,columnValue);
}
list.add(map);
}
return list;
}

其中得到resultset中的列名的方法:getColumnLabels(resultset)

private List<String> getColumnLabels(ResultSet resultset) throws Exception{
List<String> labels=new ArrayList<String>();
ResultSetMetaData rsmd=resultset.getMetaData();
int count=rsmd.getColumnCount();
while(resultset.next()){
for(int i=0;i<count;i++){
labels.add(rsmd.getColumnLabel(i+1));
}
}
return labels;
}

2.3 将MapList转换为javaBean属性对应的List:transferMapListToBeanList(clazz,listMap)

private <T> List<T> transferMapListToBeanList(Class<T> clazz,List<Map<String, Object>> listMap) throws InstantiationException, IllegalAccessException, InvocationTargetException {
List<T> result=new ArrayList<>();
T bean=null;
if(listMap.size()>0){
//listMap中存的是多条记录的列名和列值,遍历listMap
for(Map<String,Object> map1:listMap){
bean=clazz.newInstance();
//遍历map1
for(Map.Entry<String, Object> entry:map1.entrySet()){
String propertyName=entry.getKey();
Object propertyValue=entry.getValue();
BeanUtils.setProperty(bean,propertyName,propertyValue);
}
result.add(bean);
}
}
return result;
}

测试方法:

@Test
public void testGetForList() {
String sql="SELECT FlowID flowId,TYPE type,IDCard idCard,ExamCard examCard,"
+ "StudentName studentName,Location location,Grade grade FROM EXAMSTUDENT";
List<Student> student=dao.getForList(Student.class,sql);
System.out.println(student);
}

3.查询一条记录,返回对应的对象

public <T> T get(Class<T> clazz,String sql,Object ... args){
List<T> result=getForList(clazz,sql,args);
if(result.size()>0){
return result.get(0);
}
return null;
}

4.返回某条记录的某一个字段的值或一个统计的值(一共有多少条记录等)

public <E> E getForValue(String sql,Object ... args){
Connection connection=null;
PreparedStatement preparedstatement=null;
ResultSet resultset=null;
try{
connection=JDBCTools.getConnection();
preparedstatement=connection.prepareStatement(sql);
for(int i=0;i<args.length;i++){
preparedstatement.setObject(i+1, args[i]);
}
resultset=preparedstatement.executeQuery();
if(resultset.next()){
return (E)resultset.getObject(1);
}
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCTools.release(resultset,preparedstatement, connection);
}
return null;
}

测试方法:

@Test
public void testGetForValue() {
String sql="SELECT ExamCard FROM EXAMSTUDENT WHERE FlowId=?";
String ExamCard=dao.getForValue(sql,1);
System.out.println(ExamCard);
}

wx搜索“程序员考拉”,专注java领域,一个伴你成长的公众号!

最新文章

  1. SSH框架和Redis的整合(1)
  2. Swift - 设置tableView每个分区cell圆角
  3. css3的背景颜色渐变@线性渐变
  4. 因为相同类型的其他实体已具有相同的主键值。在使用 &quot;Attach&quot; 方法或者将实体的状态设置为 &quot;Unchanged&quot; 或 &quot;Modified&quot; 。。。
  5. 智能车学习(十八)&mdash;&mdash;电机学习
  6. 关于JQuery的一些知识点
  7. HDU 5212 Code
  8. Html - 横版TH+TD
  9. (转)Aspone.Cells设置Cell数据格式 Setting Display Formats of Numbers and Dates
  10. SharePoint 2013 开发——CSOM概要
  11. CE_现金银行对账单的手工导入和调节(案例)
  12. Libevent详细说明
  13. Quartz定时任务学习(四)调度器
  14. 斯坦福 IOS讲义 课件总结 三
  15. 让低版本的IE浏览器 强制渲染为IE8 或者 以上 浏览器模式
  16. http header cache-control (request和response区别)
  17. gulp学习指南之CSS合并、压缩与MD5命名及路径替换
  18. [Direct2D1.1教程] Direct2D特效概览
  19. 【翻译】Ext JS 6早期访问版本发布
  20. Python 变量作用域,闭包和装饰器

热门文章

  1. 安装 luajit &amp;&amp; 给 luajit 安装 cjson
  2. redis5.0.4-cluster集群搭建及jedis客户端操作
  3. Android IPC机制—Binder的工作机制
  4. tf入门-池化函数 tf.nn.max_pool 的介绍
  5. var 是 Java 开发的好朋友啊!
  6. MySql环境变量配置
  7. finally语句块一定会执行吗?
  8. php解析word,获得文档中的图片
  9. 常用的re正则
  10. docker 磁盘清理 相关