spring mvc + ibatis + Oracle + ajax 轻量级架构搭建及详解 研究(后续接着跟进)
1、新建Web Project 工程,编辑web.xml文件
写道
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--配置Sring MVC的核心控制器DispatcherServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 为DispatcherServlet建立映射 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:/log4j.properties</param-value>
</context-param>
<!-- 配置log4j.xml监听器 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--配置Sring MVC的核心控制器DispatcherServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 为DispatcherServlet建立映射 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:/log4j.properties</param-value>
</context-param>
<!-- 配置log4j.xml监听器 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2、添加spring mvc 架构所需要的JAR包
3、设置spring-data.xml、spring-servlet.xml文件
spring-data.xml
写道
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- 获取数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${db.dirverClass}</value>
</property>
<property name="url">
<value>${db.url}</value>
</property>
<property name="username">
<value>${db.username}</value>
</property>
<property name="password">
<value>${db.password}</value>
</property>
</bean>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- 获取数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${db.dirverClass}</value>
</property>
<property name="url">
<value>${db.url}</value>
</property>
<property name="username">
<value>${db.username}</value>
</property>
<property name="password">
<value>${db.password}</value>
</property>
</bean>
</beans>
spring-servlet.xml 文件
写道
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:config.properties</value>
</property>
</bean>
<!-- 定义映射 -->
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="helloWorld.html">helloWorldAction</prop>
<prop key="userAction.html">userAction</prop>
</props>
</property>
</bean>
<bean id="userDao" class="com.examp.dao.UserDao">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 定义视图 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.InternalResourceView</value>
</property>
</bean>
<!-- 定义控制器 -->
<bean id="helloWorldAction" class="com.examp.ch23.HelloWorldAction">
<property name="helloWorld">
<value>${helloWorld}</value>
</property>
<property name="helloWorld1">
<value>${name}</value>
</property>
<property name="viewPage">
<value>${toUrl}</value>
</property>
</bean>
<!-- 根据请求参数决定方法 userAction.html?action=toDetail -->
<bean id="userAction" class="com.examp.ch23.UserAction">
<property name="dao">
<ref bean="userDao"/>
</property>
<property name="methodNameResolver">
<bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<!-- 指定参数名为action -->
<property name="paramName" value="action" />
</bean>
</property>
</bean>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:config.properties</value>
</property>
</bean>
<!-- 定义映射 -->
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="helloWorld.html">helloWorldAction</prop>
<prop key="userAction.html">userAction</prop>
</props>
</property>
</bean>
<bean id="userDao" class="com.examp.dao.UserDao">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 定义视图 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.InternalResourceView</value>
</property>
</bean>
<!-- 定义控制器 -->
<bean id="helloWorldAction" class="com.examp.ch23.HelloWorldAction">
<property name="helloWorld">
<value>${helloWorld}</value>
</property>
<property name="helloWorld1">
<value>${name}</value>
</property>
<property name="viewPage">
<value>${toUrl}</value>
</property>
</bean>
<!-- 根据请求参数决定方法 userAction.html?action=toDetail -->
<bean id="userAction" class="com.examp.ch23.UserAction">
<property name="dao">
<ref bean="userDao"/>
</property>
<property name="methodNameResolver">
<bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<!-- 指定参数名为action -->
<property name="paramName" value="action" />
</bean>
</property>
</bean>
</beans>
4、日志配置文件 log4j.properties
################ FATAL, ERROR, WARN, INFO, DEBUG log4j.rootLogger=WARN,stdout,D,E ### stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern= %d{ABSOLUTE} %5p %c{1}\:%L - %m%n ### logFile ### ### save error to another file ### log4j.appender.D=org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File=D\:/logs/info.log log4j.appender.D.Append=true #error only in this file log4j.appender.D.Threshold =INFO log4j.appender.D.layout=org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%t\:%r] - [%p] %m%n
5、配置文件 config.properties
helloWorld=Good Luck! name=\u738B\u4E94 toUrl=/jsp/MyJsp.jsp db.dirverClass= oracle.jdbc.driver.OracleDriver db.url= jdbc:oracle:thin:@192.168.11.110:1521:ebank db.username=ebank db.password=ebank
6、编写实体类 UserPO.java
package com.examp.po; import java.io.Serializable; public class UserPO implements Serializable { private String id; private String name; private String password; private int type; private String email; private String phone; private int sex; private String qq; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getType() { return type; } public void setType(int type) { this.type = type; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getQq() { return qq; } public void setQq(String qq) { this.qq = qq; } }
7、添加数据处理类 UserDao.java
package com.examp.dao; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.support.JdbcDaoSupport; import com.examp.po.UserPO; public class UserDao extends JdbcDaoSupport { public Collection<UserPO> doquery() { String sql = "SELECT T.ID,T.NAME,T.EMAIL,T.SEX FROM T_USER T"; return super.getJdbcTemplate().query(sql, new RowMapper() { public Object mapRow(ResultSet rs, int num) throws SQLException{ UserPO user = new UserPO(); user.setId(rs.getString("ID")); user.setName(rs.getString("NAME")); user.setEmail(rs.getString("EMAIL")); user.setSex(rs.getInt("SEX")); return user; } }); } public Collection<UserPO> getUserByID(String id) { String sql = "SELECT T.ID,T.NAME,T.EMAIL,T.SEX FROM T_USER T WHERE T.ID='"+id+"'"; return super.getJdbcTemplate().query(sql, new RowMapper() { public Object mapRow(ResultSet rs, int num) throws SQLException{ UserPO user = new UserPO(); user.setId(rs.getString("ID")); user.setName(rs.getString("NAME")); user.setEmail(rs.getString("EMAIL")); user.setSex(rs.getInt("SEX")); return user; } }); } }
8、业务处理类 HelloWorldAction.java、UserAction.java
package com.examp.ch23; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class HelloWorldAction implements Controller{ private static final Log logger = LogFactory.getLog(HelloWorldAction.class); private String helloWorld; private String viewPage; private String helloWorld1; public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws Exception { System.out.println("是否进入。。。"); logger.warn("进入HelloWorldAction 包..."); Map<String,String> model = new HashMap<String,String>(); model.put("helloWorld", getHelloWorld()); model.put("helloWorld1", getHelloWorld1()); return new ModelAndView(getViewPage(),model); } public String getHelloWorld() { return helloWorld; } public void setHelloWorld(String helloWorld) { this.helloWorld = helloWorld; } public String getViewPage() { return viewPage; } public void setViewPage(String viewPage) { this.viewPage = viewPage; } public String getHelloWorld1() { return helloWorld1; } public void setHelloWorld1(String helloWorld1) { this.helloWorld1 = helloWorld1; } }
package com.examp.ch23; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.multiaction.MultiActionController; import com.examp.dao.UserDao; import com.examp.po.UserPO; //public class UserAction implements Controller{ public class UserAction extends MultiActionController{ private static final Log logger = LogFactory.getLog(UserAction.class); private UserDao dao; public ModelAndView list(HttpServletRequest request, HttpServletResponse response) throws Exception { logger.warn("UserAction list 方法..."); Map<String,Object> model = new HashMap<String,Object>(); Collection<UserPO> list = dao.doquery(); List<UserPO> users = new ArrayList<UserPO>(); for (UserPO userPO : list) { UserPO user = new UserPO(); user.setId(userPO.getId()); user.setName(userPO.getName()); user.setSex(userPO.getSex()); user.setEmail(userPO.getEmail()); users.add(user); } model.put("list", users); return new ModelAndView("/jsp/userList.jsp",model); } public ModelAndView detail(HttpServletRequest req,HttpServletResponse res) throws Exception{ String id = req.getParameter("id"); Collection<UserPO> list = dao.getUserByID(id); logger.warn("UserAction detail 方法..."); List<UserPO> users = new ArrayList<UserPO>(); for (UserPO userPO : list) { UserPO user = new UserPO(); user.setId(userPO.getId()); user.setName(userPO.getName()); user.setSex(userPO.getSex()); user.setEmail(userPO.getEmail()); users.add(user); } Map<String,Object> model = new HashMap<String,Object>(); model.put("list", users); return new ModelAndView("/jsp/userDetail.jsp",model); } public UserDao getDao() { return dao; } public void setDao(UserDao dao) { this.dao = dao; } }
9、编辑jsp页面 MyJsp.jsp、userDetail.jsp、userList.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>My JSP 'MyJsp.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <% String str = (String)request.getAttribute("helloWorld"); String param = (String)request.getAttribute("param"); %> <body> This is my JSP page. <%=str %>${helloWorld1}<br> ${helloWorld} + </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@page import="com.examp.po.*" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% 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>My JSP 'MyJsp.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <% String str = (String)request.getAttribute("helloWorld"); //List list = (List)request.getAttribute("list"); %> <body> <div>用户个人信息</div> <table> <tr> <td> 用户ID </td> <td> 用户名 </td> <td> 性别 </td> <td> 邮件 </td> </tr> <c:forEach var="user" items="${list}"> <tr> <td><a href="/ch23/userAction.html?action=detail&id=${user.id}">${user.id}</a></td> <td>${user.name}</td> <td> <c:if test="${user.sex == 0}"> 保密 </c:if> <c:if test="${user.sex == 1}"> 男 </c:if> <c:if test="${user.sex == 2}"> 女 </c:if> </td> <td>${user.email}</td> </tr> </c:forEach> </table> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@page import="com.examp.po.*" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% 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>My JSP 'MyJsp.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <% String str = (String)request.getAttribute("helloWorld"); //List list = (List)request.getAttribute("list"); %> <body> <%-- This is my JSP page. <%=str %><br> --%> <%-- <% for(int i = 0; i < list.size();i++){ UserPO user = (UserPO)list.get(i); %> <%=user.getName()%><br/> <% } %> --%> <table> <tr> <td> 用户ID </td> <td> 用户名 </td> <td> 性别 </td> <td> 邮件 </td> </tr> <c:forEach var="user" items="${list}"> <tr> <td><a href="/ch23/userAction.html?action=detail&id=${user.id}">${user.id}</a></td> <td>${user.name}</td> <td> <c:if test="${user.sex == 0}"> 保密 </c:if> <c:if test="${user.sex == 1}"> 男 </c:if> <c:if test="${user.sex == 2}"> 女 </c:if> </td> <td>${user.email}</td> </tr> </c:forEach> </table> </body> </html>
10、项目结构图
相关推荐
在"Spring MVC+ibatis+Oracle资源整合,实现简单的增删改查"的项目中,开发者可能已经创建了学生(stu)相关的实体类、Mapper接口、XML配置文件和DAO实现。例如,"stu"可能是学生表的名称,对应的实体类为Student,...
通过这个"Spring MVC+iBATIS+MySQL"的DEMO,你可以深入理解这三个组件如何协同工作,形成一个完整的Web应用系统。这个项目为你提供了实践这些技术的基础,你可以在此基础上扩展和优化,以适应更复杂的业务需求。
这些jar包的集合提供了搭建基于Spring MVC、Spring和iBatis的完整环境。在实际项目中,还需要包括其他依赖,如Servlet API、JSTL、Freemarker或JSP引擎等,以便处理HTTP请求和展示视图。在开发过程中,确保所有依赖...
接下来是 iBatis,这是一个轻量级的数据访问层(DAO)框架,它将 SQL 与 Java 代码解耦,使开发者可以编写更直观且易于维护的数据库操作。iBatis 提供了 XML 或注解方式来定义 SQL 查询,使得 SQL 配置和业务逻辑...
在Spring MVC + iBATIS + MySQL + EasyUI的架构下,CRM系统可能包含模块如客户管理、销售机会管理、市场营销和客户服务等。开发者可以通过Spring MVC处理后端业务逻辑,iBATIS负责数据库操作,而EasyUI则提供直观的...
而 iBatis 是一个轻量级的持久层框架,它允许开发者将 SQL 查询与 Java 代码分离,提供了灵活的映射机制,使得数据库操作变得简单。 标题"spring MVC + iBatis"暗示了我们将探讨如何将这两个框架集成在一起,创建一...
在本项目中,我们主要探讨的是如何利用Spring MVC、iBATIS和Oracle数据库来实现一个基本的单表操作,包括增、删、改等常见功能。Spring MVC是Spring框架的一个模块,专门处理Web应用程序的模型-视图-控制器(MVC)...
iBatis 是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,或者使用注解方式与Java代码相结合。iBatis 提供了灵活的映射机制,可以将数据库查询结果映射到Java对象,避免了繁琐的手动类型转换...
关于Spring.net + iBatis.net + asp.net MVC 整合的文档,值!
iBATIS作为一个轻量级的ORM框架,主要解决了SQL语句与Java代码的分离问题,使得开发者可以直接在XML配置文件中编写SQL,增强了数据库操作的灵活性。它与Spring3的结合,可以利用Spring的DataSource和...
接着,iBATIS(现在的MyBatis)是一个轻量级的持久层框架,它简化了数据库操作。MyBatis允许开发者将SQL语句直接写在XML配置文件或Java注解中,与Java对象进行绑定,使得数据访问更加直观。在Spring MVC中,MyBatis...
Spring MVC作为Spring框架的一部分,负责处理HTTP请求和响应,而iBatis则是一个轻量级的持久层框架,它简化了数据库操作。下面我们将深入探讨这两个框架以及如何结合使用它们创建一个简单的DEMO。 1. **Spring MVC...
自己项目的开发包集合,其中包括:缓存处理ehcache相关jar,spring MVC4.0 jar,ehcache依赖jar,以及其他jar(图像处理thumbnailator-0.4.2),包虽然不是很新但可用。实际使用时找包较为麻烦,现在整理出来,希望...
Ibatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,使得数据库操作更加简单且易于维护。Ibatis与Spring框架集成后,可以使用Spring的DI功能管理数据库连接,同时通过MyBatis-Spring提供的...
Struts2、Spring、iBatis以及Oracle是Java Web开发中的四大核心组件,它们共同构建了一个强大且灵活的后端架构。在这个实例中,我们将会深入探讨这些技术如何协同工作,实现分页搜索功能和上传附件操作。 1. **...
这个“struts2+spring+iBatis框架包”集成了这三个框架,使得开发者能够快速构建基于MVC(Model-View-Controller)模式的Web应用。 Struts2作为MVC框架,负责处理应用程序的控制逻辑。它通过Action类和配置文件定义...
在Spring+iBatis+Oracle体系中,缓存可以分为两种类型:一级缓存(本地缓存)和二级缓存。 一级缓存是iBatis默认提供的,它存在于SqlSession级别,同一SqlSession内的多次查询会共享结果,避免了重复的数据库访问。...