spring + hibernate+ C3P0+MYSQL配置

看下面的几个文件:
可能贴的顺序上有点问题:



(1) applicationContext.xml 

---------------------

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
 <!-- 引入参数配置文件 -->
 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
   <list>
    <value>jdbc.properties</value>
   </list>
  </property>
 </bean>
 
 <!-- 配置数据源  -->
 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  <property name="driverClass"><value>${jdbc.driverClass}</value></property>
  <property name="jdbcUrl"><value>${jdbc.url}</value></property>
  <property name="user"><value>${jdbc.user}</value></property>
  <property name="password"><value>${jdbc.password}</value></property>
  <property name="initialPoolSize"><value>${jdbc.initialPoolSize}</value></property>
  <property name="minPoolSize"><value>${jdbc.minPoolSize}</value></property>
  <property name="maxPoolSize"><value>${jdbc.maxPoolSize}</value></property>
 </bean>

 
 <!-- spring Hibernate SessionFactory -->
 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.format_sql">true</prop>
    <prop key="hibernate.jdbc.fetch_size">80</prop>
    <prop key="hibernate.jdbc.batch_size">35</prop>
   </props>
  </property>
  <property name="mappingResources"> 
   <list>        
    <value>com/spring/demo/bean/mapping/Book.hbm.xml</value>                                                
   </list> 
  </property> 
 </bean>
 
 
 
 <!-- 事务管理器 -->
 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
 </bean>
 
 
 <!-- 事务代理拦截器的配置 -->
 <bean id="baseTransactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
   <ref bean="transactionManager" />
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
   </props>
  </property>
 </bean>
 
 
 
 
 <bean id="hibernate_BookDao" class="com.spring.demo.dao.Hibernate_BookDao" >
  <property name="sessionFactory">
   <ref bean="sessionFactory"/>
  </property>
 </bean>
 
 
 <bean id="hibernate_BookManager" parent="baseTransactionProxy">
  <property name="target">
   <bean class="com.spring.demo.manager.Hibernate_BookManager">
    <property name="dao">
     <ref bean="hibernate_BookDao"/>
    </property>
   </bean>
  </property>
 </bean>
 
 
</beans>

---------------------

(2) jdbc.properties
## 这个事连接mysql数据库的具体参数配置,
## 楼主要根据自己的数据来配置,不可直接使用
---------------------

jdbc.driverClass=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/springdemo?useUnicode=true&characterEncoding=utf-8

jdbc.user=root
jdbc.password=root
jdbc.initialPoolSize=1
jdbc.minPoolSize=1
jdbc.maxPoolSize=10

---------------------

说明:applicationContext.xml 应用了jdbc.properties文件

,我自己测试,没有问题,而且是spring配置式事务的。


需要JAR包

spring.jar
c3p0.jar
mysql.jar
cglib.jar
asm.jar
antlr.jar
hibernate3.jar
jta.jar
dom4j.jar
commons-collections.jar
commons-logging.jar 



-----------


Hibernate_BookDao.java

--------------

package com.spring.demo.dao;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.spring.demo.bean.Book;


/**
 * 
 * @author wangyudong
 *
 */
public class Hibernate_BookDao extends HibernateDaoSupport {
 
 /**
  * 添加一本书
  * @param book
  */
 public void insertBook(Book book){
  this.getHibernateTemplate().save(book);
 }
 
 /**
  * 修改一本书
  * @param book
  */
 public void updateBook(Book book){
  this.getHibernateTemplate().update(book);
 }
 
 
 /**
  * 根据ID来删除一本书
  * @param id
  */
 public void deleteBook(Integer id){
  Book book = new Book();
  book.setId(id);
  this.getHibernateTemplate().delete(book);
 }
 
 
 /**
  * 根据ID来查询书对象
  * @param id
  * @return
  */
 public Book selectBookById(Integer id){
  String hql = "from Book b where b.id=?";
  Object[] params = new Object[]{id};
  List list = this.getHibernateTemplate().find(hql, params );
  
  if(list!=null && list.size()>0){
   return (Book)list.get(0);
  }
  return null ;
 }
 
 
 /**
  * 根据书名来查询相关书记录列表
  * @param name
  * @return
  */
 public List selectBookByName(String name){
  
  String hql = "from Book b where b.name like ?";
  Object[] params = new Object[]{"%"+name+"%"};
  return this.getHibernateTemplate().find(hql, params);
 }
 
}


--------------



(2) Hibernate_BookManager.java

---------------

package com.spring.demo.manager;

import java.util.List;

import com.spring.demo.bean.Book;
import com.spring.demo.dao.Hibernate_BookDao;

public class Hibernate_BookManager {
 
 
 private Hibernate_BookDao dao ;

 
 
 /**
  * 批量添加书本,如果列表长度超过3,就抛出异常
  * @param books
  */
 public void insertBooks(List books){
  
  for(int i=0 ; i<books.size() ;i++){ 
   if(i>2){
    throw new RuntimeException("中断事务异常,当列表长度大于3的时候故意抛出,看看事务是否回滚");
   }
   Book book = (Book)books.get(i);
   dao.insertBook(book);
  }
 }
 
 
 /**
  * 添加一本书
  * @param book
  */
 public void insertBook(Book book){
  this.dao.insertBook(book);
 }
 
 
 /**
  * 修改一本书
  * @param book
  */
 public void updateBook(Book book){
  this.dao.updateBook(book);
 }
 
 
 
 /**
  * 根据ID来删除一本书
  * @param id
  */
 public void deleteBook(Integer id){
  this.dao.deleteBook(id);
 }
 
 
 
 /**
  * 根据ID来查询书对象
  * @param id
  * @return
  */
 public Book selectBookById(Integer id){
  return this.dao.selectBookById(id);
 }
 
 
 
 /**
  * 根据书名来查询相关书记录列表
  * @param name
  * @return
  */
 public List selectBookByName(String name){
  return this.dao.selectBookByName(name);
 }
 
 
 
 
 // getter and setter //
 public Hibernate_BookDao getDao() {
  return dao;
 }

 public void setDao(Hibernate_BookDao dao) {
  this.dao = dao;
 }
}

---------------


(3)Book.java


--------------
package com.spring.demo.bean;

import java.io.Serializable;

/*

DROP TABLE IF EXISTS book ;

CREATE TABLE book(
 id int(11) NOT NULL auto_increment COMMENT 'primary key',
    name varchar(60) default NULL COMMENT 'book name',                             
    PRIMARY KEY  (`id`)                                                         
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='my book table';

 */

public class Book implements Serializable {
 
 public Book(){}
 
 public Book(String name){
  this.name = name;
 }
 
 /**
  * ID
  */
 private Integer id ;
 
 /**
  * 书名
  */
 private String name ;

 
 // getter and setter 
 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

}
--------------





(4)Book.hbm.xml
---------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.spring.demo.bean.Book" table="BOOK" >
        <id name="id" type="integer" length="11">
            <column name="id" />
            <generator class="identity" />
        </id>
       
        <property name="name" column="NAME" type="string" length="60" ></property>
       
    </class>
</hibernate-mapping>
---------------



#mysql的造表语句,指定了数据库springdemo#
---------------------
MYSQL 的BOOK 表创建语句

CREATE DATABASE IF NOT EXISTS springdemo;

USE springdemo;

DROP TABLE IF EXISTS book ;

CREATE TABLE book(
 id int(11) NOT NULL auto_increment COMMENT 'primary key',
    name varchar(60) default NULL COMMENT 'book name',                             
    PRIMARY KEY  (`id`)                                                         
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='my book table';

---------------------



下面是我的测试方法:
===========

package com.spring.demo;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.demo.bean.Book;
import com.spring.demo.manager.Hibernate_BookManager;

public class HibernateDemo {

 /**
  * @param args
  */
 public static void main(String[] args) {
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml") ;
  
  Hibernate_BookManager manager = (Hibernate_BookManager)context.getBean("hibernate_BookManager");
  
  List books = new ArrayList();
  
  
  books.add(new Book("book_01"));
  books.add(new Book("book_02"));
  books.add(new Book("book_03"));
  books.add(new Book("book_04"));
  
  manager.insertBooks(books);
  
  System.out.println("OK");

 }

}

你可能感兴趣的:(spring,mysql,Hibernate,bean,配置管理)