本文使用java原生的JDBC实现ORM思想。

需要使用Apache commons中的两个类库、一个mysql数据库驱动:

QQ图片20180709165116.png

实现代码如下:

public <T> T getObject(Class<T> clz, String sql, Object... args)
throws SQLException, IllegalAccessException, InvocationTargetException, InstantiationException {
    Connection con = null;
    PreparedStatement ps = null;
    ResultSet res = null;
    con = jdbcUtil.createcon();//获取mysql连接
    ps = con.prepareStatement(sql);
    for (int i = 0; i < args.length; i++) 
    {
        ps.setObject(i + 1, args[i]);
    }
    res = ps.executeQuery();
    ResultSetMetaData resm = res.getMetaData();
    HashMap<String, Object> map = new HashMap<String, Object>();
    if (res.next())
    {
        for (int i = 0; i < resm.getColumnCount(); i++) {
        String label = resm.getColumnLabel(i + 1);
        Object value = res.getObject(label);
        map.put(label, value);
    }
    }
    Set<Entry<String, Object>> set = map.entrySet();
    T p = clz.newInstance();
    for (Entry<String, Object> entry : set)
    {
        String key = entry.getKey();
        Object value = entry.getValue();
        BeanUtils.setProperty(p, key, value);
    }
    res.close();
    ps.close();
    con.close();
    return p;
}

Person类:

public class Person 
{
    Integer id;
    String name;
    String phone;
    @Override
    public String toString() {
    return "Person [id=" + id + ", name=" + name + ", phone=" + phone + "]";
    }
        public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
}

测试代码:

@Test
public void test1() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException, SQLException,
    InstantiationException {
    Person p = getObject(Person.class, "select * from person where id=5");
    System.out.println(p);
}

运行结果:

QQ图片20180709165714.png

点赞(2)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论