ORM(Object relation Mapping)对象关系映射
在使用MyBatis框架时,可以将Java对象转换成数据表中的记录,或者将数据表中的记录转换成Java对象,内部的技术原理其实就是JDBC+反射。这些功能都是由ORM框架来进行处理的。
本文主要内容为反射机制
看如下代码:
package entity;
public class Userinfo {
private long id;
private String username;
private String password;
public Userinfo() {
// TODO Auto-generated constructor stub
}
public Userinfo(long id,String username,String password) {
super();
this.id=id;
this.username=username;
this.password=password;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package test;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import entity.Userinfo;
public class test {
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
Userinfo userinfo=new Userinfo();
userinfo.setId(100);
userinfo.setUsername("中国");
userinfo.setPassword("大中国");
List valueList=new ArrayList();
String sql="insert into ";
//得到类名并转为小写,去对应数据库中的表名
sql=sql+userinfo.getClass().getSimpleName().toLowerCase();
String colsql="";
String valueSql="";
Field[] fieldArray=userinfo.getClass().getDeclaredFields();
for(int i=0;i<fieldArray.length;i++) {
Field eachField=fieldArray[i];
//Userinfo的三个字段是私有的,后面fieldArray[i].get(userinfo);想访问私有变量具体的值必须加这句
//否则会报java.lang.IllegalAccessException错误
eachField.setAccessible(true);
String fieldName=eachField.getName();
//得到每个字段的名字
colsql=colsql+","+fieldName;
valueSql=valueSql+",?";
//得到userinfo对象每个字段具体的值
Object value=fieldArray[i].get(userinfo);
valueList.add(value);
}
System.out.println(colsql);
//去掉开头的","
colsql=colsql.substring(1);
valueSql=valueSql.substring(1);
colsql="("+colsql+")";
valueSql="("+valueSql+")";
sql=sql+colsql+" "+valueSql;
System.out.println(sql);
System.out.println();
for(int i=0;i<valueList.size();i++) {
Object value=valueList.get(i);
System.out.println(value);
}
}
}
Output:
,id,username,password
insert into userinfo(id,username,password) (?,?,?)
100
中国
大中国
网友评论