BaseDaoImpl
来源:互联网 发布:淘宝整点聚秒杀神器 编辑:程序博客网 时间:2024/05/18 04:59
//------------------------------------------------------import java.util.List;public interface BaseDao {void save(Entity obj) throws Exception ; void update (Entity obj) throws Exception; void delete(int id) throws Exception; List findAll() throws Exception;Entity findById( int id) throws Exception;}//----以上是BaseDao//-----------------------------------------------------package com.base;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.ParameterizedType;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import com.util.DBUtils;/** * jdbc连接 : 1创建连接对象 2拼sql 3 preparedstatemenet * @author _oiYc * @param <Entity> */public class BaseDaoImpl<Entity> implements BaseDao<Entity>{//public protected Class clazz ;public BaseDaoImpl(){//System.out.println(this.getClass());ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();//带有真实类型参数的对象clazz = (Class)pt.getActualTypeArguments()[0];System.out.println(clazz);}/*** 保存方法*/public void save(Entity obj) throws Exception {//obj.getSimpleName();Connection conn = DBUtils.createConn();String sql = "insert into " + clazz.getSimpleName() + " values(null ";// 可以获取本类所声明的变量Field[] fs = clazz.getDeclaredFields();//System.out.println(fs.length);for (int i = 1; i < fs.length; i++) {sql += ",? " ;}sql = sql + ")";System.out.println(sql);//进行预编译PreparedStatement ps = DBUtils.getPs(conn, sql);//ps.setString(1, user.getName());for (int i = 1; i < fs.length; i++) {//拼接方法的名称String MethodName = "get" +Character.toUpperCase(fs[i].getName().charAt(0)) + fs[i].getName().substring(1) ;Method m = clazz.getMethod(MethodName);ps.setObject(i, m.invoke(obj));}ps.executeUpdate();DBUtils.close(ps);DBUtils.close(conn);}/*** 更新方法*/public void update(Entity obj) throws Exception {Connection conn = DBUtils.createConn();// update user set name = ? , age = ? where id = ?String sql = " update " + clazz.getSimpleName() + " set ";Field[] fs = clazz.getDeclaredFields();for (int i = 1; i < fs.length; i++) {sql += fs[i].getName() + "=?,";}sql = sql.substring(0, sql.length()-1) + " where id = ? ";PreparedStatement ps = DBUtils.getPs(conn, sql);for (int i = 1; i < fs.length; i++) {String methodName = "get" + Character.toUpperCase(fs[i].getName().charAt(0)) + fs[i].getName().substring(1);Method m = clazz.getMethod(methodName);ps.setObject(i, m.invoke(obj));// user.getName();}Method m2 = clazz.getMethod("getId");ps.setInt(fs.length,(Integer)m2.invoke(obj));ps.executeUpdate();DBUtils.close(ps);DBUtils.close(conn);}/*** 根据一个id 查找对象*/public Entity findById(int id) throws Exception {Connection conn = DBUtils.createConn();String sql = " select * from " + clazz.getSimpleName() + " where id = " + id ;PreparedStatement ps = DBUtils.getPs(conn, sql);ResultSet rs = ps.executeQuery();Entity entity = (Entity) clazz.newInstance();if(rs.next()){Field[] fs = clazz.getDeclaredFields();for (int i = 0; i < fs.length; i++) {String methodName = "set" + Character.toUpperCase(fs[i].getName().charAt(0)) + fs[i].getName().substring(1);Method m = clazz.getDeclaredMethod(methodName, fs[i].getType());m.invoke(entity, rs.getObject(fs[i].getName()));}}DBUtils.close(rs);DBUtils.close(ps);DBUtils.close(conn);return entity;}/*** 查询所有*/public List<Entity> findAll() throws Exception {Connection conn = DBUtils.createConn();String sql =" select * from " + clazz.getSimpleName();PreparedStatement ps = DBUtils.getPs(conn, sql);List<Entity> list = new ArrayList<Entity>();ResultSet rs = ps.executeQuery();while(rs.next()){Entity entity = (Entity)clazz.newInstance();Field[] fs = clazz.getDeclaredFields();for (int i = 0; i < fs.length; i++) {String methodName = "set"+ Character.toUpperCase(fs[i].getName().charAt(0)) + fs[i].getName().substring(1);Method m = clazz.getMethod(methodName, fs[i].getType());m.invoke(entity, rs.getObject(fs[i].getName()));}list.add(entity);}DBUtils.close(rs);DBUtils.close(ps);DBUtils.close(conn);return list;}/*** 删除方法*/public void delete(int id) throws Exception {Connection conn = DBUtils.createConn();String sql = " delete from " + clazz.getSimpleName() + " where id =" +id;PreparedStatement ps = DBUtils.getPs(conn, sql);ps.executeUpdate(sql);DBUtils.close(ps);DBUtils.close(conn);}/*** 条件查询的反射封装方法* @param sql* @param params* @return*/public List<Entity> queryListForParams(String sql,Object[] params ) throws Exception{Connection conn = DBUtils.createConn();PreparedStatement ps = null;ResultSet rs = null;List list = new ArrayList();try {// 建立statement对象(封装了sql)ps = conn.prepareStatement(sql); // select * from org where id = ? and name = ? [1 , z3]if(params!=null){for(int i=0;i<params.length;i++){ps.setObject(i+1, params[i]);}}Field[] fs = clazz.getDeclaredFields();rs = ps.executeQuery();while(rs.next()){Object obj = clazz.getConstructor().newInstance();for(int i = 0 ; i <fs.length;i++ ){String methodName = "set" +fs[i].getName().substring(0, 1).toUpperCase()+fs[i].getName().substring(1);Method m = clazz.getMethod(methodName, fs[i].getType());Object value = rs.getObject(fs[i].getName()); m.invoke(obj, value); }list.add(obj);} } catch (Exception e) {e.printStackTrace();}finally{DBUtils.close(rs);DBUtils.close(ps);DBUtils.close(conn);}return list;} }
0 0
- BaseDaoImpl
- BaseDaoImpl
- BaseDaoImpl
- BaseDaoImpl类
- SSH 的BaseDaoImpl
- J2EE-BaseDaoImpl.java
- BaseDaoImpl得到泛型化超类
- SSH BaseDaoImpl的一般写法
- BaseDaoImpl中使用泛型来反向获得当前的实体类
- BaseDaoImpl中使用反射技术得到泛型<T>的真实类型
- 项目1:ItcastOA(2):日志说明、BaseDao和BaseDaoImpl的设计
- java web项目DAO层通用接口BaseDao与实现类BaseDaoImpl
- hibernate 中的通用接口BaseDao 和BaseDaoImpl的制作 ,泛型制作
- java web项目DAO层通用接口BaseDao与实现类BaseDaoImpl
- HTTP Request的Get、Post的区别
- 查看正在执行中的SQL
- elipse下python插件安装及使用
- Unity中的对象池用法
- 使用缓冲流(处理流)为什么速度会加快?
- BaseDaoImpl
- 调用jar包外配置文件
- PHP + Ice安装配置
- Android sqlite 数据库操作
- 追踪调用
- 用表情开发“俏皮”编程语言
- MAT分析JAVA内存问题
- qt 实现停靠窗口 效果
- spring整合junit单元测试