struts2_spring_ibatis3.0整合

好久没弄过struts2 和spring了 基本上都忘记了。

温习下 还有第一次接触的 ibatis 3.0 以前的版本没接触过,不过网上找的资料基本上都是2.多的版本

所以我发个3.0的让发家瞧一下呵呵。

这里需要 ibaits3.0的jar包 大家可以在这里下载

spring ibatis 所需jar包http://code.google.com/p/mybatis/downloads/detail?name=mybatis-spring-1.0.1-bundle.zip

 ibatis 3.的中文PDF 全部复制进去 包括空格部分

http://code.google.com/p/mybatis/downloads/detail?name=MyBatis 3 User Guide Simplified Chinese.pdf

 

 

 

<filter>
		<filter-name>struts2</filter-name>
		<filter-class>
		   <!-- struts2的请求是通过拦截器处理的 -->
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<listener>
		<listener-class>
		  <!-- 加载spring文件的监听器 -->
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

 

然后是 用 spring来配置bean类 以及加载 ibatis文件

 

 

 

	<!-- 配置数据库 -->
	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName">
			<value>oracle.jdbc.driver.OracleDriver</value>
		</property>
		<property name="url">
			<value>jdbc:oracle:thin:@10.38.146.158:1521:oracle</value>
		</property>
		<property name="username">
			<value>scott</value>
		</property>
		<property name="password">
			<value>tiger</value>
		</property>
	</bean>
	
	<!-- pojo -->
	<bean id="empAction" class="com.test.action.EmpAction">
	   <property name="empDao" ref="empDao"></property>
	</bean>
	
	
	
	<!-- 加载 abities
	 SqlSessionFactoryBean 这里是与ibatis以前版本区别的地方
	 这里不是继承 sprig的FactoryBean 因为spring的版本没有更新 由ibatis jar包自己开发类继承了
	 spring的FactoryBean类
	 另外必备属性:dataSource 
	  -->
	<bean id="sqlMapClient"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource">
			<ref local="dataSource" />
		</property>
		<!-- 加载ibatis配置文件的路径
		name的属性有两个:
	  	 configLaction 对应 ibatis的环境配置文件处理
		 mapper 对应的是ibatis  与数据库映射的设置。
		   -->		
	  	<property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
	  	<!--<property name="mapperLoaction" value="classpath*:com.test.map.*.xml"></property>  -->
	</bean>
	
	<!-- 把加载了 配置文件的 sqlMapClient 注入 SqlSessionTemplate模板-->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlMapClient" />
    </bean>
    
    <!-- 通过spring 把已经加载ibatis配置文件sqlMapClient bean 注入到 dao类 供
	dao类查询数据 -->
    <bean id="empDao" class="com.test.dao.impl.EmpDao">
	  <!-- 使用构造器注入 -->
	  <constructor-arg ref="sqlSession" />
	</bean>

 

 

 

 

接下来是配置 SqlMapConfig.xml

 

<configuration>

   
   <!-- 对应一些POJO类 然后可以在mapper中引用Emp 等就等于引用这个类类型-->
	<typeAliases>
		<typeAlias type="com.test.map.Emp" alias="Emp" />
		<typeAlias type="com.test.map.Salary" alias="Salary" />
		<typeAlias type="com.test.map.Dept" alias="Dept" />
	</typeAliases>

	<!--  这里本来是用 ibatis配置数据库的 因为我用spring管理了数据库连接
		所以这一部分就省略了
		resource="conf/database.properties 这个文件对应的是数据库连接
		的相关信息:
		
		oracle.database.driver=oracle.jdbc.driver.OracleDriver
		oracle.database.url=jdbc:oracle:thin:@10.38.146.158:1521:oracle
		oracle.database.user=scott
		oracle.database.password=tiger
		
		
		<properties resource="conf/database.properties" />
		下面是一些环境的配置 具体含义见我发个大家的文档把
		<environments default="development">  
		<environment id="development">  
		<transactionManager type="JDBC"/>  
		<dataSource type="POOLED">  
		<property name="driver" value="${oracle.database.driver}"/>  
		<property name="url" value="${oracle.database.url}"/>  
		<property name="username" value="${oracle.database.user}"/>  
		<property name="password" value="${oracle.database.password}"/>  
		</dataSource>  
		</environment>  
		</environments> 
	-->
	<!-- 加载相关ibatis的映射文件 -->
	<mappers>
		<mapper resource="com/test/map/emp.xml" />
		<mapper resource="com/test/map/dept.xml" />
		<mapper resource="com/test/map/procedure.xml" />
	</mappers>

</configuration>

 

然后是配置映射 emp.xml

 

<mapper namespace="empspace">


	<!--id:java要调用的时候引用包名+id即可 如empspace.login
		parameterType 传入参数类型:Emp Emp是刚才在
		<typeAlias type="com.test.map.Emp" alias="Emp" />设置的
		resutlType 返回类型 Emp
		也就是说传入一个 username和password已经赋值的Emp对象
		如果从数据库中能够查询到用户和密码想匹配的的数据 就返回该行
		数据并且封装成Emp对象。
		
		#{username} username必须是javaPOJO类中设置的一个属性
	-->
	<select id="login" parameterType="Emp" resultType="Emp">
		select * from Emp where username= #{username} and passowrd
		=#{passowrd}
	</select>


	<!-- resultMap是 ibatis中功能最强大最灵活的部分
		它可以任意的多个类型 
		id :唯一标识
		type :它对应的类型
		属性ID:数据库中的唯一标识属性 priamry key
		<result 和 id  中的  property对应的是pojo的属性 column对应的是
		数据库表中的类
		<association:关联 对应关系为一对一
		
		
		
	-->

	<resultMap id="emp_salary_result" type="Emp">
		<id property="empno" column="empno" />
		<result property="ename" column="ename" />
		<result property="username" column="username" />

		<!-- 类Emp中含有属性 salary  两个表通过salary_empno属性关联起来
			salary的类型 就是 salaryResult 语句 返回类型所对应的类型 即
			Salary
			<typeAlias type="com.test.map.Salary" alias="Salary" />
		-->
		<association property="salary" column="salary_empno"
			javaType="Salary" resultMap="salaryResult" />
	</resultMap>

	<resultMap id="salaryResult" type="Salary">
		<id property="empno" column="salary_empno" />
		<result property="salary" column="salary_salary" />
	</resultMap>




	<select id="salaryByEmpno" parameterType="String"
		resultType="Salary">
		select * from Salary where empno=#{empno}
	</select>

	<select id="select_Emp_Salary" parameterType="String"
		resultMap="emp_salary_result">
		select e.username,e.ename , e.empno , s.empno as salary_empno,
		s.salary as salary_salary from Emp e,Salary s where e.empno=
		#{empno} and e.empno = s.empno
	</select>
</mapper>

 

 

   struts的配置就比较简单了到处都有我就不多写了

<struts>
	<package name="default" extends="struts-default">
	    <!--empActionspring中配置的bean 可直接引用 -->
		<action name="empAction" class="empAction" >
		
			<result name="success">/Success.jsp</result>
		</action>
	
	
		<action name="queryEmp" class="empAction" method="queryEmp" >
		  <result name="success">/Success.jsp</result>
		  </action>
		  
		  <action name="empAction" class="empAction" method="login" >
		  <result name="success">/Success.jsp</result>
		  <result name="failed">/failed.jsp</result>
		  </action>
		
	</package>
</struts>

 

 

 

java dao类 调用 ibatis

/**
 * @(#)EmpDao.java 1.0 Jul 6, 2011
 * @Copyright:  Copyright 2000 - 2011 ISoftStone Tech. Co. Ltd. All Rights Reserved.
 * @Description: 
 * 
 * Modification History:
 * Date:        Jul 6, 2011
 * Author:      YuSheng 245
 * Version:     ODS V100R001C06
 * Description: (Initialize)
 * Reviewer:    
 * Review Date: 
 */
package com.test.dao.impl;

import org.apache.ibatis.session.SqlSession;

import com.test.dao.IEmp;
import com.test.map.Emp;

public class EmpDao implements IEmp
{
   private SqlSession sqlSession ;
   /**
    * 获取ibatisSession
    * @param sqlSession 
    */
    public EmpDao(SqlSession sqlSession ){
        this.sqlSession = sqlSession;
    }
    
    public Emp queryEmp()
    {
    
      /**
       * 调用ibatis查询语句 因为已经设置了返回类型为Emp
       * 所以强转不会报错。
       */   
       Emp emp =(Emp) sqlSession.selectOne("empspace.selectEmp", 1);   
        System.out.println(emp.getEname());
        return emp;
    }

    public Emp login(Emp praraEmp)
    {
        
        Emp resultEmp =(Emp) sqlSession.selectOne("empspace.selectEmp",praraEmp); 
        
        return resultEmp;
    }
    
}

 

 

 

POJO类

 

/**
 * @(#)Emp.java 1.0 Jul 6, 2011
 * @Copyright:  Copyright 2000 - 2011 ISoftStone Tech. Co. Ltd. All Rights Reserved.
 * @Description: 
 * 
 * Modification History:
 * Date:        Jul 6, 2011
 * Author:      YuSheng 245
 * Version:     ODS V100R001C06
 * Description: (Initialize)
 * Reviewer:    
 * Review Date: 
 */
package com.test.map;

public class Emp
{
    private String empno;
    
    private String ename;
    
    private String password;
    
    private String username;
    
    private  int  age;
    
    private String sex;
    
    private int deptno;
    
    /*
     * 对应的是 emp.xml中 
     * <association property="salary" column="salary_empno"
			javaType="Salary" resultMap="salaryResult" />
     */
    private Object salary;
    
    
    public int getDeptno()
    {
        return deptno;
    }

    public void setDeptno(int deptno)
    {
        this.deptno = deptno;
    }

    public Object getSalary()
    {
        return salary;
    }

    public void setSalary(Object salary)
    {
        this.salary = salary;
    }

    public Emp(){
        
    }
    
    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password;
    }

    public String getUsername()
    {
        return username;
    }

    public void setUsername(String username)
    {
        this.username = username;
    }

    public int getAge()
    {
        return age;
    }

    public void setAge(int age)
    {
        this.age = age;
    }

    public String getSex()
    {
        return sex;
    }

    public void setSex(String sex)
    {
        this.sex = sex;
    }

    public String  getEmpno()
    {
        return empno;
    }
    
    public void setEmpno(String empno)
    {
        this.empno = empno;
    }
    
    public String getEname()
    {
        return ename;
    }
    
    public void setEname(String ename)
    {
        this.ename = ename;
    }
    
}

 

 

/**
 * @(#)Salary.java 1.0 Jul 7, 2011
 * @Copyright:  Copyright 2000 - 2011 ISoftStone Tech. Co. Ltd. All Rights Reserved.
 * @Description: 
 * 
 * Modification History:
 * Date:        Jul 7, 2011
 * Author:      YuSheng 245
 * Version:     ODS V100R001C06
 * Description: (Initialize)
 * Reviewer:    
 * Review Date: 
 */
package com.test.map;

public class Salary
{
    private String empno;
    
    private double salary;
    
    public String getEmpno()
    {
        return empno;
    }
    
    public void setEmpno(String empno)
    {
        this.empno = empno;
    }
    
    public double getSalary()
    {
        return salary;
    }
    
    public void setSalary(double salary)
    {
        this.salary = salary;
    }
    
}

 

 

 

 

--表没任何意义只是为了做个例子

create table emp(
  empno number primary key,
  ename varchar2(16),
  password varchar2(16),
  username varchar2(16),
  age number 
  sex varchar2(2),
  deptno number
)

create table salary(
 empno number primary key,
 salary number
)

 然后上传我的工程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值