`
chun521521
  • 浏览: 284137 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

jdbcTemplate与hibernateTemplate混用

    博客分类:
  • java
 
阅读更多

一直都觉得spring这个框架很不错,对于jdbcTemplate、hibernateTemplate这2个模板更是非常喜欢,有了他们用起来非常方便。一般情况下都是单独使用jdbcTemplate、hibernateTemplate,很少有混用的情况。为什么要混用呢?我想这个大家都懂的。

 

 

 

在这里呢,给大家介绍一个我自己研究的配置(因为网上根本就没有一个完整的配置,都夸夸其谈不做实事,对此种事情本人非常愤慨,对于一个非常需要帮助的人,查到这样的资料,都有慰问他十八代祖宗的想法),供大家参考,望多多指教。本文属原创,转载请注明出处。

 

系统架构(struts2+spring3.0.5+hibernate3.6)采用mvc模式,dao层继承ABaseDao,ABaseDao中封装了jdbcTemplate、hibernateTemplate,并提供jdbc、hibernate两种操作的CUID方法。事务由hibernateTransaction托管并有spring的aop在service层处理。每一个dao都采用泛型方式,注入一个pojo,dao中并不需要写方法,因为ABaseDao都已经实现了,如果ABaseDao中的方法满足不了业务需求,则可以在自己的dao中写相应的方法。这样在servers层就可以直接调用ABaseDao中的方法了,services的每个方法都要throws Exception,注意不要写try-catch,一定要throw出来,事务就靠这个异常回滚呢。

 

不多说,上代码。

1.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans default-autowire="byName"
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

 <!-- 自动注入 -->
 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location" value="classpath:jdbc.properties" />
 </bean>

 <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource"> 
  <property name="alias" value="CS_dbname"/>
  <property name="driver" value="${jdbc.driverClassName}" />
  <property name="driverUrl" value="${jdbc.url}" />
  <property name="user" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
  
  <property name="maximumActiveTime" value="600000"/>
  <property name="maximumConnectionCount" value="100"/>
  <property name="minimumConnectionCount" value="10"/>
  <property name="simultaneousBuildThrottle" value="50"/>
        <property name="testBeforeUse" value="true" />
  <property name="houseKeepingTestSql" value="select 1*1 from dual"/>
  
        <property name="prototypeCount" value="5" />
        <property name="trace" value="true" />
        <property name="verbose" value="true" />
 </bean>
 
 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="lobHandler" ref="defaultLobHandler"/>
  <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.MySQLInnoDBDialect
    </prop>
    <prop key="hibernate.connection.autocommit">false</prop>
    <prop key="hibernate.autoReconnect">true</prop>
    <prop key="hibernate.format_sql">false</prop>
    <prop key="hibernate.show_sql">false</prop>
    <prop key="hibernate.hbm2ddl.auto">none</prop>
   </props>
  </property>
 </bean>
 
 <!-- JDBC模板 -->
 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
  <property name="dataSource" ref="dataSource" />
 </bean>
 
 <!-- Hibernate模板 -->
 <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" >
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>
 <!-- Hibernate事务 -->
 <bean id="hibernateTransaction" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
  <property name="sessionFactory" ref="sessionFactory" />
  <property name="dataSource" ref="dataSource" />
 </bean>
 
 <!-- blob、clob设置 -->
 <bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />

 <!-- AOP事务控制 -->
  <tx:advice id="txAdvice1" transaction-manager="hibernateTransaction">
        <tx:attributes>
            <tx:method name="list*" propagation="NOT_SUPPORTED" />
            <tx:method name="query*" propagation="NOT_SUPPORTED" />
            <tx:method name="get*" propagation="NOT_SUPPORTED" />
            <tx:method name="find*" propagation="NOT_SUPPORTED" />
            <tx:method name="*" propagation="REQUIRED" rollback-for="Throwable"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <aop:pointcut id="allManagerMethod" expression="execution(* com.wxthtf.*.*Service.*(..))" />
        <aop:advisor advice-ref="txAdvice1" pointcut-ref="allManagerMethod" />
    </aop:config>
   
    <aop:config>
        <aop:pointcut id="allManagerMethod1" expression="execution(* com.wxthtf.*.*.*Service.*(..))" />
        <aop:advisor advice-ref="txAdvice1" pointcut-ref="allManagerMethod1" />
    </aop:config>
 
 
</beans>

 

 2.ABaseDao

package com.wxthtf.common;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;

import org.apache.commons.lang.StringUtils;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;

/**
 * <li>Title: ABaseDao.java</li>
 * <li>Project: WorkFrame</li>
 * <li>Package: com.crescent.common</li>
 * <li>Description: Dao的基础类</li>
 * <li>Copyright: Copyright (c) 2011</li>
 * <li>Company: wxthtf Technologies </li>
 * <li>Created on May 23, 2011 9:46:09 PM</li>
 *
 * @author chun_chang
 * @version 1.0.0.0
 *
 * @param <T>
 */
public abstract class ABaseDao<T, PK extends Serializable> {
 private Class<T> entityClass = null;
 //private Serializable id = null;

 @SuppressWarnings("unchecked")
 public ABaseDao(){
  Type genType = getClass().getGenericSuperclass();
  Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
  entityClass = (Class<T>) params[0];
  //id = (Serializable) params[1];
 }

 protected JdbcTemplate jdbcTemplate = null;
 protected HibernateTemplate hibernateTemplate = null;
 protected LobHandler defaultLobHandler = null;

 private String pageSqlPrefix = "select tt.* from (select t.*, rownum num from ( ";
 private String pageSqlSuffix = " ) t) tt where ? < num and num <= ?";

 /*
  * 1.jdbc部分 ***************************************************************
  */

 /**
  * 描述:getPageSql oracle分页
  * @param sql
  * @return
  * @throws Exception
  * @CreateOn Jul 26, 2011  8:45:16 PM
  * @author chun_chang
  */
 protected String getPageSql(String sql) throws Exception  {
  StringBuffer buff = new StringBuffer(pageSqlPrefix);
  buff.append(sql).append(pageSqlSuffix);
  return buff.toString();
 }

 
 
 /**
  * query
  */
 public int queryForInt(String sql)  throws Exception {
  return this.jdbcTemplate.queryForInt(sql);
 }

 public int queryForInt(String sql, Object[] params)  throws Exception {
  return this.jdbcTemplate.queryForInt(sql, params);
 }

 /**
  * 描述:queryForString 只查询一个字段
  * @param sql
  * @return
  * @throws Exception
  * @CreateOn Jul 6, 2011  5:24:28 PM
  * @author chun_chang
  */
 @SuppressWarnings("unchecked")
 public String queryForString(String sql) throws Exception  {
  return (String) this.jdbcTemplate.queryForObject(sql, new RowMapper(){

   public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
    String str = rs.getString(1);
    return StringUtils.isBlank(str) ? "" : str;
   }

  });
 }

 /**
  * 描述:queryForString 只查询一个字段
  * @param sql
  * @param params
  * @return
  * @throws Exception
  * @CreateOn Jul 6, 2011  5:24:45 PM
  * @author chun_chang
  */
 @SuppressWarnings("unchecked")
 public String queryForString(String sql, Object[] params)  throws Exception {
  return (String) this.jdbcTemplate.queryForObject(sql, params, new RowMapper(){

   public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
    String str = rs.getString(1);
    return StringUtils.isBlank(str) ? "" : str;
   }

  });
 }

 public T queryForObject(String sql) throws Exception {
  List<T> list = this.queryForList(sql);
  if(null == list || list.size() == 0) {
   return null;
  } else {
   return list.get(0);
  }
 }

 public T queryForObject(String sql, Object[] params) throws Exception {
  List<T> list = this.queryForList(sql, params);
  if(null == list || list.size() == 0) {
   return null;
  } else {
   return list.get(0);
  }
 }

 public List<T> queryForList(String sql) throws Exception {
  return this.jdbcTemplate.query(sql, new BeanPropertyRowMapper<T>(entityClass));
 }

 public List<T> queryForList(String sql, Object[] params) throws Exception {
  return this.jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<T>(entityClass));
 }

 @SuppressWarnings("unchecked")
 public List<String> query(String sql) throws Exception {
  return this.jdbcTemplate.query(sql, new RowMapper(){

   public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
    return rs.getString(1);
   }

  });
 }

 @SuppressWarnings("unchecked")
 public List<String> query(String sql, Object[] params) throws Exception {
  return this.jdbcTemplate.query(sql, params, new RowMapper(){

   public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
    String str = rs.getString(1);
    return StringUtils.isBlank(str) ? "" : str;
   }

  });
 }

 /**
  * insert、update
  */
 public int save(String sql, final Object[] params) throws Exception {
  return this.jdbcTemplate.update(sql, new PreparedStatementSetter(){

   public void setValues(PreparedStatement ps) throws SQLException {
    for(int i = 1; i <= params.length; i++) {
     ps.setObject(i, params[i - 1]);
    }
   }

  });
 }

 public int[] batchSave(String sql, final List<Object[]> list) throws Exception {
  return this.jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter(){

   public int getBatchSize() {
    return list.size();
   }

   public void setValues(PreparedStatement ps, int i) throws SQLException {
    Object[] params = list.get(i);
    for(int j = 1; j <= params.length; j++) {
     ps.setObject(j, params[j - 1]);
    }
   }

  });
 }

 public int[] batchSave(String sql, final Object[] params) throws Exception {
  return this.jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter(){

   public int getBatchSize() {
    return params.length;
   }

   public void setValues(PreparedStatement ps, int i) throws SQLException {
    ps.setObject(1, params[i]);
   }

  });
 }

 /**
  * delete
  */
 public int delete(String sql) throws Exception {
  return this.jdbcTemplate.update(sql);
 }
 
 public int delete(String sql, final Object... params) throws Exception {
  return this.jdbcTemplate.update(sql, params);
 }

 public int deleteById(String sql, final String id) throws Exception {
  return this.jdbcTemplate.update(sql, new PreparedStatementSetter(){

   public void setValues(PreparedStatement ps) throws SQLException {
    ps.setObject(1, id);
   }

  });
 }

 public int[] batchDeleteByIds(String sql, final String[] ids) throws Exception {
  return this.jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter(){

   public int getBatchSize() {
    return ids.length;
   }

   public void setValues(PreparedStatement ps, int i) throws SQLException {
    ps.setObject(1, ids[i]);
   }

  });
 }

 public int[] batchDeleteByIds(String sql, final List<String> list) throws Exception {
  return this.jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter(){

   public int getBatchSize() {
    return list.size();
   }

   public void setValues(PreparedStatement ps, int i) throws SQLException {
    ps.setObject(1, list.get(i));
   }

  });
 }

 /*
  * 2.hibernate部分 ***************************************************************
  */
 
 /**
  * 描述:queryString4Paging 使用HQL进行分页查询
  * @param fields 要查询的字段数组
  * @param fromAndWhereHql from与where条件字符串
  * @param start 开始条数
  * @param limit 长度
  * @param params where条件参数
  * @return
  * @throws Exception
  * @CreateOn Jul 6, 2011  5:33:54 PM
  * @author chun_chang
  */
 public String queryString4Paging(final String[] fields, final String fromAndWhereHql, final int start, final int limit, final Object[] params)
  throws Exception {
  
  if(null == fields || fields.length <= 0){
   return "{totalProperty:0,root:[]}";
  }
  
  if(StringUtils.isBlank(fromAndWhereHql) || start < 0 || limit < 0) {
   return "{totalProperty:0,root:[]}";
  }

  int totalProperty = 0;
  String json = "[]";
  JSONArray jsonArray = null;
  String[] jsonField = new String[fields.length];
  
  String countHql = "select count(*) " + fromAndWhereHql;
  StringBuffer queryHql = new StringBuffer("select ");
  for(int k=0; k<fields.length; k++){
   String field = fields[k];
   queryHql.append(field).append(",");
   if(field.lastIndexOf(".") > 0){
    jsonField[k] = field.substring(field.lastIndexOf(".") + 1, field.length());
   } else {
    jsonField[k] = field;
   }
  }
  queryHql.deleteCharAt(queryHql.length() - 1);
  queryHql.append(" ").append(fromAndWhereHql);
  
  List<?> list = this.hibernateTemplate.find(countHql, params);
  try {
   totalProperty = Integer.valueOf(String.valueOf(list.get(0)));
  } catch(Exception e) {
   totalProperty = 0;
  }
  
  List<?> list1 = this.execute(queryHql.toString(), start, limit, params);
  if(null != list1 && list1.size() > 0){
   List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
   if(jsonField.length > 1){
    for(int j = 0; j < list1.size(); j++) {
     Object[] obj = (Object[]) list1.get(j);
     Map<String, Object> map = new HashMap<String, Object>();
     for(int i = 0; i < jsonField.length; i++) {
      map.put(jsonField[i], obj[i]);
     }
     resultList.add(map);
    }
   } else {
    for(int j = 0; j < list1.size(); j++) {
     String obj = String.valueOf(list1.get(j));
     Map<String, Object> map = new HashMap<String, Object>();
     map.put(jsonField[0], obj);
     resultList.add(map);
    }
   }
   jsonArray = JSONArray.fromObject(resultList);
   json = jsonArray.toString();
  }
  return "{totalProperty:" + totalProperty + ",root:" + json + "}";
 }
 
 public T getById(String id) throws Exception {
  return this.hibernateTemplate.get(entityClass, id);
 }

 public List<T> getAll() throws Exception {
  return this.hibernateTemplate.loadAll(entityClass);
 }

 public List<T> find(String hql) throws Exception {
  return find(hql, (Object[]) null);
 }

 public List<T> find(String hql, Object value) throws Exception {
  return find(hql, new Object[] { value });
 }

 @SuppressWarnings("unchecked")
 public List<T> find(String hql, Object... values) throws Exception {
  return this.hibernateTemplate.find(hql, values);
 }

 public Serializable save(T entity) throws Exception {
  Serializable ser = this.hibernateTemplate.save(entity);
  this.hibernateTemplate.flush();
  return ser;
 }

 public void update(T entity) throws Exception {
  this.hibernateTemplate.update(entity);
  this.hibernateTemplate.flush();
 }

 public void saveOrUpdate(T entity) throws Exception {
  this.hibernateTemplate.saveOrUpdate(entity);
  this.hibernateTemplate.flush();
 }

 public void saveOrUpdate(List<T> list) throws Exception {
  this.hibernateTemplate.saveOrUpdateAll(list);
  this.hibernateTemplate.flush();
 }

 public void delete(T entity) throws Exception {
  this.hibernateTemplate.delete(entity);
  this.hibernateTemplate.flush();
 }

 public void deleteById(PK id) throws Exception {
  T t = this.hibernateTemplate.get(entityClass, id);
  if(t != null) {
   this.hibernateTemplate.delete(t);
  }
 }

 public int deleteAll() throws Exception {
  final String hql = "delete from " + entityClass.getName();
  int count = this.hibernateTemplate.execute(new HibernateCallback<Integer>(){

   public Integer doInHibernate(Session session) throws HibernateException, SQLException {
    return session.createQuery(hql).executeUpdate();
   }

  });
  this.hibernateTemplate.flush();
  return count;
 }

 protected List<?> execute(final String hql, final int start, final int limit, final Object... params) {
  List<?> list = this.hibernateTemplate.execute(new HibernateCallback<List<?>>(){

   public List<?> doInHibernate(Session session) throws HibernateException, SQLException {
    Query query = session.createQuery(hql);
    query.setFirstResult(start);
    query.setMaxResults(limit);
    if(null != params){
     for(int i = 0; i < params.length; i++) {
      query.setParameter(i, params[i]);
     }
    }
    return query.list();
   }

  });
  this.hibernateTemplate.flush();
  return list;
 }
 
 
 public void deleteAll(Collection<?> entities) throws Exception {
  this.hibernateTemplate.deleteAll(entities);
  this.hibernateTemplate.flush();
 }

 public JdbcTemplate getJdbcTemplate() {
  return jdbcTemplate;
 }

 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
  this.jdbcTemplate = jdbcTemplate;
 }

 public LobHandler getDefaultLobHandler() {
  return defaultLobHandler;
 }

 public void setDefaultLobHandler(LobHandler defaultLobHandler) {
  this.defaultLobHandler = defaultLobHandler;
 }

 public HibernateTemplate getHibernateTemplate() {
  return hibernateTemplate;
 }

 public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
  this.hibernateTemplate = hibernateTemplate;
 }
}

 

 

实例:

1.MenuDao

package com.wxthtf.sys.menu;

import com.wxthtf.common.ABaseDao;
import com.wxthtf.pojo.SecurityMenu;


/**
 * <li>Title: MenuDao.java</li>
 * <li>Project: WorkFrame</li>
 * <li>Package: com.crescent.sys.menu</li>
 * <li>Description: </li>
 * <li>Copyright: Copyright (c) 2011</li>
 * <li>Company: wxthtf Technologies </li>
 * <li>Created on May 23, 2011 10:04:58 PM</li>
 *
 * @author chun_chang
 * @version 1.0.0.0
 *
 */
public class MenuDao extends ABaseDao<SecurityMenu, String>{
 
}

 

2.MenuService

package com.wxthtf.sys.menu;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;
import org.springframework.jdbc.core.RowMapper;

import com.wxthtf.common.FormatUtil;
import com.wxthtf.pojo.SecurityFunction;
import com.wxthtf.pojo.SecurityMenu;
import com.wxthtf.pojo.SecurityUsers;
import com.wxthtf.sys.role.RoleFuncsMapDao;

/**
 * <li>Title: MenuService.java</li>
 * <li>Project: WorkFrame</li>
 * <li>Package: com.crescent.sys.menu</li>
 * <li>Description: </li>
 * <li>Copyright: Copyright (c) 2011</li>
 * <li>Company: wxthtf Technologies </li>
 * <li>Created on May 24, 2011 9:55:48 PM</li>
 *
 * @author chun_chang
 * @version 1.0.0.0
 *
 */
public class MenuService {
 private MenuDao menuDao = null;

 

public String delMenu(String id)  throws Exception {
  // 检查菜单是否被桌面使用
  String sql = "select count(*) from home_panels where menuId = ?";
  int count = this.menuDao.queryForInt(sql, new Object[]{ id });
  if(count == 0){// 菜单没有被使用
   sql = "select functionId from security_function where menuId like '" + id + "%'";
   List<String> list = this.funcsDao.query(sql);
   
   sql = "delete from security_role_function where functionId = ?";
   this.roleFuncsMapDao.batchDeleteByIds(sql, list);
   
   sql = "delete from security_function where menuId like '" + id + "%'";
   this.funcsDao.delete(sql);
   
   sql = "delete from security_menu where menuId like '" + id + "%'";
   this.menuDao.delete(sql);
   return "1";
  } else {
   return "0";
  }
 }

 

 public MenuDao getMenuDao() {
  return menuDao;
 }

 public void setMenuDao(MenuDao menuDao) {
  this.menuDao = menuDao;
 }

 

}

 

 

 

3
1
分享到:
评论
2 楼 chun521521 2011-07-27  
谢谢,其实主要的就是applicationContext.xml配置,ABaseDao是我自己封装的。只要有了template,一切尽在掌握。

1 楼 KimHo 2011-07-26  
这么一长串看下去,头有点晕
整理成pdf文档就更好了,呵呵。
不过还是支持下这么热心分享技术的精神

相关推荐

    Spring持久化模板总结

    Spring提供了多种持久化模板,如JdbcTemplate和HibernateTemplate,以简化数据库操作并减少代码中的样板代码。这两个模板都是Spring JDBC模块的一部分,用于增强对SQL数据库的访问能力。本文将深入探讨Spring对...

    简单介绍如何使用Spring Boot使用JdbcTemplate与MySQL进行数据库操作

    在本文中,我们将深入探讨如何使用Spring Boot集成JdbcTemplate与MySQL数据库进行数据操作。Spring Boot以其简化配置和快速启动的特点,已经成为Java开发者的首选框架。而JdbcTemplate是Spring框架的一部分,它提供...

    打印JdbcTemplate执行sql

    4. **事务与回滚**:`JdbcTemplate`还提供了事务管理的能力。当在一个事务中执行多条SQL语句时,如果其中一个失败,所有操作都将回滚,确保数据的一致性。你可以通过`JdbcTemplate`的`execute`方法执行一组SQL操作,...

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

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

    JdbcTemplate的事务控制.docx

    当使用`JdbcTemplate`结合Spring框架时,可以采用与原生JDBC事务控制类似的方法,但在Spring环境中进行管理。以下是一个使用Druid数据库连接池的示例代码: ```java @RequestMapping("/druidData1") public String ...

    spring-jdbcTemplate实例工程

    五、优势与应用场景 1. **代码简洁**:通过模板方法,大大减少了重复的JDBC代码,提高了代码的可读性和可维护性。 2. **异常处理**:统一的异常处理机制,简化了错误处理。 3. **测试友好**:支持模拟数据源,...

    SpringJdbcTemplate封装工具类

    3. **封装与规范** 在描述中提到的“规范model格式接口”,可能是指创建一套标准的数据访问接口,这些接口定义了CRUD(Create、Read、Update、Delete)操作,并由SpringJdbcTemplate实现具体的数据库交互逻辑。这样...

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

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

    Spring JdbcTemplate 常用方法整理

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

    jdbcTemplate

    `JdbcTemplate`是Spring框架中的一个核心组件,主要用于简化Java应用程序与关系数据库之间的交互。它提供了模板化的SQL执行方法,从而避免了繁琐的JDBC代码编写,提高了代码的可读性和可维护性。项目经理编写的这个`...

    Spring--JdbcTemplate.pdf

    JdbcTemplate是Spring中常用的持久层技术之一,它支持Spring的声明式事务管理,能够与Spring的其他框架组件无缝整合。 描述中提到的"一图详解(脑图)"意味着文档中可能包含了一个清晰的图示,这个图示将详细展示...

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

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

    spring的jdbcTemplate小案例

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

    JdbcTemplate

    JdbcTemplate 调用存储过程

    使用Spring的JdbcTemplate实现分页功能

    使用Spring的JdbcTemplate实现分页功能

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

    - spring-jdbc-4.2.4.RELEASE.jar:包含JdbcTemplate及与数据库交互的相关类。 - spring-tx-4.2.4.RELEASE.jar:支持事务管理功能。 #### JdbcTemplate对象的创建 JdbcTemplate对象的创建可以通过默认构造函数或...

    Spring入门

    5、 Spring提供的众多辅助类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate 6、 Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts2等,更便于应用的开发。

    RedisTemplate-JDBCTemplate.zip

    在处理数据库操作和缓存服务时,Spring提供了两个非常有用的模板类:JdbcTemplate和RedisTemplate。这两个模板类旨在简化数据库操作(如JDBC)和NoSQL存储(如Redis)的交互,从而减少代码量,提高可读性和可维护性...

Global site tag (gtag.js) - Google Analytics