spring3与ibatis的集成搭建及简单应用
- 格式:doc
- 大小:8.49 KB
- 文档页数:7
Spring+iBatis+JOTM实现JTA事务JOTM是个开源的JTA事务管理组件,可以让程序脱离J2EE容器而获得分布式事务管理的能力。
测试过程如下:一、环境1、准备软件环境spring-framework-2.5.6.SEC01-with-dependencies.zipibatis-2.3.4ow2-jotm-dist-2.1.4-bin.tar.gzMySQL-5.1JDK1.52、创建数据库环境,注意数据库引擎为InnoDB,只有这样才能支持事务。
CREATE DATABASE IF NOT EXISTS testdb_a DEFAULT CHARACTER SET utf8;USE testdb_a;DROP TABLE IF EXISTS tab_a;CREATE TABLE tab_a (id bigint(20) NOT NULL,name varchar(60) DEFAULT NULL,address varchar(120) DEFAULT NULL,PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE DATABASE IF NOT EXISTS testdb_b DEFAULT CHARACTER SET utf8;USE testdb_b;DROP TABLE IF EXISTS tab_b;CREATE TABLE tab_b (id bigint(20) NOT NULL,name varchar(60) DEFAULT NULL,address varchar(120) DEFAULT NULL,PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;二、建立项目testJOTM1、建立项目后,准备依赖的类库,结构如下:│spring-aop.jar│spring-beans.jar│spring-context-support.jar│spring-context.jar│spring-core.jar│spring-jdbc.jar│spring-jms.jar│spring-orm.jar│spring-test.jar│spring-tx.jar│spring-web.jar│spring-webmvc-portlet.jar│spring-webmvc-struts.jar│spring-webmvc.jar│aspectjrt.jar│aspectjweaver.jar│cglib-nodep-2.1_3.jar│asm-2.2.3.jar│log4j-1.2.15.jar│asm-commons-2.2.3.jar│asm-util-2.2.3.jar│aopalliance.jar│mysql-connector-java-5.1.6-bin.jar│├─ibatis│ibatis-2.3.4.726.jar│sql-map-2.dtd│sql-map-config-2.dtd│├─jotm│license.txt│xapool.jar│jotm-core.jar│jotm-standalone.jar│jotm-jms.jar│jotm-datasource.jar│ow2-jta-1.1-spec.jar│jotm-client.jar│├─jakarta-commons│commons-attributes-api.jar│commons-attributes-compiler.jar│commons-beanutils.jar│commons-codec.jar│commons-collections.jar│commons-dbcp.jar│commons-digester.jar│commons-discovery.jar│commons-fileupload.jar│commons-httpclient.jar│commons-io.jar│commons-lang.jar│commons-logging.jar│commons-pool.jar│commons-validator.jar│├─junit│junit-3.8.2.jar│junit-4.4.jar│license.txt│└─log4jlog4j-1.2.15.jar2、根据表建立entity和SQLMappublic class TabA implements Serializable {private Long id;private String name;private String address;//省略getter/setterpublic class TabB implements Serializable {private Long id;private String name;private String address;//省略getter/setterTabA.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap PUBLIC "-////DTD SQL Map 2.0//EN" "/dtd/sql-map-2.dtd" ><!-- 表名:tab_a --><sqlMap namespace="tab_a"><typeAlias alias="TabA" type="vasoft.stu.jtom.entity.TabA"/><resultMap id="result_base" class="TabA"><result property="id" column="id"/><result property="name" column="name"/><result property="address" column="address"/></resultMap><!-- 添加--><insert id="insert" parameterClass="TabA">insert into tab_a(id,name,address) values (#id#,#name#,#address#)<selectKey keyProperty="id" resultClass="long">select LAST_INSERT_ID()</selectKey></insert><!-- 更新--><update id="update" parameterClass="TabA">update tab_a setid = #id#,name = #name#,address = #address#where id = #id#</update><!-- 删除--><delete id="deleteById" parameterClass="long">delete from tab_awhere id = #value#</delete><!-- 根据ID获取--><select id="findById" parameterClass="long" resultMap="tab_a.result_base">select *from tab_awhere id = #value#</select></sqlMap>TabB.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap PUBLIC "-////DTD SQL Map 2.0//EN" "/dtd/sql-map-2.dtd" ><!-- 表名:tab_b --><sqlMap namespace="tab_b"><typeAlias alias="TabB" type="vasoft.stu.jtom.entity.TabB"/><resultMap id="result_base" class="TabB"><result property="id" column="id"/><result property="name" column="name"/><result property="address" column="address"/></resultMap><!-- 添加--><insert id="insert" parameterClass="TabB">insert into tab_b(id,name,address) values (#id#,#name#,#address#)<selectKey keyProperty="id" resultClass="long">select LAST_INSERT_ID()</selectKey></insert><!-- 更新--><update id="update" parameterClass="TabB">update tab_b setid = #id#,name = #name#,address = #address#where id = #id#</update><!-- 删除--><delete id="deleteById" parameterClass="long">delete from tab_bwhere id = #value#</delete><!-- 根据ID获取--><select id="findById" parameterClass="long" resultMap="tab_b.result_base"> select *from tab_bwhere id = #value#</select></sqlMap>/*** TabADAO** @author leizhimin 2009-6-25 12:39:19*/public interface TabADAO {/*** 保存一个TabA对象** @param tabA TabA对象* @return 返回保存后的对象*/TabA saveTabA(TabA tabA);/*** 更新一个TabA** @param tabA TabA对象* @return 返回更新后的对象*/TabA updateTabA(TabA tabA);/*** 删除指定标识的一个TabA** @param id TabA标识*/void deleteTabAById(Long id);/*** 获取指定标识的TabA** @param id TabA标识* @return 所查询到的TabA*/TabA findTabAById(Long id);}/*** TabADAO** @author leizhimin 2009-6-25 12:43:55*/public class TabADAOImpl extends SqlMapClientDaoSupport implements TabADAO {/*** 保存一个TabA对象** @param tabA TabA对象* @return 返回保存后的对象*/public TabA saveTabA(TabA tabA) {Long id = (Long) getSqlMapClientTemplate().insert("tab_a.insert", tabA);tabA.setId(id);return tabA;}/*** 更新一个TabA** @param tabA TabA对象* @return 返回更新后的对象*/public TabA updateTabA(TabA tabA) {getSqlMapClientTemplate().update("tab_a.update", tabA);return tabA;}/*** 删除指定标识的一个TabA** @param id TabA标识*/public void deleteTabAById(Long id) {getSqlMapClientTemplate().delete("tab_a.deleteById",id);}/*** 获取指定标识的TabA** @param id TabA标识* @return 所查询到的TabA*/public TabA findTabAById(Long id) {return (TabA) getSqlMapClientTemplate().queryForObject("tab_a.findById",id);}}B的DAO和A类似,就不写了。
各种系统架构图及其简介(Spring+IBatis+Struts1+Struts2+Hibernate+JavaEE+Oracle)1.Spring架构图Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。
框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。
Spring框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境。
Spring的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。
这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。
组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。
每个模块的功能如下:核心容器:核心容器提供Spring框架的基本功能。
核心容器的主要组件是BeanFactory,它是工厂模式的实现。
BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息。
Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP模块直接将面向方面的编程功能集成到了Spring 框架中。
所以,可以很容易地使Spring框架管理的任何对象支持AOP。
Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。
通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO:JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
Spring 3.x权威开发指南:实施Java EE 6的利器2011年8月31日目录序 (VIII)前言 (X)1借助Spring 3.1实施Java EE 6 (1)1.1Java EE 6编程模型讨论 (1)1.1.1Java EE 6够敏捷,No! (1)1.1.2盘旋于具体与抽象之间 (2)1.2挖掘Spring 3.1的架构价值 (3)1.2.1精耕细作于Java EE 6平台 (3)1.2.2面向Spring的SpringSource Tool Suite集成开发工具 (3)1.2.3全面拥抱OSGi 4.2 (4)1.2.4开发者决定一切 (4)1.3下载及构建Spring 3.1 (5)1.3.1下载Spring 3.1正式发布版 (5)1.3.2基于SVN库持续构建Spring源码 (6)1.4小结 (7)2控制反转容器 (8)2.1DI及Spring DI概述 (8)2.1.1面向Java ME/Java SE的BeanFactory (8)2.1.2面向Java EE的ApplicationContext (9)2.2多种依赖注入方式 (9)2.2.1设值注入 (9)2.2.2构建器注入 (11)2.2.3属性注入 (12)2.2.4方法注入 (12)2.3借助Autowiring策略智能注入协作者 (13)2.3.1<bean/>元素的autowire属性 (13)2.3.2基于@Required注解加强协作者管理 (14)2.3.3基于@Autowired或@Inject注解的另一Autowiring策略 (16)2.3.4借助primary属性或@Qualifier注解细粒度控制Autowiring策略 (16)2.4资源操控 (19)2.5将DI容器宿主到Web容器中 (19)2.6外在化配置应用参数 (19)2.7Spring受管Bean的作用范围 (19)2.8Bean Validation集成支持 (19)2.9回调接口集合及触发顺序 (19)2.10<util/>命名空间 (20)2.11值得重视的若干DI特性 (20)2.11.1depends-on属性 (20)2.11.2别名(Alias) (20)2.11.3工厂Bean和工厂方法 (20)2.11.4<p/>命名空间 (21)2.11.5抽象和子Bean (21)2.12基于注解(Annotation)方式配置DI容器 (21)2.13Spring表达式语言(SpEL)支持 (22)2.13.1核心接口及类 (22)2.13.2基于API方式使用 (22)2.13.3基于XML方式使用 (22)2.13.4基于Annotation注解使用 (22)2.13.5SpEL语法速查 (22)2.14回调接口集合及其触发顺序 (22)2.14.1BeanNameAware回调接口 (22)2.14.2BeanClassLoaderAware回调接口 (23)2.14.3BeanFactoryAware回调接口 (23)2.14.4ResourceLoaderAware回调接口 (23)2.14.5ApplicationEventPublisherAware回调接口 (23)2.14.6MessageSourceAware回调接口 (23)2.14.7ApplicationContextAware回调接口 (23)2.14.8@PostConstruct注解 (23)2.14.9InitializingBean回调接口 (23)2.14.10<bean/>元素的init-method属性 (24)2.14.11@PreDestroy注解 (24)2.14.12DisposableBean回调接口 (24)2.14.13<bean/>元素的destroy-method属性 (24)2.15小结 (24)3面向切面编程 (25)3.1AOP及Spring AOP基础 (25)3.1.1细说AOP (25)3.1.2Spring AOP基础概念 (25)3.2AspectJ 6初探 (25)3.3老式Spring AOP (25)3.4基于@AspectJ的Spring AOP (26)3.5基于<aop:config/>元素的AOP (26)3.5.1巧用<aop:include/>元素 (26)3.6在AspectJ 6应用中启用@Configurable注解 (26)3.6.1显式使用AnnotationBeanConfigurerAspect切面 (26)3.6.2阐述@Configurable注解 (28)3.6.3通过META-INF/aop.xml(或aop-ajc.xml)控制启用的切面集合 (30)3.6.4<context:spring-configured/>元素 (31)3.6.5初探<context:load-time-weaver/>元素 (31)3.7小结 (31)4DAO层集成支持 (33)4.1RDBMS持久化操作抽象支持 (33)4.2.1JDBC最佳实践 (33)4.3事务集成支持 (33)4.4集成测试支持 (33)4.5在AspectJ 6应用中启用@Transactional注解 (33)4.6小结 (33)5Hibernate、JPA集成 (34)5.1Hibernate集成支持 (34)5.2JPA集成支持 (34)5.3智能处理Java EE容器中的装载期织入(LTW) (34)5.4小结 (35)6O/X Mapping集成支持 (36)6.1O/X Mapping集成支持 (36)6.1.1Marshaller及Unmarshaller接口 (37)6.2实践XMLBeans集成支持 (37)6.2.1借助Ant生成XMLBeans JAR (38)6.2.2XmlBeansMarshaller实现类 (39)6.2.3<oxm:xmlbeans-marshaller/>元素 (40)6.3小结 (40)7集成Java EE其他容器服务 (41)7.1简化JNDI操作 (41)7.2集成EJB 3.1 (41)7.3线程池及任务调度集成支持 (41)7.4集成JMS (41)7.5集成JavaMail (41)7.6集成分布式操作 (41)7.7集成JMX (42)7.8集成Java EE连接器架构 (42)8Web层集成支持 (43)8.1Spring Web MVC框架 (43)8.2Spring Portlet MVC框架 (43)8.3REST架构风格 (43)8.4小结 (43)9高级Spring 3.0特性 (44)9.1优雅销毁DI容器 (44)9.2小结 (44)10附录A:安装及使用SpringSource Tool Suite (45)10.1获得SpringSource Tool Suite (45)10.2安装SpringSource Tool Suite (45)10.3使用SpringSource Tool Suite (47)10.3.1针对Spring 3.1的支持 (47)10.3.2针对Spring Web Flow的支持 (49)10.3.3针对Spring Batch的支持 (50)10.3.4针对Spring Roo的支持 (50)11附录B:Spring 3.1内置的命名空间 (51)11.1<beans/>命名空间 (51)11.2<context/>命名空间 (51)11.3<util/>命名空间 (51)12附录C:Spring Web Services (52)12.1文档驱动的Web服务 (52)12.2面向OXM的Web服务实现策略 (52)12.3Web服务安全 (52)13附录D:Spring Web Flow (53)13.2探索Spring Web Flow (53)14附录E:Spring BlazeDS Integration (54)14.1Flex-RIA王者 (54)14.2简化BlazeDS的使用 (54)14.3深入到Spring BlazeDS Integration中 (54)15附录F:Spring Roo (55)15.1快速研发之道 (55)15.1.1Spring Roo概述 (55)15.2Spring Roo架构哲学 (55)15.3深入到Spring Roo中 (55)16附录G:相关资料 (56)16.1图书 (56)16.2网站 (56)序从2003年开始,开源Spring一直在同Java EE携手走来。
Spring Boot快速搭建Web应用并集成数据库在当今软件开发领域中,构建Web应用并与数据库集成是一个常见的需求。
Spring Boot作为一种流行的Java框架,提供了一种快速、简单的方式来搭建Web 应用并集成数据库。
本文将介绍如何使用Spring Boot快速搭建Web应用并将其与数据库集成起来。
第一部分:准备工作在开始之前,我们需要做一些准备工作。
首先,确保你已经安装了Java Development Kit(JDK)和一个集成开发环境(IDE),比如Eclipse或IntelliJ IDEA。
其次,确保你已经安装了一个数据库,比如MySQL或H2 Database。
最后,确保你已经安装了Spring Boot,并且能够顺利创建一个新的Spring Boot项目。
第二部分:创建一个新的Spring Boot项目首先,打开你的IDE,选择创建一个新的Spring Boot项目。
在创建项目的过程中,确保选择Web和JPA作为项目的依赖。
Web依赖会提供基本的Web应用支持,而JPA依赖则会提供与数据库的集成支持。
一旦项目创建完成,你会得到一个包含了一些基本文件和目录的项目结构。
在这个项目中,我们将会编写我们的Web应用并将其与数据库集成起来。
第三部分:编写Web应用首先,我们将创建一个简单的实体类来表示我们数据库中的表。
比如,我们可以创建一个名为User的实体类,并为其定义一些属性,比如id、name和email。
@Entitypublic class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(nullable = false)private String name;@Column(nullable = false)private String email;// Getters and setters}接下来,我们将创建一个用来处理HTTP请求的Controller类。
--src|-com.ssm|-action|-LoginAction.java|-entity|-User.java|-iface|-IUserDao.java|-impl|-UserDao.java|-seriface|-IUserServices.java|-impl|-UserServices.java|-sqlmap|-User.xmlapplicationContext.xmldatabase.Propertieslog4j.PropertiesmyBatis-config.xmlstruts.Propertiesstruts.xmlok直接上代码了:Action类: LoginAction.javapackage com.ssm.action;import java.util.ArrayList;import java.util.List;import com.opensymphony.xwork2.Action;import er;import com.ssm.seriface.IUserService;public class LoginAction implements Action{private User user;private IUserService userServices;public void setUserServices(IUserService userServices) {erServices = userServices;}public User getUser(){return user;}public void setUser(User user){er = user;}public String execute() throws Exception{String aaa= getUser().getId()+"";List userList= new ArrayList();userList= userServices.selectUserById(getUser().getId()); if(userList.size()>0){return Action.SUCCESS;}else{return Action.ERROR;}}}实体类User.javapackage com.ssm.entity;import java.io.Serializable;import java.util.Date;public class User implements Serializable{private int id;private String name;private String password;private Date birthday;public User(){}public User(String name, String password, Date birthday) {= name;this.password= password;this.birthday= birthday;}public int getId(){return id;}public void setId(int id){this.id = id;}public String getName(){return name;}public void setName(String name){ = name;}public String getPassword(){return password;}public void setPassword(String password){this.password = password;}public Date getBirthday(){return birthday;}public void setBirthday(Date birthday){this.birthday = birthday;}}IUserDao接口类IUserDao.javapackage com.ssm.iface;import java.util.List;public interface IUserDao{public boolean userVaild(String name, String password);public List selectUserById(int id);}UserDaoImpl实现接口类:UserDaoImpl.javapackage com.ssm.iface.impl;import java.util.List;import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; import com.ssm.iface.IUserDao;//import com.ssb.baseutil.SqlMapClientDaoSupport;//import com.ssb.iface.IUserDao;//import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; public class UserDaoImpl extends SqlMapClientDaoSupport implements IUserDao {public List selectUserById(int id){// TODO Auto-generated method stubreturn getSqlMapClientTemplate().queryForList("selectUserById", id);}public boolean userVaild(String name, String password){// TODO Auto-generated method stubreturn false;}/*public boolean userVaild(String name, String password){return false;}public List selectUserById(String id){return getSqlMapClientTemplate().queryForList("getUserById", id);}*/}业务类IUserServices.javapackage com.ssm.seriface;import java.util.List;public interface IUserService{public boolean userVaild(String name, String password); public List selectUserById(int id);}UserServicesImpl.javapackage com.ssm.seriface.impl;import java.util.List;import com.ssm.iface.IUserDao;import com.ssm.seriface.IUserService;public class UserServiceImpl implements IUserService{private IUserDao serviceUserDao= null;public IUserDao getServiceUserDao(){return serviceUserDao;}public void setServiceUserDao(IUserDao serviceUserDao) {this.serviceUserDao = serviceUserDao;}public List selectUserById(int id){// TODO Auto-generated method stubreturn serviceUserDao.selectUserById(id);}public boolean userVaild(String name, String password){// TODO Auto-generated method stubreturn erVaild(name, password);}}mybatis实体配置文件User.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC"-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="user"><resultMap type="User" id="userResultMap"><id property="id" column="ID"/><result property="name" column="NAME"/><result property="password" column="PASSWORD"/><result property="birthday" column="BIRTHDAY"/></resultMap><select id="selectUserById" parameterType="ng.String" resultType="User"><![CDATA[SELECT * FROM USER SUWHERE SU.ID = #{id}]]></select></mapper>sprng配置文件applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p" xmlns:context="/schema/context"xmlns:jee="/schema/jee" xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/jee/schema/jee/spring-jee-2.5.xsd/schema/tx/schema/tx/spring-tx-2.5.xsd"><!-- 数据源属性配置文件--><!-- <bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location" value="classpath:com/databaseconfig/database.properties"/></bean>--><context:property-placeholder location="classpath:database.properties"/><bean id="dataSource" class="boPooledDataSource"><property name="driverClass" value="${jdbc.driverClassName}" /><property name="jdbcUrl" value="${jdbc.url}" /><property name="user" value="${ername}" /><property name="password" value="${jdbc.password}" /><property name="autoCommitOnClose" value="true"/><property name="checkoutTimeout" value="${cpool.checkoutTimeout}"/><property name="initialPoolSize" value="${cpool.minPoolSize}"/><property name="minPoolSize" value="${cpool.minPoolSize}"/><property name="maxPoolSize" value="${cpool.maxPoolSize}"/><property name="maxIdleTime" value="${cpool.maxIdleTime}"/><property name="acquireIncrement" value="${cpool.acquireIncrement}"/><property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}"/> </bean><!-- 数据连接管理--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- myBatis文件--><!--<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:myBatis-config.xml"/></bean>--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:myBatis-config.xml"/><property name="dataSource" ref="dataSource"/></bean><!-- ibatis2.x 配置<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"><property name="configLocation" value="classpath:myBatis-config.xml"/><property name="dataSource" ref="dataSource"/></bean>--><bean id="mapDao" class="org.mybatis.spring.MapperFactoryBean"><!-- 这里是接口,不是接口实现类了--><property name="mapperInterface" value="com.ssm.iface.IUserDao"/><property name="sqlSessionFactory" ref="sqlSessionFactory"/></bean><bean id="userServices" class="erServiceImpl"><property name="serviceUserDao" ref="mapDao"/></bean><bean id="LoginAction" class="com.ssm.action.LoginAction"><property name="userServices" ref="userServices"/></bean></beans>数据库连接属性配置文件(其实可以不用这么复杂)database.Propertiesjdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/ddtest?characterEncoding=utf8 ername=rootjdbc.password=123cpool.checkoutTimeout=5000cpool.minPoolSize=20cpool.maxPoolSize=50cpool.maxIdleTime=7200cpool.maxIdleTimeExcessConnections=1800cpool.acquireIncrement=10log4j 随便到log4j里copy一个吧mybatis-config.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC"-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias alias="User" type="er"/></typeAliases><mappers><mapper resource="com/ssm/sqlmap/User.xml" /></mappers></configuration>struts配置文件struts.Properties##整合spring的struts.objectFactory=springeClassCache = truestruts.locale=zh_CNstruts.i18n.encoding=GBKstruts的Action配置文件struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="style" extends="struts-default"><!--<action name="loginAction" class="sys.style.design.action.LoginAction"> <result name="success">success.jsp</result><result name="error">error.jsp</result></action>--><action name="loginAction" class="com.ssm.action.LoginAction"><result name="success">success.jsp</result><result name="error">error.jsp</result></action></package></struts>。
Redis+Spring整合前言Redis是一个key-value存储系统。
和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。
redis的出现,很大程度补偿了memcached这类key/value 存储的不足,在部分场合可以对关系数据库起到很好的补充作用。
它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
Redis支持主从同步。
数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
这使得Redis可执行单层树复制。
存盘可以有意无意的对数据进行写操作。
由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。
同步对读取操作的可扩展性和数据冗余很有帮助。
redis的官网地redis.iospring+redis集成实例1. 所需jar文件spring-data-redis-1.4.2.RELEASE.jar、jedis-2.5.2.jar2. spring配置redis我们需要创建一个新的CacheManager bean来管理redis缓存,Redis不是应用的共享内存,它只是一个内存服务器,因此我们需要将应用连接到它并使用某种“语言”进行交互,因此我们还需要一个连接工厂。
Struts2+Spring3+Hibernate3 集成 目 录 1.Struts2集成 ..................................................... 11.1. 把Struts提供的jar包拷贝到/WEB-INF/lib/目录下 (1)1.2. 在web.xml中配置Struts的过滤器 (2)2.Struts2开发 ..................................................... 22.1 编写Struts Action程序,需要继承ActionSupport (2)2.2 创建struts.xml的Action映射文件 (3)3.Struts2+Spring集成 .............................................. 33.1 按第1步“Struts2集成”方法集成Struts2 (3)3.2 再把Struts的Spring插件把拷贝到/WEB-INF/lib/目录下 (3)3.3 把Spring提供的jar拷贝到/WEB-INF/lib/目录下 (3)3.4 web.xml配置Spring的过滤器 (3)3.5 创建applicationContext.xml配置文件 (4)4.Struts2+Spring+Hibernate集成 ..................................... 54.1 先按照“Struts2+Spring集成”方法执行 (5)4.2 导入Apache Commons几个jar包 (5)4.3 导入Hibernate几个jar包 (5)4.4 数据库的JDBC驱动 (5)4.5 在applicationContext.xml中加入如下的配置 (5)4.6 创建hibernate.cfg.xml文件 (6)5.Struts2+Spring+Hibernate开发 ..................................... 65.1 编写Model类 (6)5.2 编写Model类的HBM映射文件 (7)5.3 在applicationContext.xml中指定HBM映射文件路径 (8)5.4 编写DAO接口和实现类程序,并继承HibernateDaoSupport (8)5.5 在applicationContext.xml中配置DAO Bean (10)6.注意事项 ....................................................... 101. Struts2集成1.1.把Struts提供的jar包拷贝到/WEB-INF/lib/目录下Struts需要如下几个包:解压:struts-2.2.3.1-lib.zip需要:struts2-core-2.2.3.1.jarxwork-core-2.2.3.1.jarognl-3.0.1.jarfreemarker-2.3.16.jarjavassist-3.11.0.GA.jar和所有以“commons-”开头的包。
获得Spring的系统库包文件1、下载Spring的系统库包(1)进入到Spring的下载包有两种,一种是带有“with-dependencies”名称的,这种包含了Spring常用到的第三方包,比如Hibernate、aopalliance、jakarta-commons等。
这里就使用了这种包,可以省却查找第三方包的麻烦。
(2)解压其*.zip文件(3)所需要的*.jar包在其\dist和\lib目录下,包含有所需要的库●dist/spring.jar●lib/jakarta-commons/commons-logging.jar●lib/log4j/log4j-1.2.9.jar(4)参考文档解压这个包,可以在 docs\reference目录下找到Spring 的参考手册,有html和pdf两种格式。
如果你的英文不太好,可以看看Spring中文论坛翻译的1.1版本的中文版(pdf格式)。
这个参考手册就是入门的不二法宝。
(5)Spring中的主要的*.jar包文件的作用(注意:不同的版本可能会由差别!)2、将Spring的系统库包文件添加到JBuilder中(1)主要涉及spring.jar、commons-logging.jar和log4j-1.2.9.jar在JBuilder 中创建Spring的J2SE的应用1、新建一个J2SE 的 Project(1)名称为SpringJ2SEApp(2)不需要服务器的设置2、在该Project中添加一个应用的主类名称为SpringApplication,包名称为springj2seapp删除所产生的Java Swing的窗口类只需要主类package springj2seapp;public class SpringApplication{public SpringApplication(){}public static void main(String[] args){new SpringApplication();}}执行该J2SE应用,以观察是否有错误(只要能够正常执行就可以)3、构建Spring基础代码(1)添加一个接口Action该Action 接口定义了一个execute 方法,在我们示例中,不同的Action 实现提供了各自的execute 方法,以完成目标逻辑处理的功能。
一、spring及ibatis的简介关于spring和ibatis的介绍在这里就不多说了,具体的简介及应用可以参考我前面的两篇文章:《ibatis的简介与初步搭建应用》,《spring的简介与初步搭建应用》,这里主要结合两者,搭建起集成环境,并演示简单的实例应用。
二、集成环境的搭建下图是我的搭建图(一)、Dao层搭建这里Dao层的搭建就是指Dao层接口,即Mapper接口的创建,和我《ibatis的简介与初步搭建应用》这篇文章里的是相同的,你也可以参考那里面的:1.表结构的创建,SQL如下:CREATE TABLE goods (id int(11) NOT NULL DEFAULT '0',category_id int(11) DEFAULT NULL,name varchar(100) DEFAULT NULL,price decimal(10,0) DEFAULT NULL,description varchar(100) DEFAULT NULL,acount int(11) DEFAULT NULL,update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id))导入两条数据:INSERT INTO goods VALUES (1,1,'Nokia-L900',3010,'Windows7 Mobile Phone',1,'2012-06-22 14:09:18');INSERT INTO goods VALUES (2,1,'Moto-525',1800,'Andriod 2.2',15,'2012-06-23 01:19:36');2.创建表所对应的domain对象package com.csdn.kane.domain;import java.sql.Timestamp;public class Goods {private int id;private int categoryId;private String name;private float price;private String description;private int acount;private Timestamp updateTime;public int getId() {return id;}public void setId(int id) {this.id = id;}public int getCategoryId() {return categoryId;}public void setCategoryId(int categoryId) {this.categoryId = categoryId;}public String getName() {return name;}public void setName(String name) { = name;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public String getDescription() {return description;}public void setDescription(String description) { this.description = description;}public int getAcount() {return acount;}public void setAcount(int acount) {this.acount = acount;}public Timestamp getUpdateTime() {return updateTime;}public void setUpdateTime(Timestamp updateTime) { this.updateTime = updateTime;}}创建Dao层接口,用来提供Dao层操作,在本应用中为GoodsDao接口package com.csdn.kane.dao;import org.apache.ibatis.annotations.Select;import com.csdn.kane.domain.Goods;public interface GoodsDao {@Select("select * from Goods where id=#{id}")public Goods selectGoodsById(int id);}4. ibatis的配置文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias type="com.csdn.kane.domain.Goods"/></typeAliases></configuration>因为这里集成了spring,所以在ibatis的配置文件中不再配置数据源,而是将其配置在spring的配置文件中,同时也不再配置GoodsDao接口,而是由spring的annotation来自动创建该bean,所以ibatis的配置文件只包含domain的配置。
(二)、Service层搭建这里Service层的搭建就是指service层的接口及实现类的创建。
1.service接口package com.csdn.kane.service;import com.csdn.kane.domain.Goods;public interface GoodsService {public Goods selectGoodsById(int id);}2.service接口的实现类package com.csdn.kane.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.csdn.kane.dao.GoodsDao;import com.csdn.kane.domain.Goods;@Service("goodsService")public class GoodsServiceImpl implements GoodsService {@Autowiredprivate GoodsDao goodsDao;@Overridepublic Goods selectGoodsById(int id) {Goods goods = new Goods();goods = goodsDao.selectGoodsById(id);return goods;}}正如看到的,在service的实现类中,我们将Dao层接口通过@Autowried注解来引入,方法中调用了Dao层接口,通过Dao层来获取数据,因为Dao层是直接和数据库打交道的。
同时我们将该service实现类通过@Service("goodsService")注解来自动引入,而不用在配置文件中配置了。
3.spring的配置文件<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:tx="/schema/tx"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/tx/sche(参考:)ma/tx/spring-tx-3.0.xsd/schema/context/schema/context/spring-context.xsd"><bean id="dataSource" class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property><property name="url"><value>jdbc:mysql://127.0.0.1:3306/XiaoQingTest</value></property><property name="username"><value>root</value></property><property name="password"><value>08073440</value></property><property name="maxActive"><value>255</value></property><property name="maxIdle"><value>2</value></property><property name="maxWait"><value>120000</value></property></bean><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager "><property name="dataSource" ref="dataSource" /></bean><!-- enable autowire --><context:annotation-config /><!-- (Annotation方式配置services)enable component scanning (beware that thisdoes not enable mapper scanning!) --><context:component-scan base-package="com.csdn.kane.service" /><!-- enable transaction demarcation with annotations --><tx:annotation-driven /><!-- define the SqlSessionFactory, notice that configLocation is not needed when you use MapperFactoryBean --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="com/csdn/kane/dao/mybatis-config.xml" /></bean><!-- scan for mappers and let them be autowired --><beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- Mapper接口所在包名,Spring会自动查找其下的Mapper --><property name="basePackage" value="com.csdn.kane.dao" /></bean><!-- more bean definitions go here --><!--<bean id="goodsService" class="com.csdn.kane.service.GoodsServiceImpl" />--></beans>首先我们配置了数据源,原本在ibatis中配置的数据源已省去,通过spring来进行数据源配置及事务管理。