- 浏览: 1237719 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
lankk:
lankk 写道事实上,在运行String s1=new St ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
事实上,在运行String s1=new String(&qu ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
同意1楼的说法http://docs.oracle.com/j ...
理解String 及 String.intern() 在实际中的应用 -
raoyutao:
...
jdk 线程池 ThreadPoolExecutor -
hongdanning:
理解了。之前困惑的一些明白了。谢谢分享。
理解String 及 String.intern() 在实际中的应用
http://244369.blog.chinajavaworld.com/entry/4974/0/
Spring+Ibatis构建多库业务系统 一、前言 听说Spring的功能如何强大已经很久了,甚至自己非常擅长使用的Ibatis,也从V2.3以后完全拿掉了自身的Dao实现,转而推荐使用Spring的Bean实现了。于是怀着很激动地心情开始了Spring+Ibatis的整合之旅。原以为按照Spring的说明书,以及参考网友们的实践经验,一定也能很快搭建出全新的开发架构。然而,遇见的问题之多,确实也让自己始料未及。下面把一步步的构建过程记录下来,一方面是对前一阶段工作的一个总结,另外一方面也期望更多的高手能够指点一二。 二、此架构适用的范围 此架构基于Spring+Ibatis整合而成,在最初的设计中,我期望这个架构能够不仅仅做基本的SQL操作,而且能够比较方便地扩展更多的数据库进入这个架构,并且能够实现单库或多库的事务处理。基于很多应用服务器并不支持JTATransactionManager(如Tomcat), 我采用JdbcTransactionManager实现单库或多库的事务处理。所以这个架构适用于基于JdbcTransactionManager实现单库或多库事务处理的情况。 三、搭建架构过程 1. 确定搭建成功的目标 下面的搭建过程已实现多库的事务处理成功为目标。为了验证这个目标是否完成,我们将使用Oracle和mysql两个数据库。我们将假设一个业务,业务的步骤是同时向oracle库中的offered表和test表写入测试数据,向mysql库中的contact表写入数据。如果此业务的每一个步骤都执行成功,数据将写入数据库。如果此业务的任何一个步骤出错,那么两个数据库都将执行回滚,数据将不写入数据库。 2. 初始化数据库 1)初始化oracle 1234567891011121314151617181920212223 --创建offered表主键所需的序列 create sequence SEQ_FA_ID minvalue 1 maxvalue 9999999999 start with 1 increment by 1 cache 20; --创建表offered create table OFFERED ( ID NUMBER not null, CONTACTMAN VARCHAR2(64) not null, CONTACTTEL VARCHAR2(64), CONTACTEMAIL VARCHAR2(128), ORGANIZATION VARCHAR2(128), LOCATION VARCHAR2(128), OFFEREDAMOUNT NUMBER default 0, OFFEREDWISH VARCHAR2(512), primary key(ID) ); --创建表test create table TEST ( NAME VARCHAR2(128), INPUTTIME DATE default sysdate, CONTENT CLOB ); 2)初始化mysql 需要注意的是,mysql数据库的InnoDB类型库才支持事务处理。 1234567891011 CREATE TABLE contact( id int(11) NOT NULL auto_increment, contactMan varchar(64) NOT NULL, contactTel varchar(64) default NULL, contactEmail varchar(128) default NULL, organization varchar(128) default NULL, location text, offeredAmount int(11) default 0, offeredWish text, PRIMARY KEY (id) ) ENGINE=InnoDB 3.创建数据对象DataObject 1)结构图 2)创建抽象类DataObject 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 /** * DataObject.java * Abstract class for all DataObject * Copyright 2008 * $Author: Lawrence Lin $ */ package supercms.domain; import java.util.Date; import supercms.util.Message; public abstract class DataObject{ protected boolean checked; protected String inputbyman; protected Date inputDate; protected String modifiedby; protected Date modifiedDate; protected String ipAddress; protected Message echoMessage; public Message getEchoMessage() { return echoMessage; } public void setEchoMessage(Message echoMessage) { this.echoMessage = echoMessage; } public Date getInputDate() { return inputDate; } public void setInputDate(Date inputDate) { this.inputDate = inputDate; } public DataObject(){ checked = false; } public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; } public String getInputbyman() { return inputbyman; } public void setInputbyman(String inputbyman) { this.inputbyman = inputbyman; } public String getModifiedby() { return modifiedby; } public void setModifiedby(String modifiedby) { this.modifiedby = modifiedby; } public Date getModifiedDate() { return modifiedDate; } public void setModifiedDate(Date modifiedDate) { this.modifiedDate = modifiedDate; } public String getIpAddress() { return ipAddress; } public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } } 3)创建数据对象Offered 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 package supercms.domain; public class Offered extends DataObject{ private int id; private String contactMan; private String contactTel; private String contactEmail; private String organization; private String location; private int offeredAmount; private String offeredWish; public Offered(){ super(); } public void init(){ } public void copy(Offered source){ } public String getContactEmail() { return contactEmail; } public void setContactEmail(String contactEmail) { this.contactEmail = contactEmail; } public String getContactMan() { return contactMan; } public void setContactMan(String contactMan) { this.contactMan = contactMan; } public String getContactTel() { return contactTel; } public void setContactTel(String contactTel) { this.contactTel = contactTel; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public int getOfferedAmount() { return offeredAmount; } public void setOfferedAmount(int offeredAmount) { this.offeredAmount = offeredAmount; } public String getOfferedWish() { return offeredWish; } public void setOfferedWish(String offeredWish) { this.offeredWish = offeredWish; } public String getOrganization() { return organization; } public void setOrganization(String organization) { this.organization = organization; } } 4)创建数据对象 Test 1234567891011121314151617181920 package supercms.domain; public class Test extends DataObject { private String name; private String content; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } 5)创建数据对象 Contact 为了方便,我们使用和Offered一样的数据结构 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 package supercms.domain; public class Contact extends DataObject{ private int id; private String contactMan; private String contactTel; private String contactEmail; private String organization; private String location; private int offeredAmount; private String offeredWish; public Contact(){ super(); } public void init(){ } public void copy(Contact source){ } public String getContactEmail() { return contactEmail; } public void setContactEmail(String contactEmail) { this.contactEmail = contactEmail; } public String getContactMan() { return contactMan; } public void setContactMan(String contactMan) { this.contactMan = contactMan; } public String getContactTel() { return contactTel; } public void setContactTel(String contactTel) { this.contactTel = contactTel; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public int getOfferedAmount() { return offeredAmount; } public void setOfferedAmount(int offeredAmount) { this.offeredAmount = offeredAmount; } public String getOfferedWish() { return offeredWish; } public void setOfferedWish(String offeredWish) { this.offeredWish = offeredWish; } public String getOrganization() { return organization; } public void setOrganization(String organization) { this.organization = organization; } } 4.编写Ibatis的sqlmap文件 1) 配置oracle数据库对应的sqlmap文件; 文件offered.xml 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 <?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="Oracle"> <typeAlias alias="Offered" type="supercms.domain.Offered"/> <typeAlias alias="Test" type="supercms.domain.Test"/> <insert id="insertOffered" parameterClass="Offered"> <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_FA_ID.nextval AS id FROM DUAL </selectKey> INSERT INTO offered( id,contactMan,contactTel,contactEmail, organization,location,offeredAmount,offeredWish )VALUES( #id#,#contactMan#,#contactTel#,#contactEmail#, #organization#,#location#,#offeredAmount#,#offeredWish# ) </insert> <update id="updateOffered" parameterClass="Offered"> UPDATE offered set contactMan=#contactMan#, contactTel=#contactTel#, contactEmail=#contactEmail#, organization=#organization#, location=#location#, offeredAmount=#offeredAmount#, offeredWish=#offeredWish# WHERE id=#id# </update> <delete id="deleteOffered" parameterClass="java.lang.Integer"> delete from offered WHERE id = #id# </delete> <select id="QueryOneOffered" resultClass="Offered" parameterClass="java.lang.Integer"> SELECT id,contactMan,contactTel,contactEmail, organization,location,offeredAmount,offeredWish FROM offered WHERE id = #id# </select> <select id="QueryOffered" resultClass="Offered" parameterClass="Offered"> SELECT id,contactMan,contactTel,contactEmail, organization,location,offeredAmount,offeredWish FROM offered where 1=1 <isNotEmpty prepend="AND" property="contactMan"> contactMan = #contactMan# </isNotEmpty> ORDER BY id </select> <select id="CountOffered" parameterClass="Offered" resultClass="int"> SELECT count(*) as rowsnum FROM offered where 1=1 <isNotEmpty prepend="AND" property="contactMan"> contactMan = #contactMan# </isNotEmpty> </select> <insert id="insertTest" parameterClass="Test"> insert into test(name,inputtime,content) values(#name#,sysdate,#content,javaType=java.lang.String,jdbcType=CLOB#) </insert> </sqlMap> 文件sqlmapconfig.xml 123456789 <?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> <!-- SQL Map XML configuration --> <sqlMap resource="supercms/resource/sqlmap/ora/offered.xml"/> </sqlMapConfig> 2)配置mysql数据库对应的sqlmap文件 文件contact.xml 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 <?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="mysql"> <typeAlias alias="Contact" type="supercms.domain.Contact"/> <insert id="insertContact" parameterClass="Contact"> INSERT INTO contact( id,contactMan,contactTel,contactEmail, organization,location,offeredAmount,offeredWish )VALUES( #id#,#contactMan#,#contactTel#,#contactEmail#, #organization#,#location#,#offeredAmount#,#offeredWish# ) </insert> <update id="updateContact" parameterClass="Contact"> UPDATE contact set contactMan=#contactMan#, contactTel=#contactTel#, contactEmail=#contactEmail#, organization=#organization#, location=#location#, offeredAmount=#offeredAmount#, offeredWish=#offeredWish# WHERE id=#id# </update> <delete id="deleteContact" parameterClass="java.lang.Integer"> delete from contact WHERE id = #id# </delete> <select id="QueryOneContact" resultClass="Contact" parameterClass="java.lang.Integer"> SELECT id,contactMan,contactTel,contactEmail, organization,location,offeredAmount,offeredWish FROM contact WHERE id = #id# </select> <select id="QueryContacts" resultClass="Contact" parameterClass="Contact"> SELECT id,contactMan,contactTel,contactEmail, organization,location,offeredAmount,offeredWish FROM offered where 1=1 <isNotEmpty prepend="AND" property="contactMan"> contactMan = #contactMan# </isNotEmpty> ORDER BY id </select> <select id="CountContacts" parameterClass="Contact" resultClass="int"> SELECT count(*) as rowsnum FROM offered where 1=1 <isNotEmpty prepend="AND" property="contactMan"> contactMan = #contactMan# </isNotEmpty> </select> </sqlMap>
发表评论
-
ServiceLocatorFactoryBean 学习
2016-01-27 14:36 3397今天看一个新项目 ... -
连接池exception GetConnectionTimeoutException get/close not same thread
2015-09-24 14:44 7137环境 hibernate 4.2.0.Final sp ... -
jboss Closing a connection for you
2011-05-10 19:06 2071jboss 报了如下的错 [CachedConnect ... -
jersey spring tomcat 集成
2011-05-04 15:39 3633首先把jersey的相关jar放到WEB-INF/lib目录下 ... -
spring 源码阅读之 WebApplicationContext 初始化
2011-03-21 15:32 2272web.xml <listener> ... -
spring security debug 小结
2010-05-21 16:06 2930有时需要在默认的filter之前定义自己的filter来改 ... -
spring security 修改 RememberMeServices的key
2010-05-21 12:11 2143用RememberMe的时候想改一些RememberMeSer ... -
spring security ajax
2010-05-20 16:39 2772转自 http://loianegroner.com/2010 ... -
spring security 自定义过滤器
2010-05-20 13:45 4128Filters 'com.lich0079.services. ... -
web 代码中 如何获得 applicationcontext 及与 beanfactory 区别
2010-05-19 17:18 1978WebApplicationContextUtils.getW ... -
spring aop
2009-12-11 18:35 1463spring对AOP的支持(采用Annotation的方式)1 ... -
spring 初步
2009-12-11 18:34 11251、spring普通属性注入 参见spring文档3.3. ... -
spring servlet jdbc
2009-12-05 18:14 2362这个文章的关注点是如何在只准使用servlet jsp jdb ... -
使用spring发送邮件例
2009-03-04 11:50 2496使用javamail來發送信件的主要流程是由 web serv ...
相关推荐
很好的spring+ibatis事务的配置文档.
"Struts2+Spring+Ibatis+MySQL" 是一个经典的Java Web开发框架组合,用于构建高效、可扩展的企业级应用程序。这个组合集成了强大的MVC(Model-View-Controller)框架Struts2、依赖注入与面向切面编程的Spring框架、...
Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...
在Struts+Spring+iBATIS的架构中,iBATIS负责与数据库交互,通过SQL映射文件(sqlmap.xml)定义SQL查询、插入、更新和删除操作。它与Spring整合后,可以在Spring的事务管理下执行数据库操作,确保数据的一致性。 在...
在IT行业中,构建高效、可扩展的Web应用是至关重要的,而"Maven搭建SpringMVC+Spring+Ibatis"的组合则提供了一种强大的解决方案。本文将深入探讨这些技术及其集成,帮助你理解和掌握如何利用它们来构建现代化的Java ...
这个“struts2+spring+iBatis框架包”集成了这三个框架,使得开发者能够快速构建基于MVC(Model-View-Controller)模式的Web应用。 Struts2作为MVC框架,负责处理应用程序的控制逻辑。它通过Action类和配置文件定义...
JSF+Spring+Ibatis示例,对学习JAVA企业应用开发有巨大的帮助!
总的来说,Spring、Struts2和iBatis的整合为Java Web开发提供了一个强大、灵活的解决方案,让开发者能够更专注于业务逻辑,而不是框架的底层实现。通过合理的配置和使用这个jar包,开发者可以快速构建出稳定、高性能...
在Spring+iBatis+Oracle体系中,缓存可以分为两种类型:一级缓存(本地缓存)和二级缓存。 一级缓存是iBatis默认提供的,它存在于SqlSession级别,同一SqlSession内的多次查询会共享结果,避免了重复的数据库访问。...
"webwork+spring+ibatis" 的实例通常会展示如何将这三个框架集成到一个完整的Web项目中。这个实例可能包含以下部分: 1. **环境配置**:安装和配置Java开发环境,如JDK,以及相关的开发工具,如IDEA或Eclipse。 2. ...
struts2 + spring + ibatis 实例 struts2 + spring + ibatis 实例 struts2 + spring + ibatis 实例 struts2 + spring + ibatis 实例 struts2 + spring + ibatis 实例
maven3+struts2+spring+ibatis,本来是用maven3+struts2+spring+hibernate但考虑到hibernate在多表级联查询的时候执行效率不高,所以改用性能更好不过sql比较麻烦的的ibatis,本项目只有登录和插入数据,仅供参考: ...
Struts+Spring+Ibatis环境配置(一) - zwjxf的专栏 - 博
这个"struts+spring+ibatis的Demo"压缩包文件提供了这三个框架集成使用的示例代码,旨在帮助开发者理解和学习如何将它们有效地结合在一起。 **Struts 2框架** Struts 2是一个基于MVC设计模式的Web应用框架,它继承...
Struts2+Spring+Ibatis整合的简单人事管理系统 没分了,转载过来的,有需要的看看吧,我觉得不错~~
Struts、Spring和iBatis是Java开发中常用的三大开源框架,它们各自负责应用程序的不同层面,共同构建了一个灵活且强大的企业级应用开发解决方案。这里,我们深入探讨这三个框架以及它们如何协同工作。 **Struts框架...
Struts、Spring 和 iBatis 是 Java Web 开发中三个非常重要的开源框架,它们共同构建了一个灵活、可扩展且易于维护的系统架构。这个"Struts+Spring+Ibatis示例"提供了一个基础的整合应用,帮助开发者理解这三者如何...
各种系统架构图及其简介(Spring+IBatis+Struts1+Struts2+Hibernat)
一个简单的spring+struts+ibatis整合的实例,实现了用户登录,用户登录成功则显示欢迎信息,失败则显示用户名或密码错误,该实例非常简单基础,特别适合新人学习,工程包含了必要的资源包,部署到服务器中及可运行,...
在Spring+Struts+ibatis这种经典的Java Web开发框架组合中,主要涉及到三层架构:表现层(Action)、业务逻辑层(Service)和数据访问层(DAO)。这些组件协同工作,实现了应用程序的功能。以下是对各部分的详细解释...