大家好

已经过了将近一个星期没有发博客了,手心也有点痒痒的。今天周五一点时间我们看如何编写Dao方法。

这个方法我们是基于SpringMVC框架的,其实出发点是这样的。因为我们很多类的类字段都是不一样的,所以在数据库查找的时候如果每一个类都写一些对应的find方法,那样会不会感觉有点复杂。重要的我们还是要进行代码的复用。假设我们已经搭建好了SpringMVC的框架,而且jdbc也配置好了,,我们的domain类也创建好了,有person类,也有animal类

Class Animal{
private String name;
private String species;
private String area;}

Animal类

Class Person{
private String name;
private String age;
private int sex;
}

当然我们们在数据库中也创建好了对应的字段,要保证我们创建类的时候属性和数据库中的字段名称是对应的。我们想做一个功能List<Person> findList(){

//do something

}

List<Animal> findList(){

//do something

}

这个两个函数里面的所执行的操作是不是类似的,肯定的,所以我们想做的事情do something里面是有很多代码是可以级进行复用的这个使用我们就有必要创建一个Dao类,

package com.wdg.util;import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.util.StringUtils;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.wdg.domain.ArticleComment;import freemarker.template.utility.StringUtil;public class CommonDao extends JdbcDaoSupport{private static CommonDao instance;public CommonDao() {super();     }public static CommonDao getInstance(){if(instance==null){@SuppressWarnings("resource")ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");instance= (CommonDao)factory.getBean("commonDao");}return instance;}public int queryInt(String sql){int count = 0;count=super.getJdbcTemplate().queryForObject(sql, Integer.class);return count;}public  void getUserName(){String sql="select * from userinfo";List<Map> result = super.getJdbcTemplate().query(sql, new RowMapper<Map>() {  @Override  public Map<String,String> mapRow(ResultSet rs, int rowNum) throws SQLException {  Map<String,String> row = new HashMap<String, String>();  row.put("rowguid", rs.getString("rowguid"));  return row;  }}); System.out.println(result.toString());}public <T> int insert(T record) {String classpath=record.getClass().toString();String tablename=classpath.substring(classpath.lastIndexOf('.')+1,classpath.length());StringBuffer sb=new StringBuffer();StringBuffer sb1=new StringBuffer();sb.append("insert into "+tablename+"(");Field [] fields=record.getClass().getDeclaredFields();for(Field f:fields){sb.append(f.getName());sb.append(",");String methodname=f.getName().substring(0, 1).toUpperCase() + f.getName().substring(1);try {Method method=record.getClass().getMethod("get"+methodname,null);Object value=method.invoke(record,null);if(value==null){sb1.append(value);}else{if(value.getClass().toString().indexOf("util.Date")>0){Date d=(Date) value;java.sql.Date sdate = new java.sql.Date(d.getTime());value=sdate;}sb1.append("\'"+value+"\'");}sb1.append(",");} catch (Exception e) {e.printStackTrace();} }String sql=sb.toString().substring(0,sb.toString().lastIndexOf(','));sql=sql+") values("+sb1.toString().substring(0,sb1.toString().lastIndexOf(','))+")";super.getJdbcTemplate().execute(sql);return 0;}@SuppressWarnings("unchecked")public <T> List<T> findList(String sql, Class clazz) {Field [] fields=clazz.getDeclaredFields();List<Object> list=new ArrayList<Object>();List<Map<String,Object>> list1=super.getJdbcTemplate().queryForList(sql);try {for(int i=0;i<list1.size();i++){Class classType = Class.forName(clazz.getName()); Object obj = classType.newInstance();for(Field f:fields){String methodname=f.getName().substring(0, 1).toUpperCase() + f.getName().substring(1);Method method = classType.getMethod("set"+methodname,f.getType());method.invoke(obj,list1.get(i).get(methodname)); } list.add(obj);}} catch (Exception e) {e.printStackTrace();}       return (List<T>) list;}
}

所以我们想获取到实体的list集合的时候,仅仅需要做的就是:

List<Person> getPersonList(){

String sql="select * from person";

return CommonDao.getInstance().findList(sql,Person.class);

}

List<Animal> getPersonList(){

String sql="select * from animal";

return CommonDao.getInstance().findList(sql,Animal.class);

}

是不是很开心,很简洁

但是要实现这些功能之前,需要做的事情配置好对应的jdbc,SpringMVC框架

希望对你有所帮助

SpringMVC基于框架编写CommDao类---findList相关推荐

  1. php 单例类 mysql pdo_PHP实战:PHP基于单例模式编写PDO类的方法

    <PHP实战:PHP基于单例模式编写PDO类的方法>要点: 本文介绍了PHP实战:PHP基于单例模式编写PDO类的方法,希望对您有用.如果有疑问,可以联系我们. 一.单例模式简介 简单的说 ...

  2. PHP基于单例模式编写PDO类的方法

    一.单例模式简介简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务:二.为什么要使用PHP单例模式?1.php的应用主要在于数据库应用, 所以一个应用中会存在大量的 ...

  3. 基于框架编写驱动代码

    操作驱动的上层代码(pin4test) #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> ...

  4. 树莓派学习笔记(十三)基于框架编写驱动代码

    文章目录 一.代码分析: 二.源码 一.代码分析: 在内核中由于代码文件多,避免函数名重复,使用static将函数的作用域限制在该文件内 内核的打印函数printk和printf类似 file_ope ...

  5. twisted:基于python的twisted框架编写一个客户端和服务端的对话聊天空间

    twisted:基于python的twisted框架编写一个客户端和服务端的对话聊天空间 目录 输出结果 实现代码 输出结果 更新-- 实现代码 #基于python的twisted框架编写一个简单的聊 ...

  6. Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据.人工智能.机器学习项目开发Mus ...

  7. Java语言开发在线美食推荐网 美食推荐系统 基于用户、物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis框架 人工智能、大数据、机器学习项目开发

    Java语言开发在线美食推荐网 美食推荐系统 基于用户.物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis框架 人工智能.大数据.机器学习项目开发FoodRecomm ...

  8. 基于OpenGL ES 的深度学习框架编写

    基于OpenGL ES的深度学习框架编写 背景与工程定位 背景 项目组基于深度学习实现了视频风格化和人像抠图的功能,但这是在PC/服务端上跑的,现在需要移植到移动端,因此需要一个移动端的深度学习的计算 ...

  9. php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南

    此文章入选<PHP领域内容榜>第4名 文章介绍 本文主要介绍通过thinkPHP5和第三方支付类包(WeChatDeveloper)实现快速接入微信扫码支付和微信H5手机网站支付(非微信浏 ...

最新文章

  1. 【windows】cmd中的help无法使用的解决方法
  2. 详解网页中的关键词分布技术
  3. Tomcat的安装和运行
  4. JavaScript frame跨域获取元素、修改元素属性、调用其他frame页面方法
  5. jq中查找上级_【节能学院】电能管理系统在福州三岐小学项目中的设计及应用...
  6. python特征选择的过程_【来点干货】机器学习中常用的特征选择方法及非常详细的Python实例...
  7. html中的form action属性,HTML form action 属性
  8. Failed to create the part's controls [eclipse]
  9. python oop_python中oop
  10. arcgis不闭合线转面_地理工具学习--arcgis篇(15):CAD和SHP的简单转换
  11. direct3d Colorkey 应用.
  12. 光在参与介质中的传播及辐射传递方程
  13. 微信小程序选项卡页面切换
  14. 【饭谈】为什么有的技术博文你看不懂?
  15. 小米max android7 root,小米Max root教程 小米Max卡刷获取root权限的方法
  16. mysql 4 字节存储问题_关于mysql存储过程存储4字节emoj的'\xF0\x9F\x98\x82' for column ``.``.`p_topicname`问题的解决办法...
  17. c语言c2056错误,C语言中文网_c.biancheng.net - 爱站网站排行榜
  18. 大数据毕设题目推荐 - 最新大数据毕设选题 - 毕业设计项目方向课题
  19. VR科技赋能智慧冬奥
  20. 一分钟搞定最长公共子序列与最长公共子串的问题

热门文章

  1. 弹出窗口以及关闭窗口
  2. WCF 基础之契约(Contract)[转]
  3. 基于路由器网络诊断步骤和故障排除技巧
  4. MySQL优化篇:SQL优化流程
  5. 34岁,外企倒闭成功上岸大厂,50K,附面试秘籍
  6. CTO让我研究中台(一):阿里的“数据+业务”双中台架构
  7. MapReduce设计模式
  8. 如何搭建高可用Redis服务
  9. NVIDIA Jetson TX2使用
  10. 03 Java程序员面试宝典视频课程之常用类