我提供一个实例: 数据库是MYSQL , 数据源是C3P0 , ----------- 1) 建表语句 : ---------------- 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'; ---------------- 注意了,在MYSql 中 表的引擎一定要用InnoDB ,如果用MyISAM 的话,是不支持事务的。 2) JAVA Bean Book.java ------------------- package com.spring.demo.bean; import java.io.Serializable; 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; } } ------------------- 3)Book.xml 配置 --------------------- <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="Book" > <typeAlias alias="book" type="com.spring.demo.bean.Book"/> <resultMap id="result_map_book" class="book" > <result property="id" column="id" javaType="integer"/> <result property="name" column="name" javaType="string"/> </resultMap> <insert id="insertBook" parameterClass="book"> insert book(name) values(#name#) </insert> <update id="updateBook" parameterClass="book"> update book set name=#name# where id=#id# </update> <delete id="deleteBook" parameterClass="int"> delete from book where id=#value# </delete> <select id="selectBookById" parameterClass="int" resultMap="result_map_book"> select id , name from book where id=#value# </select> <select id="selectBookByName" parameterClass="string" resultMap="result_map_book"> select id , name from book where name like #value# </select> </sqlMap> --------------------- 4)spring 的 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> <!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref local="dataSource"/> </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> <!-- ibatis sqlMapClient 配置 --> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation"> <value>classpath:sqlMapConfig.xml</value> </property> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <!-- dao配置 --> <bean id="ibatis_BookDao" class="com.spring.demo.dao.Ibatis_BookDao"> <property name="sqlMapClient" > <ref bean="sqlMapClient"/> </property> </bean> <!-- 添加了事务的管理类 --> <bean id="ibatis_BookManager" parent="baseTransactionProxy"> <property name="target"> <bean class="com.spring.demo.manager.Ibatis_BookManager"> <property name="dao"> <ref bean="ibatis_BookDao"/> </property> </bean> </property> </bean> </beans> --------------- 5) 数据源参数配置文件:jdbc.properties 【说明 :按照你的具体情况来配置】: ------------ 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 ------------ 6) IBATIS 的初始化配置 sqlMapConfig.xml ------------ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings useStatementNamespaces="true" /> <sqlMap resource="com/spring/demo/bean/Book.xml"/> </sqlMapConfig> ------------ 配置完毕,下面是DAO 和 测试方法: Ibatis_BookDao.java ---------------- package com.spring.demo.dao; import java.util.List; import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; import com.spring.demo.bean.Book; public class Ibatis_BookDao extends SqlMapClientDaoSupport { /** * 添加一本书 * @param book */ public void insertBook(Book book){ this.getSqlMapClientTemplate().insert("Book.insertBook", book); } /** * 修改一本书 * @param book */ public void updateBook(Book book){ this.getSqlMapClientTemplate().update("Book.updateBook", book); } /** * 根据ID来删除一本书 * @param id */ public void deleteBook(Integer id){ this.getSqlMapClientTemplate().delete("Book.deleteBook", id); } /** * 根据ID来查询书对象 * @param id * @return */ public Book selectBookById(Integer id){ return (Book)this.getSqlMapClientTemplate().queryForObject("Book.selectBookById", id); } /** * 根据书名来查询相关书记录列表 * @param name * @return */ public List selectBookByName(String name){ return this.getSqlMapClientTemplate().queryForList("Book.selectBookByName", "%"+name+"%" ); } } ---------------- Ibatis_BookManager.java ------------------- package com.spring.demo.manager; import java.util.List; import com.spring.demo.bean.Book; import com.spring.demo.dao.Ibatis_BookDao; public class Ibatis_BookManager { private Ibatis_BookDao dao = null ; /** * 批量添加书本,如果列表长度超过3,就抛出异常 * @param books */ public void insertBooks(List books){ for(int i=0 ; i<books.size() ;i++){ if(i>2){ System.out.println("列表太长,中断事务"); 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 Ibatis_BookDao getDao() { return dao; } public void setDao(Ibatis_BookDao dao) { this.dao = dao; } ------------------- 测试类: IbatisDemo.java ------------------ 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.Ibatis_BookManager; import com.spring.demo.manager.Jdbc_BookManager; public class IbatisDemo { /** * @param args */ public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml") ; Ibatis_BookManager manager = (Ibatis_BookManager)context.getBean("ibatis_BookManager"); List books = new ArrayList(); books.add(new Book("book_10")); books.add(new Book("book_11")); books.add(new Book("book_12")); books.add(new Book("book_13")); manager.insertBooks(books); System.out.println("OK"); } } ------------------ 说明:MYSQL 的事务完整性我是测试过的。 之前有个朋友吧数据库换成 SQL SERVER 的时候事务完整性就出现问题。 这个问题有待研究。
相关推荐
自己总结了Spring+Struts+ibatis中的各种问题以及讲解各个配置文件和项目架构
自己亲自用eclipse+spring+ibatis搭建的基本框架,含有所需的JAR包,下载后只需更改sql2005的连接字符串,即WEB-INF/db-context.xml中的配置,并更改ibatis的xml文件中的sql语句即可运行。
Spring+Struts2+Ibatis整合例子,jar太大不让上传,删除了,看配置文件吧
里面融合了spring+struts+ibatis用到的配置文件模板,这样我们就可以不用到处去找了。。
Spring+ibatis框架struts2的配置以struts.xml为主要配置文件,该文件配置了URL和java类之间的对应关系,struts支持多个配置文件并存,所以某个模块的配置文件可以新建一个struts-模块名.xml,并在此文件中进行配置。
Spring+IbatIS项目,在案例项目中不只是对CURD的操作,主要是在配置文件中介绍了怎么配置链接迟,这个项目使用的是C3P0连接池,相应的还有.txt文件分析。部署到eclipse或者是myeclipse中修改jdbc.properties文件就...
springMVC+spring+ibatis 整合,包含初始化sql 为myeclipse项目,数据库配置见properites文件
j2ee的框架搭建,是很好学习教程,希望对初学者开发有用。
文档包含了struts2+spring+ibatis框架所需jar包,各种配置文件以及Java中的使用
如果是入门学习,或者想看看struts+spring+ibatis怎么集成在一起,可以下载看看。已经通过测试。jar包全,需要本地装mysql,或者修改jdbc配置文件
flex+spring+struts2+ibatis 整合的eclipse工程,可以... 八,修改jdbc,properties为你的数据库配置,支持mysql,Oracle,根据users.xml文件建user表,字段id,username,password 有问题请发邮件jiping.chen@yahoo.com.cn
spring+ibatis 整合的简单实例,配置好的文件,简单实现一个功能在两个页面间的跳转及list的显示。
Struts2+Spring+ibatis实现怎...本文档将项目的配置文件、源代码等全部实现。方便初学者学习ssi三大框架的整合,以及一个相对复杂的难题——与ssi框架结合的分页。该文档十分详细,按照代码结构部署,即可运行成功。
一个整合spring,ibatis,dwz的小项目,主要是配置文件。
这是本人从实际项目开发中总结出来的,具有很强的实用性,有关Struts,Spring,Ibatis,web 四个文件的详细配置。值得初学者,以及想实际搭建框架者学习。
Spring+EasyJWeb+iBatis版j2ee在线购物jpetstore系统,业务层及持久层使用springframework上的jpetsotre源码,表示层使用EasyJWeb,该系统是一个简单的J2EE网上商店系统,包括商品列表、购物车、用户管理、在线订单...
原创作品手录 前言:本讲是在【第三讲:WEB项目-集成Flex3+BlazeDS3.2+Spring2.5.6】方式二的基础上添加iBatis,此次集成其实质是Spring与iBatis的整合而已 ...注:无需关注dbcore.jar,理解整合仅需关注各配置文件
NULL 博文链接:https://firezhfox.iteye.com/blog/1735707
数据同步程序,使用ibatis+spring+struts,利用xml配置文件,自定义xml读写。下载导入即可使用,javaee5
struts1+spring2+ibatis2开发的用户登录案例 用简单的语言带你进入javaweb开发 体会实用ibatis开发带来的快乐 就是配置ibatis文件有点麻烦,但是配置好后,就会用得很爽 对于想学习的人来说,这是很好的一个案例