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"ref="empDao"></property></bean><!-- 加载 abities SqlSessionFactoryBean 这里是与ibatis以前版本区别的地方 这里不是继承 sprig的FactoryBean 因为spring的版本没有更新 由ibatis jar包自己开发类继承了 spring的FactoryBean类 另外必备属性:dataSource --><bean id="sqlMapClient"/></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" ref="sqlMapClient" /> </bean> <!-- 通过spring 把已经加载ibatis配置文件sqlMapClient bean 注入到 dao类 供dao类查询数据 --> <bean id="empDao" /></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.OracleDriveroracle.database.url=jdbc:oracle:thin:@10.38.146.158:1521:oracleoracle.database.user=scottoracle.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.loginparameterType 传入参数类型: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" ><result name="success">/Success.jsp</result></action><action name="queryEmp" method="queryEmp" > <result name="success">/Success.jsp</result> </action> <action name="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)
?然后上传我的工程
谢谢