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

被折叠的 条评论
为什么被折叠?



