增强版basedao java 反射和映射
来源:互联网 发布:js promise的用法总结 编辑:程序博客网 时间:2024/05/17 03:13
public class BaseDao{
String DBUser;
String DBPwd;
String DBHost;//服务器地址
String DBName;
int Port;
int Port2;
int DBType;//1 mysql 2 sqlserver 3 oracle;
Connection conn;
PreparedStatement ps;
public ResultSet rs;
// 链接配置文件
public BaseDao(){
Properties pro=new Properties();
InputStream is=BaseDao.class.getClassLoader().getResourceAsStream("database.properties");
try {
pro.load(is);
DBUser=pro.getProperty("DBUser");
DBPwd=pro.getProperty("DBPwd");
DBHost=pro.getProperty("DBHost");
DBName=pro.getProperty("DBName");
Port=Integer.parseInt(pro.getProperty("Port"));
DBType=Integer.parseInt(pro.getProperty("DBType"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//打开链接数据库
public void open(){
try {
if(DBType==1){
Class.forName("com.mysql.jdbc.Driver");
// jdbc:mysql://localhost:3306/数据库名
conn=DriverManager.getConnection("jdbc:mysql://"+DBHost+":"+Port+"/"+DBName, DBUser, DBPwd);
}else if(DBType==2){
Class.forName("com.microsoft.sqlserver.sqlserverDriver");
//jdbc:sqlserver://localhost:1433;databasename=myschool
conn=DriverManager.getConnection("jdbc:sqlserver://"+DBHost+":"+Port2+";databasename="+DBName, DBUser, DBPwd);
}else{
}
} catch (Exception e){
e.printStackTrace();
}
}
//关闭
public void close(){
//后出现的先关闭
try {
if(rs!=null){
rs.close();
}
ps.close();
conn.close();
} catch (Exception e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 执行增删改
* @param sql 所执行的sql语句
* @param params sql语句中的参数
* @return 受影响的行数
*/
public int executeUpdate(String sql,Object []params){
open();
int a=0;
try{
ps=conn.prepareStatement(sql);
if(params!=null){
for (int i = 0; i < params.length; i++) {
ps.setObject(i+1,params[i]);
}
}
a=ps.executeUpdate();
} catch (Exception e){
e.printStackTrace();
}
close();
return a;
}
public ResultSet executeQuery(String sql,Object []params){
open();
try{
ps=conn.prepareStatement(sql);
if(params!=null){
for (int i = 0; i < params.length; i++){
ps.setObject(i+1,params[i]);
}
}
rs=ps.executeQuery();
}catch (Exception e){
e.printStackTrace();
}
return rs;
}
public int Add(Object o){
int a=0;
//获取表明
Class clz=o.getClass();//获取对象得嘞
String classname=clz.getName();//获取完整的名称,包括包名
int p=classname.lastIndexOf(".");//寻找最后一个点
classname=classname.substring(p+1);//从点后面开始截取
StringBuffer sb=new StringBuffer();
sb.append("insert into "+classname +"(");
Field[] fs=clz.getDeclaredFields();//获取所有列
for (int i = 0; i < fs.length; i++) {
if(i==fs.length-1)
sb.append(fs[i].getName());//最后一个不加逗号
else
sb.append(fs[i].getName()+",");//其他加逗号
}
sb.append(") values (");
for (int i = 0; i < fs.length; i++) {
if(i==fs.length-1)
sb.append("?");//最后一个不加逗号
else
sb.append("?,");//其他加逗号
}
sb.append(")");//sql拼接完毕
Object []parm=new Object[fs.length];//参数个数根据属性个数确定
try {
for (int i = 0; i < fs.length; i++) {
fs[i].setAccessible(true);//强制访问属性
parm[i]=fs[i].get(o);//根据属性获取对象的属性值
}
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
a=executeUpdate(sb.toString(), parm);
System.out.println(sb);
return a;
}
public int del(Object o){
int a=0;
//获取表明
Class clz=o.getClass();//获取对象得嘞
String classname=clz.getName();//获取完整的名称,包括包名
int p=classname.lastIndexOf(".");//寻找最后一个点
classname=classname.substring(p+1);//从点后面开始截取
StringBuffer sb=new StringBuffer();
sb.append("delete from "+classname +" where ");
Field[] fs=clz.getDeclaredFields();//获取
sb.append(fs[0].getName()+" = ?");
Object[] parm=new Object[1];
fs[0].setAccessible(true);
try {
parm[0]=fs[0].get(o);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
a=executeUpdate(sb.toString(), parm);
return a;
}
public int update(Object o){
int a=0;
//获取表明
Class clz=o.getClass();//获取对象得嘞
String classname=clz.getName();//获取完整的名称,包括包名
int p=classname.lastIndexOf(".");//寻找最后一个点
classname=classname.substring(p+1);//从点后面开始截取
StringBuffer sb=new StringBuffer();
sb.append("update "+classname +" set ");
Field[] fs=clz.getDeclaredFields();//获取
for (int i = 0; i < fs.length; i++) {
if(i==fs.length-1)
sb.append(fs[i].getName()+"=?");
else
sb.append(fs[i].getName()+"= ?,");
}
sb.append(" where "+fs[0].getName()+" =? ");
Object[] parm=new Object[fs.length+1];
try {
for (int i = 0; i < fs.length; i++) {
fs[i].setAccessible(true);//强制访问属性
parm[i]=fs[i].get(o);
}
parm[fs.length]=fs[0].get(o);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
a=executeUpdate(sb.toString(), parm);
return a;
}
public List select(Class clz,String where, Object[] parm){
List list =new ArrayList();
String classname=clz.getName();//获取完整的名称,包括包名
int p=classname.lastIndexOf(".");//寻找最后一个点
classname=classname.substring(p+1);//从点后面开始截取
StringBuffer sb=new StringBuffer();
sb.append("select * from "+classname +" where "+where);
rs=executeQuery(sb.toString(), parm);
Field[] fs=clz.getDeclaredFields();//获取
try {
while(rs.next()){
Object o=clz.newInstance();
for (Field fi : fs) {
fi.setAccessible(true);
Object v=rs.getObject(fi.getName());
fi.set(o,v);
}
list.add(o);
}
close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
public Object find(Class clz,String where, Object[] parm){
Object o=null;
List list=select(clz, where, parm);
if(list.size()>0) o=list.get(0);
return o;
}
}
查询
Object parm[]={id};
List<Student> list=bs.select(Student.class, "id=?", parm);
for (Student st : list) {
st.show();
}
映射 由类生成对象
对象.set属性(值)
对象.方法()
反射
由对象得到类
由属性调用对象
Field.set(对象,值)
由方法调用对象
Method.invoke(对象,参数)
获取类的方法
Class c1=类型.class;根据类名获取类
Class c2=对象.getClass();//根据对象获取类
Class c3=Class.forName("包名.类名");
//获取某个属性
Field f=Class.getDeclaredField("名称");//根据名称获取属性
Field[] f=Class.getDeclaredFields();//获取全部属性
field.setAccessable(true);//强制访问
获取方法
Method m=class.getDeclareMethod("名称",参数列表);
Method[] m=class.getDeclareMethods();//得到所有方法
- 增强版basedao java 反射和映射
- basedao 反射
- java泛型详解和反射泛型通用BaseDao实现
- java基础增强---反射
- Java 反射和映射(主要描述下反射)
- 利用Java反射机制+泛型重新封装的BaseDao
- java反射机制运用到BaseDao等通用基类
- BaseDao.java
- BaseDAO.java
- BaseDao.java
- 利用反射实现BaseDao
- BaseDao(反射)
- hibernate继承关系映射和java反射机制的运用
- JAVA JDBC通用BaseDao版0.1
- java JDBC通用BaseDao升级版0.2
- java JDBC通用BaseDao升级版0.3
- BaseDAO(反射泛型)
- 利用反射来设计BaseDao
- Leetcode#412. Fizz Buzz
- scala 中apply方法的理解
- 设计模式讲解与代码实践(六)——适配器(基于类)
- leetcode242题解
- Android 一起来看看知乎开源的图片选择库
- 增强版basedao java 反射和映射
- Android利用gradle同时编译多包(测试环境地址、生产环境地址)
- 工作日记2017.07.10 @Temporal作用
- Java压缩技术(七) TAR——Commons实现
- Java中字符串定义,初始化,赋值为null的区别
- PL/SQL Developer 下载
- java抽象类
- 嵌入式学习3(Linux常用shell命令下)
- 红光验证码