好久没弄过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 )
然后上传我的工程