Java DAO

注:在项目里面需要引入BeanUtil,Logging jar 包

create table student
(
    flow_id int,
    type int,
    id_card varchar(50),
    student_name varchar(50),
    location varchar(80),
    grade int
)

insert into student values(1000,1,‘429004‘,‘小明‘,‘深圳‘,1);
insert into student values(1001,1,‘429005‘,‘xiaoming‘,‘深圳‘,1);
insert into student values(1002,1,‘429006‘,‘小强‘,‘深圳‘,1);
insert into student values(1003,1,‘429007‘,‘xiaoqiang‘,‘深圳‘,1);
insert into student values(1004,1,‘429008‘,‘curtis‘,‘深圳‘,1);

package com.curtis.student4;

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;
import org.junit.Test;

import com.curtis.jdbc.JDBCTools;

public class GetListStudent {

@Test
    public void getStudent() {
        String sql = "select * from student where flow_id=?";
        Student student = getMessage(Student.class, sql, 1000);
        System.out.println(student);
    }

@Test
    public void getStudents() {
        String sql = "select * from student";
        List<Student> students = getMessages(Student.class, sql);
        System.out.println(students);
    }

@Test
    public void getValue() {
        String sql = "select flow_id from student where flow_id=?";
        int flow_id = getOnlyValue(sql, 1000);
        System.out.println(flow_id);
    }

// 查询一行记录
    public <T> T getMessage(Class<T> clazz, String sql, Object... args) {
        List<T> result = getMessages(clazz, sql, args);
        if (result.size() > 0) {
            return result.get(0);
        }
        return null;
    }

// 查询多行记录
    public <T> List<T> getMessages(Class<T> clazz, String sql, Object... args) {
        List<T> list = new ArrayList<>();
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = 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<Map<String, Object>> values = handleResultSetToMapList(resultSet);// 调用下面的方法
            list = transfterMapListToBeanList(clazz, values);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCTools.releaseDB(resultSet, preparedStatement, connection);
        }
        return list;
    }

public List<Map<String, Object>> handleResultSetToMapList(
            ResultSet resultSet) throws SQLException {
        List<Map<String, Object>> values = new ArrayList<>();
        List<String> columnLabels = getColumnLabels(resultSet);
        Map<String, Object> map = null;
        while (resultSet.next()) {
            map = new HashMap<>();
            for (String columnLabel : columnLabels) {
                Object value = resultSet.getObject(columnLabel);
                map.put(columnLabel, value);
            }
            values.add(map);
        }
        return values;
    }

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

public <T> List<T> transfterMapListToBeanList(Class<T> clazz,
            List<Map<String, Object>> values) throws InstantiationException,
            IllegalAccessException, InvocationTargetException {
        List<T> result = new ArrayList<>();
        T bean = null;
        if (values.size() > 0) {
            for (Map<String, Object> m : values) {
                bean = clazz.newInstance();
                for (Map.Entry<String, Object> entry : m.entrySet()) {
                    String propertyName = entry.getKey();
                    Object value = entry.getValue();
                    BeanUtils.setProperty(bean, propertyName, value);
                }
                result.add(bean);
            }
        }
        return result;
    }

// 查询单个值
    public <T> T getOnlyValue(String sql, Object... args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = 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()) {
                return (T) resultSet.getObject(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCTools.releaseDB(resultSet, preparedStatement, connection);
        }
        return null;
    }

}

时间: 2024-10-06 16:27:13

Java DAO的相关文章

JAVA DAO(Data Access Object)的个人总结

最近上课,老师提到DAO,也是因为后面做作业的需要,就花了一点时间,来看一下DAO,也只是泛泛而谈,自己学习的一些总结,也希望给想学习的新手一些帮助吧. 1.什么是DAO 说来说去,DAO到底是什么呢?神神秘秘的,让我们来一层层的解开她的面纱.在核心J2EE模式中是这样介绍的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共的API当中.用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事物方法.在这个应用程序中,当需要和数据源进行交互的

Java Dao模式通过JDBC连接数据库的操作

Java程序访问数据库: 1.获取数据库厂商提供的驱动(jdbc接口的实现类) 如ojdbc14.jar——Oracle数据库驱动jar包 mysql-connector-java-5.1.8-bin.jar——MySQL数据库驱动jar包 自己去网上下载就行. 2.使用JDBC的API访问数据库 连接.SQL语句执行.结果 java.sql.Driver:各个数据库厂商需要实现该接口,驱动的标记 java.sql.Connection:封装和数据库的连接 java.sql.Statement:

一个Java Dao测试用例

3 import static org.junit.Assert.assertTrue; 4 5 import java.util.Date; 6 import java.util.HashMap; 7 import java.util.List; 8 import java.util.Map; 9 10 import org.junit.Test; 11 import org.springframework.beans.factory.annotation.Autowired; 12 13 i

java web (j2ee)学习路线 —— 将青春交给命运

RESON TO DO JAVA WEB:1.JAVA WEB(企业级)  2.Android和iOS过于火爆并且不兼容 一.JAVA WEB开发需要的知识储备 1.      基本的网页设计语言:HTML.JavaScript.CSS 2.      制作动态网站:Java.JSP(servelt) 3.      数据库:MySQL.SQL Server.SQL Lite.Access.Oracle 4.      流行的框架:MVC思想和原理——了解Struts.Spring.Hibern

C#和JAVA中编写事务代码

C#  DAL层代码,执行多条增删改,使用事务操作: /// <summary> /// 执行 多条增删改 (非查询语句) /// </summary> /// <param name="strSql"></param> /// <param name="paras"></param> /// <returns></returns> public static int E

详述 DB2 分页查询及 Java 实现

DB2 startNum:起始数 endNum:结尾数 SQL 语句? SELECT * FROM ( SELECT B.*, ROWNUMBER() OVER() AS TN FROM ( SELECT * FROM 表名 ) AS B ) AS A WHERE A.TN BETWEEN startNum AND endNum; 1 2 3 4 5 6 7 8 如上所示,此即为 DB2 的分页查询语句. Mapper <?xml version="1.0" encoding=&

mybatis自定义代码生成器(Generator)——自动生成model&amp;dao代码

花了两天的时间研究了下mybatis的generator大体了解了其生成原理以及实现过程.感觉generator做的非常不错,给开发者也留足了空间.看完之后在generator的基础上实现了自定义的生成器.代码start..... 建立了一个maven工程(common)项目结构: ----------------------------------------------------------------pom.xml-------------------------------------

Java JDBC基本操作(增,删,该,查)总结

</pre><pre> package trade.axht.java.dao; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.dbutils.QueryRunner; import trade.axht.java.conn.JDBCUtils; import java.util.*; import java.lang.reflect.*; import java.sql.*; /*

Java程序员常用的@Component、@Repository、@Controller、@Serv

Java程序员常用的@Component.@Repository.@Controller.@Service系列[案例demo3] 很多程序员通过在类上使用@Repository.@Component.@Service 和 @Constroller 注解,Spring会自动创建相应的 BeanDefinition 对象,并注册到 ApplicationContext 中.这些类就成了 Spring受管组件.这三个注解除了作用于不同软件层次的类,其使用方式与@Repository 是完全相同的. 处