`
jd2bs
  • 浏览: 13220 次
文章分类
社区版块
存档分类
最新评论

Spring ibatis struts review

 
阅读更多
Spring:
1)Ioc
2)AOP
3)BeanFactory, DI
4)DispatcherServlet: handlerMapping,return ModelAndView,viewResolver

Struts:
1)ActionServlet
2)Struts-config.xml: FormBean,ActionMapping
3)Action.execute(),return ActionForward.


ibatis:


<beans>
    <bean id="sqlMapTransactionManager" 
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <bean id="sqlMapTransactionTemplate" 
        class="org.springframework.transaction.support.TransactionTemplate">
        <property name="transactionManager" ref="sqlMapTransactionManager"/>
    </bean>
    <!--sql map -->
    <bean id="sqlMapClient" 
        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="com/mydomain/data/SqlMapConfig.xml"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <bean id="dataSource" name="dataSource" 
        class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@10.1.5.11:1521:XE"/>
        <property name="username" value="junshan"/>
        <property name="password" value="junshan"/>
        <property name="maxActive" value="20"/>
    </bean>
    <bean id="accountDAO" class="com.mydomain.AccountDAO">
        <property name="sqlMapClient" ref="sqlMapClient"/>
        <property name="sqlMapTransactionTemplate" ref="sqlMapTransactionTemplate"/>
    </bean>
</beans>


public class SimpleTest {
    public static void main(String[] args) {
        ApplicationContext factory = 
        new ClassPathXmlApplicationContext("/com/mydomain/data/applicationContext.xml");
        final AccountDAO accountDAO = (AccountDAO) factory.getBean("accountDAO");
        final Account account = new Account();
        account.setId(1);
        account.setFirstName("tao");
        account.setLastName("bao");
        account.setEmailAddress("junshan@taobao.com");
        account.setDate(new Date());
        try {
            accountDAO.getSqlMapTransactionTemplate().execute(new TransactionCallback(){
                    public Object doInTransaction(TransactionStatus status){
                        try{
                            accountDAO.deleteAccount(account.getId());
                            accountDAO.insertAccount(account);
                            //account.setLastName("bobo");
                            //accountDAO.updateAccount(account);
                            Account result = accountDAO.selectAccount(account);
                            System.out.println(result);
                            return null;
                        } catch (Exception e) {
                            status.setRollbackOnly();
                            return false;
                        }
                    }
                });
            //accountDAO.getSqlMapClient().commitTransaction();
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
}


关于spring+ibatis sharding方案的实现:
1)根据ID和路由规则确定TargetDataSource
因为一般DaoImpl会下面这样实现,因此可以写一个类ShardSqlMapClientDaoSupport继承SqlMapClientDaoSupport,然后根据ID和路由规则确定TargetDataSource,调用setDataSource(TargetDataSource)方法。这样数据源的路由问题(就是分库)就解决了。

2)接下来看怎么实现sql中的分表。
a 首先根据id和路由规则确定表名table
b 因为如下面代码所示SqlMapClientTemplate的insert和queryForObject等方法都是通过callback来做的,这里只传一个statementName过去,具体的跟statement替换变量相关的代码都在ibatis包里,所以这里替换表名的工作还不是很好做。
c 那怎么办呢?通过搜索看到ibatis从3.0开始提供了Plugin接口,可以对执行的sql进行拦截,这样就可以把表名根据规则替换上去了。但是由于我们使用的是ibatis早期版本,升级的代价比较大,因此最后只在某些新项目使用了这个分表逻辑。
关于Plugin怎么使用看我的收藏夹最新文章。

3)如果查询条件中不含id,比如根据name查或动态条件查,特别是可能还需要分页,排序,group by,count等会比较麻烦,这种情况只能把sql发送到各个dataSource然后在应用端进行Merge。  没办法,Sharding是有代价的。


package com.lanp.dao;  
  
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;  
  
import com.lanp.beans.Student;  
  
public class StudentDaoImpl extends SqlMapClientDaoSupport implements StudentDao {  
  
    @Override  
    public Student getStudent(String name) {  
        try{  
            return (Student)getSqlMapClientTemplate().queryForObject("queryStudentById", name);  
        } catch(Exception e) {  
            e.printStackTrace();  
        }  
        return null;  
    }  
  
}

  

public Object queryForObject(final String statementName, final Object parameterObject)
			throws DataAccessException {

		return execute(new SqlMapClientCallback() {
			public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
				return executor.queryForObject(statementName, parameterObject);
			}
		});
	}

public Object insert(final String statementName, final Object parameterObject)
			throws DataAccessException {

		return execute(new SqlMapClientCallback() {
			public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
				return executor.insert(statementName, parameterObject);
			}
		});
	}
分享到:
评论

相关推荐

    spring+struts2+ibatis整合的jar包

    在Java Web开发中,Spring、Struts2和iBatis是三个非常重要的框架,它们各自在不同的层面上提供了强大的功能。Spring是一个全面的后端应用框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等功能;Struts...

    spring ibatis struts2搭建例子

    在IT行业中,Spring、iBatis和Struts2是三个非常重要的开源框架,它们分别在不同的层面上解决了Java Web开发中的问题。这篇文章将详细介绍如何利用这三个框架构建一个完整的Web应用程序。 首先,Spring是一个全面的...

    spring+ibatis+struts2.0 的jar

    包含了spring ibatis struts2.0整合需要的jar包 有需要的就下吧

    Struts2 Spring Hibernate IBatis

    Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatisStruts2 ...

    Struts2+Spring+iBATIS架构实现

    Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现

    spring3 ibatis struts2 搭建的简单项目

    在IT行业中,构建Web应用程序是一项常见的任务,而Spring、iBatis和Struts2是三个非常流行的开源框架,它们在Java EE开发中扮演着重要角色。这个“spring3 ibatis struts2 搭建的简单项目”就是一个利用这三个框架...

    Ibatis+Spring+struts1框架搭建

    【标题】:Ibatis+Spring+Struts1框架搭建 在Web开发中,Ibatis、Spring和Struts1是三个非常重要的组件,它们分别负责不同的职责。Ibatis是一个优秀的持久层框架,Spring是一个全面的后端应用框架,而Struts1则是一...

    struts1 spring ibatis整合项目源码

    struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码

    spring+struts+ibatis

    标题中的"spring+struts+ibatis"是指一种经典的Java Web开发架构,也被称为SSM框架。这个架构结合了Spring框架、Struts2框架和iBatis(现在称为MyBatis)来构建高效且可维护的Web应用。下面将详细阐述这三个框架以及...

    ibatis spring struts 整合案例

    在这个特定的案例中,我们关注的是"Ibatis Spring Struts"的整合。这三个框架分别是:Ibatis(一个轻量级的持久层框架),Spring(一个全面的企业级应用开发框架),以及Struts(一个用于构建MVC(Model-View-...

    Spring+Struts+ibatis讲解

    在Spring+Struts+ibatis这种经典的Java Web开发框架组合中,主要涉及到三层架构:表现层(Action)、业务逻辑层(Service)和数据访问层(DAO)。这些组件协同工作,实现了应用程序的功能。以下是对各部分的详细解释...

    Spring struts ibatis Mysql 集成

    在IT行业中,集成Spring、Struts和iBatis与MySQL是构建企业级Java Web应用程序的常见选择。这个项目集成了Spring 2.5.5、Struts 2.1.6、iBatis 2.3.4以及MySQL 5.1数据库,使用IntelliJ IDEA 9作为开发环境。下面将...

    基于maven的struts+spring+ibatis(ssi)经典配置

    【标题】:“基于maven的struts+spring+ibatis(SSI)经典配置” 这篇教程主要探讨了如何在Java Web开发中使用Maven构建一个整合Struts2、Spring和iBatis的项目,通常称为“SSI”框架。Maven是一个项目管理和综合...

    iBATIS_Spring_struts_demo.rar_DEMO_Struct spring ibatis_ibatis j

    标题中的“iBATIS_Spring_struts_demo.rar_DEMO_Struct spring ibatis_ibatis j”表明这是一个关于集成iBATIS、Spring和Struts的演示项目。这个DEMO旨在展示如何在Java应用中有效地整合这三个框架,从而实现数据持久...

    spring、struts、ibatis框架搭建流程

    ### Spring、Struts、iBatis框架搭建流程详解 #### 一、框架下载与准备 在构建基于Spring、Struts和iBatis的项目时,首先需要下载这些框架的最新版本,并进行相应的准备工作。 ##### 1. Struts2框架 Struts2是一...

    spring struts ibatis 开发框架

    Spring、Struts和iBatis是Java开发领域中经典的三大开源框架,它们分别在不同的层次上解决了企业级应用开发中的问题。Spring作为一个全面的轻量级框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,极大地...

    struts2+spring+ibatis做的增删改查的小例子

    Struts2、Spring和iBatis是Java Web开发中三个非常重要的开源框架,它们的集成应用,即SSI2(Struts2 + Spring + iBatis)整合,是构建企业级应用的常见方式。这个"struts2+spring+ibatis做的增删改查的小例子"是一...

    Spring-Struts-IBatis-AOP-Transaction

    在 "17-Prj-Spring-Struts-IBatis-AOP-Transaction" 这个项目中,这四个框架被集成在一起,形成一个强大的 web 应用开发解决方案。Spring 作为整个系统的基石,负责依赖注入和事务管理;Struts 2 处理 HTTP 请求,...

    spring + struts + ibatis

    Spring、Struts和iBatis是Java开发中的经典组合,常被称为"SSI"架构,用于构建企业级Web应用程序。这个组合充分利用了各自框架的优势,提供了一个强大的、灵活的和可扩展的解决方案。 Spring框架是核心,它是一个...

    Struts2+Spring2+iBatis2+MySQL的完整示例

    开发环境说明 ...本示例完整地结合Struts2+Spring2+iBatis2+MySQL5,演示了一个用户表的增、删、改、查。 想完整学习Struts2+Spring+iBatis的同仁,可以在这个例子中学习或模仿最基本也是最核心的技术要点。

Global site tag (gtag.js) - Google Analytics