`
timesongjie
  • 浏览: 16492 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

jdbcTemplate

    博客分类:
  • java
阅读更多
下面是java操作数据库的模板,只需要写出简单的sql语句,再调用该模板中对应的方法,就能完成平时我们的数据库查询和更新操作了。

public class JdbcTemplate {
private Map<String,Connection>map=Collections.synchronizedMap(new

Hashtable<String,Connection>());
private static CopyOfJdbcTemplate jt;
private JdbcPool jpool=JdbcPool.getInstance();
private CopyOfJdbcTemplate(){
}
public static CopyOfJdbcTemplate getInstance(){
if(jt==null){
jt=new CopyOfJdbcTemplate();
}
return jt;
}
/*
所有查询“基类”
*/
public Object queryFormOriented(String sql,Object[]

args,PreparedStatementSetter pss,RowMapper rowmapper,Class clazz)throws Exception{
Object obj=null;
Connection conn=null;
try{
conn=jpool.getConnection();
PreparedStatement ps=conn.prepareStatement(sql);
    pss.setPatameter(ps);//赋值
ResultSet rs=ps.executeQuery();
obj=rowmapper.mappObject(rs);//获取结果集
}catch(Exception e){
System.out.println(e.getMessage());
}finally{
conn.close();
}
return obj;
}
/*
联合查询 以二维数组形式返回查询结果
*
* */
public Object[][]joinQuery(String sql,final Object[]args) throws Exception{
return (Object[][])queryFormOriented(sql,args,new

PreparedStatementSetter(){
public void setPatameter(PreparedStatement ps) throws

SQLException {
if(args!=null){
for(int i=0;i<args.length;i++){
  ps.setObject(i+1, args[i]);
}
}
}
},new RowMapper(){
public Object mappObject(ResultSet rs) throws Exception {
     int cols=rs.getMetaData().getColumnCount();
     int rows=0;
     List list=new ArrayList();
     while(rs.next()){
    List lt=new ArrayList();
    for(int i=0;i<cols;i++){
    lt.add(rs.getObject(i+1));
    }
    list.add(lt);
    rows++;
     }
     Object [][]objs=new Object[rows][cols];
     for(int i=0;i<objs.length;i++){
    List col=(List)list.get(i);
    for(int j=0;j<objs[i].length;j++){
    objs[i][j]=col.get(j);
    }
     }
     return objs;
}
},null);
}
/*
查询结果为一对象
*
*/
public Object queryFormObject(String sql,final Object[]args,final Class clazz)

throws Exception{
return queryFormOriented(sql,args,new PreparedStatementSetter(){
public void setPatameter(PreparedStatement ps) throws

SQLException {
if(args!=null)
for(int i=0;i<args.length;i++){//获取参数个数
   ps.setObject(i+1, args[i]);
}
}
},new RowMapper(){
Object obj=null;
Method []methods=clazz.getMethods();
String fieldName=null;
String name=null;
public Object mappObject(ResultSet rs) throws Exception{
ResultSetMetaData rsm= rs.getMetaData();
int cols=rsm.getColumnCount();
System.out.println(cols);
while(rs.next()){
obj=clazz.newInstance();
for(int i=1;i<=cols;i++){


fieldName=rsm.getColumnName(i);//得到第几列然后将获得这列的值
    name=FormUtil.getSetMethodName

(fieldName.toLowerCase());
for(int

j=0;j<methods.length;j++){
if(name.equals

(methods[j].getName())){
methods

[j].invoke(obj, rs.getObject(fieldName));
break;
}
}
}
}
return obj;
}

},clazz);
}
/*
查询结果为一个对象集合
*/
public List queryFromList(String sql,final Object[]args,final Class clazz) throws

Exception{
return  (List) queryFormOriented(sql,args,new

PreparedStatementSetter(){
public void setPatameter(PreparedStatement ps) throws

SQLException {
// TODO Auto-generated method stub
if(args!=null)
for(int i=0;i<args.length;i++){//获取参数

个数
ps.setObject(i+1, args[i]);
}
}},new RowMapper(){
List list=null;
Method []methods=clazz.getMethods();
String fieldName=null;
String name=null;
public Object mappObject(ResultSet rs) throws

Exception {
// TODO Auto-generated method stub
ResultSetMetaData rsm= rs.getMetaData

();
int cols=rsm.getColumnCount();
while(rs.next()){
if(list==null){
list=new ArrayList();
}
Object obj=clazz.newInstance();
for(int i=1;i<=cols;i++){


fieldName=rsm.getColumnName(i);//得到第i列 然后将获得这列的值
   

name=FormUtil.getSetMethodName(fieldName.toLowerCase());
for(int

j=0;j<methods.length;j++){
if

(name.equals(methods[j].getName())){


methods[j].invoke(obj, rs.getObject(fieldName));


break;
}
}
}
list.add(obj);
}
return list;
}},clazz);
}
/*
查询结果为某个值
*
*/
public Object queryFormSingleResulte(String sql,final Object[]args,final Class

clazz) throws Exception{
return queryFormOriented(sql,args,new PreparedStatementSetter(){

public void setPatameter(PreparedStatement ps) throws

SQLException {
if(args!=null)
for(int i=0;i<args.length;i++){//获取参数

个数
   ps.setObject(i+1, args[i]);
}
}},
new RowMapper(){
public Object mappObject(ResultSet rs)

throws Exception {
Object obj=null;
while(rs.next()){
obj=rs.getObject(1);
}
return obj;
}},clazz);
}
/*
* 查询结果为 一个值集合
*/
public List queryFormObjectList(String sql,final Object[]args,final Class clazz)

throws Exception{
return (List)queryFormOriented(sql,args,new PreparedStatementSetter

(){

public void setPatameter(PreparedStatement ps) throws

SQLException {
if(args!=null)
for(int i=0;i<args.length;i++){//获取参数

个数
   ps.setObject(i+1, args[i]);
}
}},
new RowMapper(){
public Object mappObject(ResultSet rs)

throws Exception {
Object obj=null;
List list=null;
while(rs.next()){
if(list==null){
list=new

ArrayList();
}
obj=rs.getObject(1);
list.add(obj);
}
return list;
}},clazz);
}


/*************************更新操作*********************/

/*
由于更新操作涉及事务处理,所以必须保证一个更新整个过程中必须只有一

个连接对象
这里运用到Threadlocal模式
*/
public Connection getConnection() throws Exception{
Connection conn=map.get(Thread.currentThread().getName());
if(conn==null){
conn=jpool.getConnection();
map.put(Thread.currentThread().getName(), conn);
}
        return conn;
}
public Transation beginTransation() throws Exception{
Connection conn=getConnection();
conn.setAutoCommit(false);//关闭连接自动提交功能
return new Transation(conn);
}
public void close() throws Exception{
Connection conn=getConnection();
if(conn!=null){
conn.close();
map.remove(conn);
}
}
/*
所有更新“基类”
*/
public int updateDB(String sql,final Object[]args,PreparedStatementSetter pss)

throws Exception{
int rows=0;
Connection conn=getConnection();
PreparedStatement ps=conn.prepareStatement(sql);
pss.setPatameter(ps);
rows=ps.executeUpdate();
return rows;

}
public int updateDB(String sql,final Object[]args) throws Exception{
return updateDB(sql,args,new PreparedStatementSetter(){
public void setPatameter(PreparedStatement ps) throws

SQLException {
if(args!=null){
for(int i=0;i<args.length;i++){
  ps.setObject(i+1, args[i]);
}
}
}

});
}

public static void main(String[] arg) {
String sql="select count(*) from orders where time like "+ "'%-01-%'";
    Object []args=new Object[]{"01","02"};
try {
CopyOfJdbcTemplate jt=CopyOfJdbcTemplate.getInstance();
//for(jt.queryFormObjectList(sql,null,null)){
Object [][]objs=jt.joinQuery(sql,null);
for(int i=0;i<objs.length;i++){
for(int j=0;j<objs[i].length;j++){
System.out.print(objs[i][j]+"  ");
}
System.out.println();
}
//}
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
评论

相关推荐

    spring-jdbcTemplate实例工程

    《深入解析Spring JdbcTemplate》 Spring JDBC Template是Spring框架中用于简化JDBC操作的一个核心组件,它是Spring对JDBC API的封装,旨在提供一个更加简洁、健壮且可测试的数据库访问层。在这个实例工程中,我们...

    JdbcTemplate的事务控制.docx

    ### JdbcTemplate 的事务控制 #### 一、引言 在软件开发过程中,事务管理是非常重要的一个环节,尤其是在处理数据库操作时。事务能够确保一系列数据库操作要么全部成功,要么全部失败,从而保持数据的一致性和完整...

    打印JdbcTemplate执行sql

    这篇博客文章的标题"打印JdbcTemplate执行sql"主要涉及如何在使用`JdbcTemplate`时,追踪并打印出执行的SQL语句,这对于调试和性能分析非常有帮助。接下来,我们将深入探讨`JdbcTemplate`的工作原理以及如何实现SQL...

    jdbcTemplate分页彻底解决,使用游标滚动

    在Java的Spring框架中,`JdbcTemplate`是一个非常重要的组件,它提供了数据库操作的简单抽象,使得开发者可以方便地执行SQL语句而无需编写复杂的DAO(数据访问对象)层。在处理大量数据时,传统的分页方法可能会导致...

    spring自带的jdbcTemplate查询、插入预编译使用

    在Spring框架中,`jdbcTemplate`是一个非常重要的组件,它为数据库操作提供了便捷且安全的API,降低了SQL注入的风险。本篇文章将详细讲解`jdbcTemplate`的预编译使用,以及如何通过回调方法进行定制化的数据处理。 ...

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate是Spring框架中用于简化Java数据库访问的工具,它是Spring JDBC模块的核心。这个封装工具类的出现是为了提供一种更简洁、易于使用的接口来执行SQL操作,减轻开发者处理数据库连接、事务管理以及...

    Spring JdbcTemplate 常用方法整理

    Spring的JdbcTemplate是Spring框架中用于简化数据库操作的工具类,它是基于JDBC但又抽象出了一层,避免了直接与数据库驱动API交互,从而提高了代码的可读性和可维护性。本文将深入探讨Spring JdbcTemplate的常用方法...

    4.Spring中的JdbcTemplate,Spring中的的事务,

    ### Spring中的JdbcTemplate #### JdbcTemplate概述 JdbcTemplate是Spring框架提供的一种用于简化JDBC编程的对象。通过封装原生的JDBC API,JdbcTemplate不仅提高了代码的可读性和可维护性,还帮助开发者避免了...

    Spring Boot多数据源(JdbcTemplate)配置与使用

    `JdbcTemplate`是Spring框架提供的一个用于简化数据库操作的工具,它使得数据库访问更为简洁且不易出错。在本教程中,我们将深入探讨如何在Spring Boot项目中配置和使用多数据源以及JdbcTemplate。 首先,让我们...

    springmvc整合JdbcTemplate框架

    在Java Web开发中,Spring MVC和JdbcTemplate是两个非常重要的组件。Spring MVC作为一个强大的MVC框架,负责处理HTTP请求、视图渲染以及业务逻辑的组织。而JdbcTemplate则是Spring提供的一个简单易用的数据库访问...

    JDBCTemplate+JavaPOJO实现通用DAO

    为了简化JDBC的使用,Spring框架提供了JDBCTemplate,它是一个基于模板方法设计模式的数据库访问类,能够帮助我们更安全、更高效地执行SQL语句。在这个"JDBCTemplate+JavaPOJO实现通用DAO"的项目中,我们将探讨如何...

    SpringBoot操作多数据源(JPA+JdbcTemplate)

    本篇文章将探讨如何在Spring Boot中利用JPA(Java Persistence API)和JdbcTemplate来实现多数据源的管理,同时使用HikariCP作为高效的数据源连接池。 首先,让我们理解一下关键概念: 1. **Spring Boot**: 它是...

    Spring--JdbcTemplate.pdf

    标题中提到的"JdbcTemplate"是Spring框架中提供的一个用于简化数据库操作的JDBC抽象库。它是对Java标准数据库编程接口JDBC的一种封装,旨在简化JDBC编程,减少样板代码,使得开发者在使用Spring框架时能够更便捷地对...

    spring的jdbctemplate的crud的基类dao

    在Spring框架中,`JdbcTemplate` 是一个非常重要的组件,它提供了一种简化数据库操作的API,使得开发者能够更安全、高效地与数据库交互。在本文中,我们讨论了如何利用`JdbcTemplate`来实现一个基类DAO(Data Access...

    springmvc+jdbctemplate+mysql(采用注解方式)

    在IT行业中,SpringMVC、JdbcTemplate和MySQL是构建web应用程序的常见技术栈。这篇详细的说明将深入探讨这些技术以及如何使用注解方式将它们整合在一起。 **SpringMVC** SpringMVC是Spring框架的一个模块,专为创建...

    spring的jdbcTemplate小案例

    在本文中,我们将深入探讨Spring框架中的一个核心组件——JdbcTemplate。JdbcTemplate是Spring提供的一种数据库操作工具,它简化了数据库访问,使开发者能够编写出更健壮、更易于维护的代码,避免了手动处理JDBC连接...

    spring mvc注解jdbctemplate

    在Spring MVC框架中,JdbcTemplate是一个非常重要的组件,它提供了对数据库操作的简化API,使得开发者可以更加方便地执行SQL语句,而无需过多关注事务管理、异常处理等底层细节。本文将深入探讨如何在Spring MVC中...

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    使用 Spring JdbcTemplate 调用 Oracle 存储过程实现 CRUD 在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储...

Global site tag (gtag.js) - Google Analytics