说明:
   使用  spring2.5 +ibatis2.3.4+oscache2.4+struts2+oracle

建表


create table STUDENT
(
SID   NUMBER(8) primary key not null,
SNAME VARCHAR2(20) not null,
MAJOR VARCHAR2(100),
BIRTH DATE,
SCORE NUMBER(6,2)
)
-- Create sequence
create sequence STUDENT_SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 21
increment by 1
cache 20;

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 采用c3p0数据源 这个是在企业中用的比较多的一个数据源 -->
<!-- destroy-method="close"的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
<property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="user" value="luob"/>
<property name="password" value="luob"/>
<!-- 连接池中的最大连接数 -->
<property name="maxPoolSize" value="150"/>
<!-- 连接池中的最小连接数 -->
<property name="minPoolSize" value="1"></property>
<!-- 初始化连接池中的 连接数,取值 在  minPoolSize 和 maxPoolSize 之间,default:3-->
<property name="initialPoolSize" value="3"/>
<!-- 最大空闲时间,60s内该连接没有被使用则被丢弃,若为0 永不丢弃.default:0 -->
<property name="maxIdleTime" value="60"/>
<!-- 当连接数不够时,每次同时创建多少个连接 -->
<property name="acquireIncrement" value="1"/>
<!-- 每60s检查连接池中的所有空间连接,如果没有被使用,就被放弃, default:0 -->
<property name="idleConnectionTestPeriod" value="60"/>
</bean>
<!-- 从c3p0数据源中抽取出JDBC的代理对象-->
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor"  lazy-init="true" />
<!--9i: org.springframework.jdbc.support.lob.OracleLobHandler  -->
<!--10g以后:org.springframework.jdbc.support.lob.DefaultLobHandler(mysql,DB2等都可以用这个)  -->
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
<!-- 9i: 指定操作lob类型数据的jdbc代理对象 如果上面的 lobHandler 换了下面的就不需要了 -->
<property name="nativeJdbcExtractor">
<ref local="nativeJdbcExtractor" />
</property>
</bean>
<!--==================================================== -->
<!-- 让spring来管理batis 的SqlMapClient对象          //-->
<!--==================================================== -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="lobHandler" ref="lobHandler"/>
<property name="configLocation"><value>classpath:SqlMapConfig.xml</value></property>
</bean>
<!--=============================== -->
<!--     batis事务代理配置      /-->
<!--=============================== -->
<!-- 使用jdbc 来管理事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--   定义DAO bean的事务代理-->
<bean id="templatesDAO"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean ">
<!--   为事务代理bean注入事务管理器-->
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<!--   设置事务属性-->
<property name="transactionAttributes">
<props>
<!--   所有以add开头的方法,采用required的事务策略,并且只读-->
<prop key="add*">PROPAGATION_REQUIRED</prop>
<!--   所有以mod开头的方法,采用required的事务策略,并且只读-->
<prop key="mod*">PROPAGATION_REQUIRED</prop>
<!--   所有以del开头的方法,采用required的事务策略,并且只读-->
<prop key="del*">PROPAGATION_REQUIRED</prop>
<!--   其他方法,采用required的事务策略 -->
<prop key="*">readOnly</prop>
</props>
</property>
<!--   为事务代理bean设置目标bean -->
<property name="target">
<!--   采用嵌套bean配置目标bean-->
<bean class="test.dao.impl.TaoTemplatesDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
</property>
</bean>
<!-- =============================== -->
<!--  /    dao 的配置              /-->
<!-- =============================== -->
<bean id="studentDAO" class="com.ibatis.student.IStudentDAOImpl">
<property name="sqlMapClient" ref="sqlMapClient"/>
</bean>
<!-- =============================== -->
<!--  /   Serivce 的配置                /-->
<!-- =============================== -->
<bean id="studentService" class="com.ibatis.student.IStudentServiceImpl">
<property name="studentDAO" ref="studentDAO"/>
</bean>
</beans>

SqlMapConfig.xml

<?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>
<!-- 使用spring之后,数据源的配置移植到了spring上,所以IBATIS本身的配置可以取消 -->
<!-- 对 ibatis 的设置  -->
<settings maxRequests="256" maxSessions="64" maxTransactions="16"
enhancementEnabled="true" lazyLoadingEnabled="true" useStatementNamespaces="false" />
<!-- List the SQL Map XML files. They can be loaded from the
classpath, as they are here (com.domain.data...) -->
<sqlMap resource="com/ibatis/student/Student.xml"/>
<!-- List more here...
<sqlMap resource="com/mydomain/data/Order.xml"/>
<sqlMap resource="com/mydomain/data/Documents.xml"/>
-->
</sqlMapConfig>

Student.xml

<?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="studentSqlMap">
<!-- 别名  就像java中 import packageName -->
<typeAlias alias="Student" type="com.ibatis.student.Student"/>
<!-- 使用 OSCACHE 缓存机制 -->
<cacheModel id="student-cache" type="OSCACHE">
<flushInterval hours="24" />
<flushOnExecute statement="queryAllStudent" />
<property name="size" value="1000" />
</cacheModel>
<select id="queryAllStudent" resultClass="Student">
select * from student
</select>
<select id="queryStudentById" parameterClass="int" resultClass="Student">
select * from student where sid=#sid#
</select>
<!-- 这个里面的 占位符 就不能乱写了 因为会调用 Student 的 getSid ...getSname() ..  -->
<insert id="addStudent" parameterClass="Student">
insert into student(sid,sname,major,birth,score)
values    (#sid#,#sname#,#major#,#birth#,#score#)
</insert>
<!-- #sid# 这个 只是一个占位符 可以更改的 -->
<delete id="deleteStudentById" parameterClass="int">
delete from student where sid=#sid#
</delete>
<update id="updateStudent" parameterClass="Student">
update student
set
sname=#sname#,
major=#major#,
birth=#birth#,
score=#score#
where sid=#sid#
</update>
<!-- 如果参数  要拼接成一个表达式 就要将#  换成  $ -->
<select id="queryStudentByName" parameterClass="String" resultClass="Student">
select sid,sname,major,birth,score from student where sname like '$sname$'
</select>
<!-- Student  不区分大小写的   -->
<insert id="insertStudentBySequence" parameterClass="Student">
<selectKey resultClass="int" keyProperty="sid">
select STUDENT_SEQ.nextVal from dual
</selectKey>
insert into student(sid,sname,major,birth,score)
values (#sid#,#sname#,#major#,#birth#,#score#)
</insert>
</sqlMap>

Student.java


package com.ibatis.student;
import java.util.Date;
public class Student {
private int sid;
private String sname;
private String major;
private Date birth;
private float score;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
@Override
public String toString() {
// TODO Auto-generated method stub
String content = "sid:" + sid + "\tsname:" + sname + "\tmajor:" + major
+ "\tbirth:" + birth + "\tscore=" + score;
return content;
}
}

IStudentDAO.java


package com.ibatis.student;
import java.util.List;
public interface IStudentDAO {
public void addStudent(Student student);
//使用自动增长 主键
public void addStudentBySequence(Student student);
public void delStudentById(int id);
public void updStudentById(Student student);
public List<Student> queryAllStudent();
//使用模糊查询
public List<Student> queryStudentByName(String name);
public Student queryStudentById(int id);
}

IStudentDAOImpl.java


package com.ibatis.student;
import java.io.IOException;
import java.io.Reader;
import java.sql.Date;
import java.sql.SQLException;
import java.util.List;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.ibatis.sqlmap.client.SqlMapClient;
public class IStudentDAOImpl extends SqlMapClientDaoSupport implements IStudentDAO {
//private static SqlMapClient sqlMapClient=null;
/*static{
try {
Reader reader=com.ibatis.common.resources.Resources.getResourceAsReader("SqlMapConfig.xml");
sqlMapClient=com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/
public void addStudent(Student student) {
// TODO Auto-generated method stub
student=(Student)getSqlMapClientTemplate().insert("addStudent", student);
System.out.println(student.getSid());
}
public void addStudentBySequence(Student student) {
// TODO Auto-generated method stub
getSqlMapClientTemplate().insert("insertStudentBySequence", student);
}
public void delStudentById(int id) {
// TODO Auto-generated method stub
try {
int rows=getSqlMapClientTemplate().delete("deleteStudentById", id);
System.out.println(rows);
} catch (DataAccessException e) {
e.printStackTrace();
}
}
public List<Student> queryAllStudent() {
// TODO Auto-generated method stub
List<Student>  studentList=null;
try {
studentList=getSqlMapClientTemplate().queryForList("queryAllStudent");
} catch (DataAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return studentList;
}
public Student queryStudentById(int id) {
Student student=null;
try {
student=(Student)getSqlMapClientTemplate().queryForObject("queryStudentById",id);
} catch (Exception e) {
e.printStackTrace();
}
return student;
}
public List<Student> queryStudentByName(String name) {
// TODO Auto-generated method stub
List<Student> studentList=null;
try {
studentList=getSqlMapClientTemplate().queryForList("queryStudentByName", name);
} catch (DataAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return studentList;
}
public void updStudentById(Student student) {
// TODO Auto-generated method stub
try {
int rows=getSqlMapClientTemplate().update("updateStudent", student);
} catch (DataAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

IStudentServiceImpl.java


package com.ibatis.student;
import java.util.List;
public class IStudentServiceImpl implements IStudentService {
private IStudentDAO  studentDAO;
public void setStudentDAO(IStudentDAO studentDAO) {
this.studentDAO = studentDAO;
}
public void addStudent(Student student) {
// TODO Auto-generated method stub
studentDAO.addStudent(student);
}
public void addStudentBySequence(Student student) {
// TODO Auto-generated method stub
studentDAO.addStudentBySequence(student);
}
public void delStudentById(int id) {
// TODO Auto-generated method stub
studentDAO.delStudentById(id);
}
public List<Student> queryAllStudent() {
// TODO Auto-generated method stub
return studentDAO.queryAllStudent();
}
public Student queryStudentById(int id) {
// TODO Auto-generated method stub
return studentDAO.queryStudentById(id);
}
public List<Student> queryStudentByName(String name) {
// TODO Auto-generated method stub
return studentDAO.queryStudentByName(name);
}
public void updStudentById(Student student) {
// TODO Auto-generated method stub
studentDAO.updStudentById(student);
}
}

Test.java


package com.ibatis.student;
import java.sql.Date;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public  static void main(String [] args){
ApplicationContext context=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
IStudentService studentService=(IStudentService)context.getBean("studentService");
//1.
for (Student student : studentService.queryAllStudent()) {
System.out.println(student);
}
//2.
//      System.out.println(dao.queryStudentById(1));
//3.
//      Student student=new Student();
//      student.setSid(5);
//      student.setSname("admin");
//      student.setScore(100);
//      student.setMajor("Games");
//      student.setBirth(Date.valueOf("2008-08-08"));
//
//      dao.addStudent(student);
//4.
//      dao.delStudentById(1);
//5.
//      Student student=new Student();
//      student.setSid(2);
//      student.setSname("luob");
//      student.setScore(50);
//      student.setMajor("Games");
//      student.setBirth(Date.valueOf("2008-08-08"));
//      dao.updStudentById(student);
//6.
//      for (Student student : dao.queryStudentByName("l%")) {
//          System.out.println(student);
//      }
//7.
/*Student student=new Student();
student.setSid(2);
student.setSname("SCOTT");
student.setScore(50);
student.setMajor("paly Games");
student.setBirth(Date.valueOf("2008-08-08"));
studentService.addStudentBySequence(student);
System.out.println("success");*/
}
}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="student" namespace="/student" extends="struts-default">
<action name="userLogin" class="com.ibatis.student.action.StudentAction" method="login">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>

BaseAction.java


package com.ibatis.student.common;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class BaseAction extends ActionSupport{
public Object getServiceBean(String beanId){
ServletContext sc=ServletActionContext.getServletContext();
WebApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(sc);
return ctx.getBean(beanId);
}
public HttpServletRequest getRequest(){
return ServletActionContext.getRequest();
}
public HttpServletResponse getResponse(){
return ServletActionContext.getResponse();
}
public Map<String, Object> getSession() {
ActionContext act=ActionContext.getContext();
return act.getSession();
}
}

StudentAction.java


package com.ibatis.student.common;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class BaseAction extends ActionSupport{
public Object getServiceBean(String beanId){
ServletContext sc=ServletActionContext.getServletContext();
WebApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(sc);
return ctx.getBean(beanId);
}
public HttpServletRequest getRequest(){
return ServletActionContext.getRequest();
}
public HttpServletResponse getResponse(){
return ServletActionContext.getResponse();
}
public Map<String, Object> getSession() {
ActionContext act=ActionContext.getContext();
return act.getSession();
}
}

index.jsp


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Ibatis + Spring + Struts2 </title>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="${pageContext.request.contextPath}/student/userLogin.action" method="post">
用户名:<input type="text" name="userName"/>
密码:<input type="password" name="password"/>
<input type="submit" value="提交"/>
</form>
${sesssion_msg}
${request_msg}
</body>
</html>
  • 大小: 82.8 KB
  • 查看图片附件

Ibatis 整合spring + Struts2 加入OSCACHE相关推荐

  1. java ee ssh三大框架知识点_详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)...

    详解JAVAEE--SSH三大框架整合(spring+struts2+hibernate) 发布时间:2020-09-17 13:34:05 来源:脚本之家 阅读:64 作者:kent鹏 一.整合原理 ...

  2. 【编程不良人】快速入门Spring学习笔记08---事务属性、Spring整合Structs2框架(SM)、Spring整合Mybatis+Struts2(SSM)、Spring注解、SSM注解式开发

    1. 事务属性 1.1 事务传播属性 配套视频:[编程不良人]快速入门Spring,SpringBoot.SpringCloud学不好完全是因为Spring没有掌握!_哔哩哔哩_bilibili # ...

  3. spring+struts2+ibatis整合完全步骤

    Ssi整合首先需要导入相关的jar包 <classpath> <classpathentry kind="src" path="src"/&g ...

  4. spring+springmvc+ibatis整合小结

    最近在整合Spring和ibatis时,不管applicationContext.xml放在哪儿,在web.xml中怎么配置,tomcat启动时始终报applicationContext.xml的错. ...

  5. SSH整合(Struts2+hibernate+spring)

    1.创建表 create table t_user(id int primary key auto_increment,username varchar(50),password varchar(32 ...

  6. SSH整合注解版(Spring+Struts2+Hibernate)

    整体架构: pom.xml 引入maven节点: <dependencies><!--单测--><dependency><groupId>junit&l ...

  7. struts2整合spring应用实例

    我们知道struts1与spring整合是靠org.springframework.web.struts.DelegatingActionProxy来实现的,以下通过具体一个用户登录实现来说明stru ...

  8. spring struts2 mybatis框架学习总结(mvc三层架构)

    spring struts2 mybatis框架学习总结(mvc三层架构) ssi的框架主要是由struts2,spring以及ibatis组成,他们负责各层之间的交互与协作,从而实现整个web端的功 ...

  9. 整合Spring框架和Hibernate框架

    -------------------siwuxie095 整合 Spring 框架和 Hibernate 框架 1.导入相关 jar 包(共 28 个) (1)导入 Spring 的核心 jar 包 ...

最新文章

  1. 多线程学习笔记-深入理解ThreadPoolExecutor
  2. ​年底大会火爆,看“瑶台”如何搭建一场高质量沉浸式大会
  3. 一张大图片有多个小图片
  4. leetcode之回溯backtracing专题4
  5. docker mysql数据库初始化_如何在Mysql的Docker容器启动时初始化数据库
  6. 开灯关灯java script_Jquery实现视频播放页面的关灯开灯效果
  7. 显示部分x_i5 9400F+GTX 1030+23.8英寸,攀升迁跃者X上手简评
  8. NTC热敏电阻应用-测温
  9. android js 弹窗,Android原生代码拦截H5 Web页面中JavaScript弹窗/弹框
  10. 被封域名什么原因?如何预防域名被封呢?
  11. RuntimeError: Error(s) in loading state_dict for BNInception:size mismatch for
  12. 根据起始时间和结束时间得到期间所有的日期集合
  13. C#图片截取压缩(百分比压缩/大小压缩)实现代码
  14. 已拿头条offer的研发工程师面经(C++)
  15. VirtualBox复制虚拟机(同电脑、跨电脑)
  16. 请不要做浮躁的人!(转载自勉)
  17. ORACLE WITH与性能优化
  18. 微服务-Nacos动态配置中心
  19. 又是没有专业技术的一篇嘿嘿!
  20. 人是什么?从生物学的角度来说,人就是直立行走无毛动物而已...这是一个多么可怕的世界啊

热门文章

  1. Python列表及如何使用列表元素
  2. 怎么用计算机开方知识点,高中数学知识点:开平方根的方法和步骤
  3. 2022 极术通讯-安谋科技“周易”NPU教学开发平台亮相嵌入式系统周ESWEEK
  4. 学习笔记(03):四十九课时精通matlab数学建模-精通matlab单元数组和结构体深入学习...
  5. 丁磊:别把不吭声的鳄鱼当壁虎 没觉得马云多了不起
  6. ★★ 人人网开源软件、相关技术架构
  7. windows子系统启动ubuntu“另一个程序正在使用此文件,进程无法访问”
  8. FastDFS自定义水印的文件上传(前端调用后端接口)
  9. !important用法:
  10. Mac系统创建/home目录提示Read-Only filesystem的完美解决方案