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));

}

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

  1. mybatis添加信息自动生成主键

    一.使用Oracle数据库 举例:添加员工的时候自动生成主键 1.在dao接口中声明方法 2.在mapper中实现该方法 需要先在数据表中创建序列 3.测试 注意:在调用过save方法之后,emp对象 ...

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

    ibatis实战之插入数据(自动生成主键) --------- 如果你将数据库设计为使用自动生成的主键,就可以使用ibatis的<selectKey>元素(该元素是<insert&g ...

  3. MyBatis映射文件1(增删改、insert获取自增主键值)

    增删改 Mybatis为我们提供了<insert>.<update>.<delete>标签来对应增删改操作 在接口中写增删改的抽象方法 void addEmp(Em ...

  4. javaweb基础(37)_mysql数据库自动生成主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  5. MySql MyBatis 自动生成主键返回null

    <insert id="insert" parameterType="cn.zno.smse.pojo.UserScan" useGeneratedKey ...

  6. mybatis中Oracle及mysql插入时自动生成主键以及返回主键

    mysql的方式: 方式一: useGeneratedKeys="true" keyProperty="id" 方式二: <selectKey keyPr ...

  7. Mybatis获取自增主键值

    1.配置文件变化 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLI ...

  8. mysql插入数据自动生成主键uuid

    DemoMapper.java //注意方法的返回值必须是void; void add(Demo demo); ============================================ ...

  9. spring3: 对JDBC的支持 之 Spring提供的其它帮助 SimpleJdbcInsert/SimpleJdbcCall/SqlUpdate/JdbcTemplate 生成主键/批量处理

    7.4  Spring提供的其它帮助 7.4.1  SimpleJdbc方式 Spring JDBC抽象框架提供SimpleJdbcInsert和SimpleJdbcCall类,这两个类通过利用JDB ...

随机推荐

  1. Extjs4 操作TreeStore 处理proxyAjax 获取的数据

    近期在搞extjs4 TreeStore时有一个需求 就是要处理一下后台传过来的json数据然后再显示,看api也没有找到解决的方法 ,最后看源代码在Ext.data.proxy.Server 看到这 ...

  2. 虎扯:纯css3各方向小三角的制作原理分析

    入驻博客园两个月之后的第一篇随笔,希望能够做到三个原则: One:不浪费自己的时间, Tow:不浪费读者的时间, 第三就是希望有缘的朋友们多多指教,共度前端快乐的大坑!!! 咱们今天来做一个居家旅行必 ...

  3. Deep Learning(深度学习)相关网站

    Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...

  4. js添加删除元素

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  5. JavaSE复习日记 : 递归函数

    /* * 递归函数 * 什么是递归? * 在一个方法的内部,对自身进行调用,又叫做递归调用 * * 递归和循环的编写都包括三部分: * 1. 初始值; * 2. 终止条件; * 3. 前进步长; * ...

  6. 实现单例模式C++版本

    还是先看最简单的C++单例模式 class CSingleton { private: CSingleton(){} static CSingleton *pInstance; public: sta ...

  7. Hadoop学习之HBase和Hive的区别

    Hive是为简化编写MapReduce程序而生的,使用MapReduce做过数据分析的人都知道,很多分析程序除业务逻辑不同外,程序流程基本一样.在这种情况下,就需要Hive这样的用户编程接口.Hive ...

  8. AOP 切面编程

    简介 如果你很熟悉面向方面编程(AOP),你就会知道给代码增加“切面”可以使代码更清晰并且具有可维护性.但是AOP通常都依赖于第三方类库或者硬编码的.net特性来工作.虽然这些实现方式的好处大于它们的 ...

  9. MVC打开电脑对话框

    //下载文件 public ActionResult Download(int id) { //依靠模板生成文档 var path =要下载的文件的路径 var name = Path.GetFile ...

  10. 创建XML文件

    //创建XML文件              XmlDocument xmldoc = new XmlDocument();             XmlText xmltext;          ...