DAO以及获取自动生成主键值

package com.alibaba.sql;

import java.lang.reflect.InvocationTargetException;
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.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;

public class DAO {
    public void update(String sql, Object...args){
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try{
            connection = JDBCTools.getConnection();
            preparedStatement = connection.prepareStatement(sql);
            for(int i = 0; i < args.length; i++){
                preparedStatement.setObject(i + 1, args[i]);
            }
            preparedStatement.executeUpdate();
        }catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            JDBCTools.release(null, preparedStatement, connection);
        }
    }

    public <T> T get(Class<T> clazz, String sql, Object...args){
        List<T> list = getForList(clazz, sql, args);
        if(list != null){
            return list.get(0);
        }
        return null;
    }

    public <T> List<T> getForList(Class<T> clazz, String sql, Object...args){
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        List<T> list = null;
        try{
            connection = JDBCTools.getConnection();
            preparedStatement = connection.prepareStatement(sql);
            for(int i = 0; i < args.length; i++){
                preparedStatement.setObject(i + 1, args[i]);
            }
            resultSet = preparedStatement.executeQuery();
            List<String> label = getLabel(resultSet);
            List<Map<String, Object>> values = getValues(resultSet, label);
            if(values.size() > 0){
                list = valueTolist(clazz, values);
            }
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        JDBCTools.release(resultSet, preparedStatement, connection);
    }
        return list;
    }

    private <T> List<T> valueTolist(Class<T> clazz, List<Map<String, Object>> values) throws InstantiationException,
            IllegalAccessException, InvocationTargetException {
        List<T> list = new ArrayList<T>();
        for(Map<String, Object> map:values){
            T entity = clazz.newInstance();
            for(Map.Entry<String, Object> entry:map.entrySet()){
                String fieldName = entry.getKey();
                Object fieldValue = entry.getValue();
                BeanUtils.setProperty(entity, fieldName, fieldValue);
            }
            list.add(entity);
        }
        return list;
    }

    private List<Map<String, Object>> getValues(ResultSet resultSet,
            List<String> label) throws SQLException {
        List<Map<String, Object>> values = new ArrayList<Map<String, Object>>();
        while(resultSet.next()){
            Map<String, Object> map = new HashMap<String, Object>();
            for(int i = 0; i < label.size(); i++){
                String fieldName = label.get(i);
                Object fieldValue = resultSet.getObject(fieldName);
                map.put(fieldName, fieldValue);
            }
            values.add(map);
        }
        return values;
    }

    private List<String> getLabel(ResultSet resultSet) throws SQLException {
        ResultSetMetaData rsmd = resultSet.getMetaData();
        List<String> label = new ArrayList<String>();
        for(int i = 0; i< rsmd.getColumnCount(); i++){
            label.add(rsmd.getColumnLabel(i+1));
        }
        return label;
    }

    @SuppressWarnings("unchecked")
    public <E> E getForValue(String sql, Object...args){
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        E entity = null;
        try{
            connection = JDBCTools.getConnection();
            preparedStatement = connection.prepareStatement(sql);
            for(int i = 0; i < args.length; i++){
                preparedStatement.setObject(i + 1, args[i]);
            }
            resultSet = preparedStatement.executeQuery();
            if(resultSet.next()){
                entity = (E)resultSet.getObject(1);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            JDBCTools.release(resultSet, preparedStatement, connection);
        }
        return entity;
    }
}

获取自动生成(auto-increment)主键

preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

ResultSet rs = preparedStatement.getGeneratedKeys();  //仅返回一列, 列名GENERATED_KEYS, 值Id

if(rs.next){

Sysout(rs.getObject(1));

}

时间: 2024-09-30 20:37:47

DAO以及获取自动生成主键值的相关文章

ORACLE uuid自动生成主键

-- Create table create table TECHNOLOGYCOMPANY ( ID VARCHAR2(32) default SYS_GUID() not null, FLOWID VARCHAR2(50), CONPANYID NUMBER, ISCOMMUNICATION VARCHAR2(10) ) tablespace USERS pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1

java UUID.randomUUID()自动生成主键作为Id或文件路径

UUID.randomUUID().toString()是javaJDK(1.5以上的版本)提供的一个自动生成主键的方法,它生成的是以为32位的数字和字母组合的字符,中间还参杂着4个 - 符号. 作用:它可以作为我们表的标识列来增加,比序列增长更加方便.当然还可以用来拼接作为路径,或者图片的前缀名等等. 使用原因: 文件命名或者其他使用时间命名对于高并发会存在风险,使用UUID会规避风险, import java.util.UUID: UUID.randomUUID().toString():

ibatis实战之插入数据(自动生成主键)

--------- 如果你将数据库设计为使用自动生成的主键,就可以使用ibatis的<selectKey>元素(该元素是<insert>元素的一个专用子元素)来获取这些自动生成的主键的值并将其保存在对象中.完成这项工作可以有两种方式,具体选择何种方式由你所使用的具体的主键生成技术来确定. 第一种方式是,当你把记录插入到数据库中并且数据库为该记录自动生成了主键值之后,就立即抓取该键值.此时要注意的是,必须确保所使用的数据库驱动程序确实能返回你执行上一条insert语句所得到的键值.

mybatis自动生成主键

mysql,使用useGeneratedKey属性: <insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="studId">     INSERT INTO STUDENTS(NAME, EMAIL, PHONE)     VALUES(#{name},#{email},#{phone}) &l

mybatis使用oracle自动生成主键

下面总结了两种方式,一种是使用oracle的sys_guid函数自动生成,另一种是使用sequence, 方法一:  <insert id="insert" useGeneratedKeys="false" keyProperty="storeId" parameterType="zttc.itat.user.po.TStore" >   <selectKey resultType="String&

Mybatis获取自增主键值

1.配置文件变化 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dao.BookMapper&

zbb20170928 spring hibernate mysql 保存数据时自动生成 主键 设置

@Id    @GeneratedValue    @Column(name = "id", unique = true, nullable = false)    public Integer getId() {        return this.id;    }

MyBatis_获取自动增长主键

Mapper.xml映射文件 测试方法

javaWeb_JDBC_JDBC获取数据库自动生成的主键值

JDBC_JDBC获取数据库自动生成主键值 1.意义: 在操作比较复杂的数据库表以及相关信息的时候,我们需要获取一条记录中的主键值,以便于别的业务逻辑操作该条记录,那么这一个时候 如果是数据库自己生成主键值,那么我们就有必要获取这一个主键值. 2.实现: 使用重载的 prepareStatement(sql, flag)来生成 PreparedStatement 对象,并调用ResultSet rs = preparedStatement.getGeneratedKeys(); 在 Result