Struts spring ibatis的集成(连载一)---转

关键词:

      ibatis

 

       ibatis集成spring

 

       dwr集成spring

 

 

 

内容:

       当前软件开发中ssh框架集成司空常见,相信大家都会做。ibatis是一种非常优秀的持久层框架,那么ibatis如何与spring集成在一起呢。注意我没有明确说ibatisstruts集成在一起,原因在于sshstrutsspring的集成,在ss+ibatis中没有区别。

 

1.         Strutsspring的集成

很多时候,我使用dwr(ajax框架)。所以我使用监听器的方式集成strutsspring以利于dwrspring集成

web.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"

       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

       <servlet>

              <servlet-name>action</servlet-name>

              <servlet-class>

                     org.apache.struts.action.ActionServlet

              </servlet-class>

              ……..

       </servlet>

       <servlet-mapping>

              <servlet-name>action</servlet-name>

              <url-pattern>*.do</url-pattern>

       </servlet-mapping>

 

       <!-- dwr框架 -->

       <servlet>

              <servlet-name>dwr-invoker</servlet-name>

              <servlet-class>

                     org.directwebremoting.servlet.DwrServlet

              </servlet-class>

              <init-param>

                     <param-name>debug</param-name>

                     <param-value>true</param-value>

              </init-param>

       </servlet>

       <servlet-mapping>

              <servlet-name>dwr-invoker</servlet-name>

              <url-pattern>/dwr/*</url-pattern>

       </servlet-mapping>

 

       <!-- spring集成struts -->

       <context-param>

              <param-name>contextConfigLocation</param-name>

              <param-value>

              /WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,/WEB-INF/bo-dao.xml

              </param-value>

       </context-param>

       <listener>

              <listener-class>

                     org.springframework.web.context.ContextLoaderListener

              </listener-class>

       </listener>

       ……..

</web-app>

 

dwr.xml的使用

dwr框架可以直接使用spring容器里的BO bean

本例中findAll( )方法返回客户的list

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">

<dwr>

       <allow>

              <create creator="spring" javascript="JCustomer">

                     <param name="beanName" value="customerBO" />

                     <include method="findAll"/>

              </create>

              <convert converter="bean" match="com.esale.to.CustomerTO"></convert>

       </allow>

</dwr>

 

2.         ibatishibernate的横向比较之我见

两者都是优秀的持久层框架。Hibernate是对象关系映射产品(orm),全自动的。ibatis的作者认为ibatis是一种半自动的数据映射器框架(data mapper)

       使用hibernate的人,不需要了解sql,除非你基于性能的考虑,例如hibernate的分页性能就比较差,原因在于hibernate要查询出所有的记录而不是当前页的记录。

       使用ibatis的人需要熟练sql,项目中大量的查询让sql高手使用ibatis的时候如鱼得水,极致性能。

 

       核心区别我的理解:

       select * from users where username=? and password=?;

这是一条sql语句,ibatis把这条sql语句映射为函数,usernamepassword的实际值作为函数参数,返回值做为一个实体对象或者实体对象的列表,就是查询结果集的封装。

       hibernate不关心sql语句,sql由框架来生成。它关心表和类的对应关系,称之为映射。

比如tbl_user表对应UserTO(传输值类),表中的列一一对应实体类的属性。类和表的映射关系一旦建立。类等于表,表中的一条记录就是类的一个实例对象。只不过这个对象可能处于transientpersistant或者detached状态。

       开发中hibernate对增加删除和修改有利,对复杂查询不利。

       ibatiscrud操作都比较好,对高性能和高难度的查询更加有利,唯一的缺点在于半自动化。

      

 

3.         ibatisspring的集成

 

3.1  SqlMapConfig.xml相当于hibernate.cfg.xml文件,数据源由spring管理,看后面

 

<?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/eHome/dao/impl/User.xml" />

       <sqlMap resource="com/eHome/dao/impl/Article.xml" />

</sqlMapConfig>

 

 

 

 

3.2  User.xmlUserDAOImpl.java相当于hibernate的实体类与实体类的映射文件

 

<?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="user">

       <typeAlias alias="userTO" type="com.eHome.entity.UserTO" />

       <select id="selectByUserName" resultClass="userTO"

              parameterClass="string">

              select * from users where userName=#userName#

       </select>

 

       <insert id="insert" parameterClass="userTO">

              insert into users values(#userName#,#password#,#realName#,#sex#)

              <selectKey resultClass="int" keyProperty="userId">

                     SELECT @@IDENTITY AS userId

              </selectKey>

       </insert>

</sqlMap>

 

 

public class UserDAOImpl extends SqlMapClientDaoSupport implements UserDAO {

       /**

        * 根据用户名查找一名用户

        */

       public UserTO findByUserName(String userName) {

              UserTO user = (UserTO) this.getSqlMapClientTemplate().queryForObject(

                            "user.selectByUserName", userName);

              return user;

       }

       /**

        * 保存一个用户

        */

       public Integer save(UserTO user) {

              return (Integer) this.getSqlMapClientTemplate().insert("user.insert", user);

       }

}

 

注意红色部分配置文件中sql语句与dao方法的对应关系。

 

3.3 最后spring集成ibatis

 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

       <!-- 数据源 -->

       <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">

              <property name="driverClassName"

                     value="net.sourceforge.jtds.jdbc.Driver">

              </property>

              <property name="url"

                     value="jdbc:jtds:sqlserver://localhost:1433/ownHome">

              </property>

              <property name="username" value="sa"></property>

              <property name="password" value="ok"></property>

       </bean>

       <!-- 相当于hibernate会话工厂的sqlMapClient -->

       <bean id="sqlMapClient"

              class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

              <property name="configLocation">

                     <value>classpath:com/eHome/dao/SqlMapConfig.xml</value>

              </property>

              <property name="dataSource">

                     <ref bean="ds" />

              </property>

       </bean>

       <!-- hibernatedao类依赖会话工厂,此处 -->

       <bean id="userDAO" class="com.eHome.dao.impl.UserDAOImpl"

              abstract="false" lazy-init="default" autowire="default"

              dependency-check="default">

              <property name="sqlMapClient">

                     <ref bean="sqlMapClient" />

              </property>

       </bean>

       <!—bodao的依赖 -->

       <bean id="userBO" class="com.eHome.service.UserBO" abstract="false"

              lazy-init="default" autowire="default" dependency-check="default">

              <property name="userDAO">

                     <ref bean="userDAO" />

              </property>

       </bean>

……

</beans>

 

 

今天到此,大家有什么问题与我讨论,lily_c_@126.com联系我。

北大青鸟-中博www.njaccp.com

转载于:https://www.cnblogs.com/TitanNJ/archive/2009/05/26/1489329.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值