packagecom.javakc.test7;importcom.javakc.db.Utils;importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.sql.Connection;importjava.sql.PreparedStatement;publicclassTools{publicstaticintinsert(Object o)throwsException{//获得连接Connection connection =Utils.getConnection();//得到数据库表名Class c = o.getClass();
c.getSimpleName();//拼接sqlStringBuffer sql =newStringBuffer("insert into "+ c.getSimpleName());//得到数据库表中的字段Field[] fs = c.getDeclaredFields();
sql.append("(");for(Field f : fs){
sql.append(f.getName()+",");}
sql.deleteCharAt(sql.length()-1);
sql.append(")");//得到数据库表中的values值
sql.append("values(");for(int i =0; i < fs.length; i++){
sql.append("?,");}
sql.deleteCharAt(sql.length()-1);
sql.append(")");PreparedStatement preparedStatement = connection.prepareStatement(sql.toString());//循环替换占位符for(int i =0; i < fs.length; i++){//得到字段String name = fs[i].getName();Method m =getMethod(c, name);
preparedStatement.setObject(i +1, m.invoke(o));}int rows = preparedStatement.executeUpdate();//关闭连接
preparedStatement.close();
connection.close();return rows;}//根据字段取得get方法publicstaticMethodgetMethod(Class c,String name)throwsNoSuchMethodException{//得到字段的get方法String methodName ="get"+ name.substring(0,1).toUpperCase()+ name.substring(1);return c.getDeclaredMethod(methodName);}}
packagecom.javakc.test7;importcom.javakc.vo.User;publicclassTest{publicstaticvoidmain(String[] args)throwsException{User u =newUser();
u.setId(2);
u.setName("2");int i =Tools.insert(u);System.out.println(i);}}
新增,自定义注解
packagecom.javakc.vo;@TableName(name ="user")publicclassTestUser{//封装数据库表中的数据privateint id;privateString name;publicintgetId(){return id;}publicvoidsetId(int id){this.id = id;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}@OverridepublicStringtoString(){return"User{"+"id="+ id +", name='"+ name +'\''+'}';}}
packagecom.javakc.test7;importcom.javakc.db.Utils;importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.util.ArrayList;importjava.util.List;publicclassToolSelect{publicstaticListselect(Class c)throwsException{List list =newArrayList();//获得连接Connection connection =Utils.getConnection();//sql语句StringBuffer sql =newStringBuffer("select ");//取得数据库表中的字段Field[] fs = c.getDeclaredFields();for(Field f : fs){
sql.append(f.getName()+",");}
sql.deleteCharAt(sql.length()-1);
sql.append(" from ");//数据库表名
c.getSimpleName();
sql.append(c.getSimpleName());PreparedStatement preparedStatement = connection.prepareStatement(sql.toString());System.out.println(sql);ResultSet resultSet = preparedStatement.executeQuery();while(resultSet.next()){//创建对象Object o = c.getDeclaredConstructor().newInstance();for(Field f : fs){//字符串类型if(f.getType()==String.class){String value = resultSet.getString(f.getName());Method m =setMethod(c, f.getName(),String.class);
m.invoke(o, value);}elseif(f.getType()==int.class){int value = resultSet.getInt(f.getName());Method m =setMethod(c, f.getName(),int.class);
m.invoke(o, value);}}
list.add(o);}return list;}//取得set方法privatestaticMethodsetMethod(Class c,String name,Class parameter)throwsException{String methodName ="set"+ name.substring(0,1).toUpperCase()+ name.substring(1);return c.getDeclaredMethod(methodName, parameter);}}
packagecom.javakc.test7;importcom.javakc.vo.User;importjava.util.List;publicclassTestSelect{publicstaticvoidmain(String[] args)throwsException{List list =ToolSelect.select(User.class);for(Object o : list){System.out.println(o);}}}
查询,自定义注解
//自定义注解@TableName(name ="user")publicclassTestUser{//封装数据库表中的数据privateint id;privateString name;publicintgetId(){return id;}publicvoidsetId(int id){this.id = id;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}@OverridepublicStringtoString(){return"User{"+"id="+ id +", name='"+ name +'\''+'}';}}