从数据库中提取数据并注入到对象中

来源:互联网 发布:手机淘宝下载安装2017免费下载 编辑:程序博客网 时间:2024/06/05 17:51

1.在类DBHelper中,使用方法finds查询数据,并注入到对象中

//将数据库的值注入到对象中public <T> List<T> finds(String sql,Class<T> c,Object ...params) {List<T> list=new ArrayList<T>();ResultSet rs=null;Connection con=null;PreparedStatement pstmt=null;ResultSetMetaData rsmd=null;try {con=this.getConnection();pstmt=con.prepareStatement(sql);this.setValue(pstmt, params);rs=pstmt.executeQuery();rsmd=rs.getMetaData();int colCount=rsmd.getColumnCount();//获取列数String[] colNames=this.getColName(rsmd, colCount);//获取所有列名List<Method> methods=this.getSetter(c);//取出给定类的所有setter方法T t=null;String colName=null;//数据库的列名String mName=null;//方法名称Object obj=null;String typeName=null;//类型名称while (rs.next()) {//每循环一次就是一条记录,对应一个对象t=c.newInstance();//相当于实例了一个c对象 new userInfo()for(String col:colNames){colName="set"+col;for(Method method:methods){mName=method.getName();//取出set方法名 如setUsidif(colName.equalsIgnoreCase(mName)){//找到了对应的方法obj=rs.getObject(col);//取出这个列的属性if(obj!=null){//如果不为空,则获取这个对象的类型,如果为空,则属性为空,不需要管typeName=obj.getClass().getSimpleName();//激活这个方法注值if("BigDecimal".equals(typeName)){// numbertry {//对带有指定参数的指定对象调用由此 Method 对象表示的底层方法method.invoke(t, rs.getInt(col));//整型} catch (Exception e) {method.invoke(t, rs.getDouble(col));//浮点型}}else {method.invoke(t, String.valueOf(obj));//字符串}}break;}}}list.add(t);}} catch (Exception e) {// TODO: handle exception}return list;}

2.getSetter()方法获取指定类的setter

/** * 获取指定类的setter方法 * @param c * @return */public List<Method> getSetter(Class<?> c) {Method[] methods=c.getMethods();//获取类c中的所有方法List<Method> list=new ArrayList<Method>();for(Method method:methods){if(method.getName().startsWith("set")){//获取set方法list.add(method);}}return list;}

3.实例,用户信息类

package com.ylp.usersys.bean;public class UserInfo {private int usid;private String uname;private int did;private String tel;private String photo;private String dname;public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}public int getUsid() {return usid;}public void setUsid(int usid) {this.usid = usid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public int getDid() {return did;}public void setDid(int did) {this.did = did;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public String getPhoto() {return photo;}//获取用户图片public String getPhotos() {if (photo==null||"".equals(photo)||"null".equals(photo)) {//如果没有图片,则显示指定图片return "<img src='images/zanwu.jpg' width='50px' height='50px'/>";}else if (photo.indexOf(",")>0) {//多张图片以“,”分隔String[] photos=photo.split(",");String str="";for(String p:photos){str+="<img src="+p+" width='50px' height='50px'/>";}return str;}else {//一张图片return "<img src="+photo+" width='50px' height='50px'/>";}}public void setPhoto(String photo) {this.photo = photo;}public UserInfo(int usid, String uname, int did, String tel, String photo,String dname) {super();this.usid = usid;this.uname = uname;this.did = did;this.tel = tel;this.photo = photo;this.dname = dname;}public UserInfo() {super();}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + did;result = prime * result + ((dname == null) ? 0 : dname.hashCode());result = prime * result + ((photo == null) ? 0 : photo.hashCode());result = prime * result + ((tel == null) ? 0 : tel.hashCode());result = prime * result + ((uname == null) ? 0 : uname.hashCode());result = prime * result + usid;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;UserInfo other = (UserInfo) obj;if (did != other.did)return false;if (dname == null) {if (other.dname != null)return false;} else if (!dname.equals(other.dname))return false;if (photo == null) {if (other.photo != null)return false;} else if (!photo.equals(other.photo))return false;if (tel == null) {if (other.tel != null)return false;} else if (!tel.equals(other.tel))return false;if (uname == null) {if (other.uname != null)return false;} else if (!uname.equals(other.uname))return false;if (usid != other.usid)return false;return true;}@Overridepublic String toString() {return "UserInfo [usid=" + usid + ", uname=" + uname + ", did=" + did+ ", tel=" + tel + ", photo=" + photo + ", dname=" + dname+ "]";}}

4.UserDao

package com.ylp.usersys.dao;import java.util.List;import java.util.Map;import com.ylp.usersys.bean.UserInfo;public class UserDao {public List<UserInfo> find() {String sql="select usid,uname,tel,photo,u.did,dname from userInfo u,deptInfo d where u.did=d.did order by usid";DBHelper dbHelper=new DBHelper();return dbHelper.finds(sql, UserInfo.class);}public int  add(String uname,String did,String tel,String photo) {DBHelper dbHelper=new DBHelper();String sql="insert into userinfo values(seq_userinfo_usid.nextval,?,?,?,?)";return dbHelper.update(sql, uname,did,tel,photo);}/** * 查询总记录数 * @return */public int total() {DBHelper dbHelper=new DBHelper();String sql="select count(*) as total from userinfo";Map<String, String> map=dbHelper.findSingleByStr(sql);if (map!=null&&map.size()>0) {return Integer.parseInt(map.get("total"));}else {return 0;}}/** * 分页查询 * @param pageNo 当前第几页 * @param pageSize 每页几条 * @return */public List<UserInfo> find(Integer pageNo,Integer pageSize) {String sql="select * from (select a.*,rownum rn from (select u.*,dname from userInfo u left join  deptInfo d on u.did=d.did order by usid) a where rownum<=?) where rn>?";DBHelper dbHelper=new DBHelper();return dbHelper.finds(sql, UserInfo.class, pageNo*pageSize,(pageNo-1)*pageSize);}/** * 分页按部门查询 * @param did 部门编号 * @return */public List<UserInfo> findByDept(String did) {DBHelper dbHelper=new DBHelper();if ("-1".equals(did)) {String sql="select u.*,dname from userInfo u left join  deptInfo d on u.did=d.did  order by usid ";return dbHelper.finds(sql, UserInfo.class);}else if ("0".equals(did)) {String sql="select u.*,dname from userInfo u left join  deptInfo d on u.did=d.did  order by usid ";return dbHelper.finds(sql, UserInfo.class);}else {String sql="select u.*,dname from userInfo u left join  deptInfo d on u.did=d.did where  u.did=? order by usid ";return dbHelper.finds(sql, UserInfo.class, did);}}}

5.使用获取到的UserInfo对象

UserDao userDao=new UserDao();List<UserInfo> users=userDao.find();for(UserInfo user:users){    String uname=user.getUname();    String usid=user.getUsid();}




阅读全文
0 0