zoukankan      html  css  js  c++  java
  • java反射生成ORM

    package com.wzh.jdbc;

    import java.lang.reflect.Field;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;

    public class JDBCTemplate<T> {

    public boolean save(final T t) {
    String simpleName = t.getClass().getSimpleName();
    System.out.println("simpleName" + simpleName);
    final StringBuffer sql = new StringBuffer();
    final Field[] fields = t.getClass().getDeclaredFields();
    sql.append("insert into tb_").append(simpleName).append("(")
    .append(fields[0].getName());
    for (int i = 1; i < fields.length; i++) {
    sql.append(",").append(fields[i].getName());
    }
    sql.append(") values(?");
    for (int i = 1; i < fields.length; i++) {
    sql.append(",?");
    }
    sql.append(")");
    System.out.println("SQL - >" + sql.toString());
    return template(new Callback<Boolean>() {
    @Override
    public Boolean doInCallback(Connection conn,
    PreparedStatement pstm, ResultSet rs) throws Throwable {
    pstm = conn.prepareStatement(sql.toString());
    int index = 1;
    for (Field field : fields) {
    if (!field.getName().equals("UserId")) {
    if (!field.isAccessible())
    field.setAccessible(true);

    //取得字段的值
    System.out.println("field get --> "+field.get(t));
    pstm.setObject(index, field.get(t));
    index++;
    }
    }
    int row = pstm.executeUpdate();
    return row != 0 ? true : false;
    }
    });
    }

    public boolean delete(Class clazz, final int id) {
    String simpleName = clazz.getSimpleName();
    System.out.println("simpleName" + simpleName);
    final String sql = "delete from tb_" + simpleName + " where id=?";
    System.out.println("SQL->" + sql);
    return template(new Callback<Boolean>() {
    @Override
    public Boolean doInCallback(Connection conn,
    PreparedStatement pstm, ResultSet rs) throws Throwable {
    pstm = conn.prepareStatement(sql);
    pstm.setObject(1, id);
    int row = pstm.executeUpdate();
    return row != 0 ? true : false;
    }
    });
    }

    public List<T> findAll(final Class clazz) {
    String simpleName = clazz.getSimpleName();
    System.out.println("simpleName->" + simpleName);
    final StringBuffer sql = new StringBuffer();
    // 构建SQL语句 select [所有字段] from tb_class.getName() where id=?
    Field[] fields = clazz.getDeclaredFields();
    sql.append("select ").append(fields[0].getName());
    for (int i = 1; i < fields.length; i++) {
    sql.append(",").append(fields[i].getName());
    }
    sql.append(" from tb_").append(simpleName);
    System.out.println("SQL - >" + sql.toString());
    return template(new Callback<List<T>>() {
    @Override
    public List<T> doInCallback(Connection conn,
    PreparedStatement pstm, ResultSet rs) throws Throwable {
    pstm = conn.prepareStatement(sql.toString());
    rs = pstm.executeQuery();
    // 返回集合对象
    List list = new ArrayList();
    ResultSetMetaData rsmd = rs.getMetaData();
    int count = rsmd.getColumnCount();
    while (rs.next()) {
    Object object = clazz.newInstance();
    // 要得到rs返回的所有字段和信息
    for (int i = 1; i <= count; i++) {
    // 循环拿到列名id
    String column = rsmd.getColumnName(i);
    Field f = clazz.getDeclaredField(column);
    if (!f.isAccessible()) {
    f.setAccessible(true);
    }
    f.set(object, rs.getObject(column));
    }
    list.add(object);
    }
    return list;
    }
    });
    }

    private Connection conn = null;

    public JDBCTemplate() {
    super();
    conn = ConnectionFactory.GetConnection();
    }

    protected interface Callback<E> {
    E doInCallback(Connection conn, PreparedStatement pstm, ResultSet rs)
    throws Throwable;
    }

    protected <E> E template(Callback<E> callback) throws DataAccessException {
    PreparedStatement pstm = null;
    ResultSet rs = null;
    try {
    return callback.doInCallback(conn, pstm, rs);
    } catch (Throwable e) {
    throw new DataAccessException(e);
    } finally {
    ConnectionFactory.Close(pstm, rs);
    }
    }

    /**
    * 开启事务
    * */
    public void beginTransaction() {
    try {
    conn.setAutoCommit(false);
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }

    /**
    * 提交事务
    * */
    public void commit() {
    try {
    conn.commit();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }

    /**
    * 回滚事务
    * */
    public void rollback() {
    try {
    conn.rollback();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }

    /**
    * 关闭连接
    * */
    public void close() {
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }

  • 相关阅读:
    setup-nginx
    Sql Server
    第一次找工作
    JGroups 初探
    游戏与彩票
    MINA 网络黏包处理代码
    powershell遍历文件夹设置权限,解决文件无法删除的问题。
    c# 异步任务队列(可选是否使用单线程执行任务,以及自动取消任务)
    c#注册表对象映射
    最小安装centos 7 无GUI静默安装 oracle 12c,打造轻量linux化服务器
  • 原文地址:https://www.cnblogs.com/zhuawang/p/3343577.html
Copyright © 2011-2022 走看看