浅尝ORM

作者: 问瑾遗 | 来源:发表于2019-04-05 19:25 被阅读0次

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
中国
大中国

相关文章

网友评论

      本文标题:浅尝ORM

      本文链接:https://www.haomeiwen.com/subject/gpekiqtx.html