Java_反射_SQL增删改查
#Java Bean
package com.hp.beans; /** * Java类 User */ public class user { private Integer uid; private String uname; private String upass; private String isadmin; public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpass() { return upass; } public void setUpass(String upass) { this.upass = upass; } public String getIsadmin() { return isadmin; } public void setIsadmin(String isadmin) { this.isadmin = isadmin; } @Override public String toString() { return "user{" + "uid=" + uid + ", uname='" + uname + '\'' + ", upass='" + upass + '\'' + ", isadmin='" + isadmin + '\'' + '}'; } public user(Integer uid, String uname, String upass, String isadmin) { this.uid = uid; this.uname = uname; this.upass = upass; this.isadmin = isadmin; } public user() { } }
#获得链接
package com.hp.reflect; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * 获取Sql连接的类 */ public class GetConnection{ /** * 获取sql的连接对象 * @return */ public Connection getCon(){ //定义连接对象 Connection conn=null; try { //加载MySql数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //通过DriverManager.getConnection(url,username,password)获取数据库的连接 conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root"); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } //将获取的数据库连接返回 return conn; } }
#增删改查
package com.hp.reflect; import com.hp.beans.user; import java.lang.reflect.Field; import java.sql.*; import java.util.ArrayList; import java.util.List; /** * 反射_sql查询 */ public class DaoImpl { //定义接收的类型为泛型集合 public <T> List<T> select(T t) throws SQLException, IllegalAccessException, InstantiationException { //Class.getSimpleName()通过泛型获取对象名 String sql="select * from "+t.getClass().getSimpleName(); //实例化List泛型 List<T> li=new ArrayList<T>(); //实例化GetConnection类,通过getCon方法获取Sql的连接 Connection con = new GetConnection().getCon(); //通过连接的prepareStatement()的方法执行sql语句 //调用executeQuery()执行查询获取查询的结果集合 ResultSet res = con.prepareStatement(sql).executeQuery(); //通过resultSet.getMetadata()将结果集合转换为ResultMetaData对象 ResultSetMetaData md = res.getMetaData(); //获取结果的列数 int count = md.getColumnCount(); //获取java对象的属性数组 Field[] filds = t.getClass().getDeclaredFields(); //调用next方法遍历结果集合 while(res.next()) { //将泛型类实例化为对象 T t2 = (T) t.getClass().newInstance(); //循环泛型对象的属性值 for (int i = 0; i < filds.length; i++) { //输出当前的属性 System.out.println(filds[i]); //循环遍历当前结果集中的对象的属性 for (int k = 0; k < count; k++) { //获取此条信息的列的名字 String columnName = md.getColumnName(k + 1); //判断结果集中的列名与Java类中的属性名是否对应 if (filds[i].getName().toUpperCase().equals(columnName.toUpperCase())) { //修改类的Accessible为true,使当前属性可以修改 filds[i].setAccessible(true); //res.getObject(列名) 获取当前这条信息的列名的数据 //调用Filed类的set方法,给当前对象赋值 filds[i].set(t2, res.getObject(columnName)); } } } //将循环赋值完成的类添加到集合中 li.add(t2); } //返回结果 return li; } /** * 更新 * @param t * @param <T> * @return */ public <T> T update(T t){ try { Field[] filds = t.getClass().getDeclaredFields(); filds[0].setAccessible(true); String tiao=""; for(int i=1;i<filds.length;i++){ Field fild=filds[i]; fild.setAccessible(true); if(fild.getType().equals(String.class)) { tiao += fild.getName() + "='" + fild.get(t) + "',"; } else{ tiao += fild.getName() + "='" + fild.get(t) + "',"; } } tiao=tiao.split(",$")[0]; String sql="update "+t.getClass().getSimpleName()+" set "+tiao+" where "+filds[0].getName()+" ="+filds[0].get(t); System.out.println(sql); int i=new GetConnection().getCon().prepareStatement(sql).executeUpdate(); System.out.println(i); if (i>0){ System.out.println("Successful!"); } else{ System.out.println("Error!"); } } catch (IllegalAccessException | SQLException e) { e.printStackTrace(); } return null; } /** * 添加 * @param t * @param <T> * @return * @throws IllegalAccessException */ public <T> T insert(T t) throws IllegalAccessException { Field[] filds = t.getClass().getDeclaredFields(); String columnName=""; String columnValue=""; for (int i=0;i<filds.length;i++){ filds[i].setAccessible(true); if(filds[i].get(t)==null){ continue; } columnName+=filds[i].getName()+","; if(filds[i].getType().equals(String.class)){ columnValue+="'"+filds[i].get(t)+"'"+","; } else{ columnValue+=filds[i].get(t)+","; } } columnName=columnName.split(",$")[0]; columnValue=columnValue.split(",$")[0]; String sql="insert into "+t.getClass().getSimpleName()+"("+columnName+") values("+columnValue+")"; System.out.println(sql); try { int i=new GetConnection().getCon().prepareStatement(sql).executeUpdate(); if(i>0){ System.out.println("Successful!"); } else{ System.out.println("Error!"); } } catch (SQLException e) { e.printStackTrace(); } return null; } /** * 反射删除 * @param t * @param <T> * @return */ public <T> T delete(T t) throws SQLException { Field fild = t.getClass().getDeclaredFields()[0]; fild.setAccessible(true); try { String sql="delete from "+t.getClass().getSimpleName()+" where "+fild.getName()+" = "+fild.get(t); System.out.println(sql); int i=new GetConnection().getCon().prepareStatement(sql).executeUpdate(); if(i>0){ System.out.println("Successful!"); } else{ System.out.println("Error!"); } } catch (IllegalAccessException e) { e.printStackTrace(); } return null; } }
Java_反射_SQL增删改查
最新推荐文章于 2024-08-29 13:00:12 发布