做网站 一级 二级,购物网站 后台,有什么推广软件,邢台做网站哪家便宜原始方式整合SSM 不使用spring-mybatis包 项目内容 整合ssm完成对account表新增和查询的操作 项目大体结构 创建mavenWeb项目
pom文件中引入依赖 spring核心、aspectj(aop)、spring-jdbc(jdbcTemplate)、spring-tx(事务)、 数据源#xff1a;mysql、c3p0、mybatis my…原始方式整合SSM 不使用spring-mybatis包 项目内容 整合ssm完成对account表新增和查询的操作 项目大体结构 创建mavenWeb项目
pom文件中引入依赖 spring核心、aspectj(aop)、spring-jdbc(jdbcTemplate)、spring-tx(事务)、 数据源mysql、c3p0、mybatis mybatis-spring(spring整合mybatis) junit、spring-tst、 servlet、jsp、jstl、 lombok、 spring-webmvc(springMvc依赖) dependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactId!--spring核心包含aop--version5.0.5.RELEASE/version/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactId!--aop相关--version1.9.5/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactId!--jdbcTemplate相关--version5.0.5.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-tx/artifactId!--事务相关--version5.0.5.RELEASE/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.8/version/dependencydependencygroupIdcom.mchange/groupIdartifactIdc3p0/artifactIdversion0.9.5.5/version!--要用这个版本的之前用的低版本和spring-mybatis整合时查询方法报错--/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.13/version/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion2.0.5/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactId!--spring集成junit--version5.0.5.RELEASE/version/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.0.1/versionscopeprovided/scope/dependencydependencygroupIdjavax.servlet.jsp/groupIdartifactIdjsp-api/artifactIdversion2.2/versionscopeprovided/scope/dependencydependencygroupIdjstl/groupIdartifactIdjstl/artifactIdversion1.2/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.12/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactId!--springMvc--version5.0.5.RELEASE/version/dependency/dependencies
resource下log4j.properties文件
### direct log messages to stdout ###
log4j.appender.stdoutorg.apache.log4j.ConsoleAppender
log4j.appender.stdout.TargetSystem.out
log4j.appender.stdout.layoutorg.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern%d{ABSOLUTE} %5p %c{1}:%L - %m%n### direct messages to file mylog.log ###
log4j.appender.fileorg.apache.log4j.FileAppender
log4j.appender.file.Filec:/mylog.log
log4j.appender.file.layoutorg.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern%d{ABSOLUTE} %5p %c{1}:%L - %m%n### set log levels - for more verbose logging change info to debug ###log4j.rootLoggerinfo, stdout
resource下jdbc.properties文件
jdbc.drivercom.mysql.jdbc.Driver
jdbc.urljdbc:mysql://localhost:3306/jdbc
jdbc.usernameroot
jdbc.passwordroot123
spring核心配置
resource下applicationContext.xml
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:aophttp://www.springframework.org/schema/aopxmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
context:component-scan base-packagecom.kdy/!--开启组件扫描--
/beans
数据库数据表 com.kdy.domain
Data
NoArgsConstructor
AllArgsConstructor
public class Account {private int id;private String name;private double money;
}
com.kdy.mapper中AccountMapper接口
public interface AccountMapper {//保存账户数据Insert(insert into account values(#{id},#{name},#{money}))public void save(Account account);//查询账户数据Select(select * from account)public ListAccount findAll();}
resource下com.kdy.mapper中AccountMapper.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.kdy.mapper.AccountMapper!--即使使用mybatis的注解开发也需要加上命名空间的mapper标签--
/mapper
resource下mybatis-config.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttps://mybatis.org/dtd/mybatis-3-config.dtd
configuration!--通过properties标签机制外部的properties文件--properties resourcejdbc.properties/properties!--起别名为权限定名的类起一个比较短的别名--typeAliasespackage namecom.kdy.domain/!--扫描的为它的类名且不区分大小写--!-- typeAlias typecom.kdy.domain.User aliasuser/typeAlias--!--mybatis已经将String-string、Long-long、Integer-int、Double-double、Boolean-boolean转换设置好了别名--/typeAliases!--数据源环境--environments defaultdevelopmentenvironment iddevelopment!--环境development、test可以配置多个数据库连接的环境信息将来通过default属性切换--transactionManager typeJDBC/!--事务管理器,spring可接管这里直接使用的JDBC的提交和回滚。依赖从数据源得到链接来管理事务作用域--dataSource typePOOLED!--数据源类型type有三种UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。POOLED:这种数据源的实现利用“池” 的概念将JDBC连接对象组织起来。JNDI:这个数据源的实现是为了能在如EJB或应用服务器这类容器中使用容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。--property namedriver value${jdbc.driver}/property nameurl value${jdbc.url}/!--如果mysqlurl中有符号需要进行转义为amp;如useSSLfalseamp;useServerPrepStmtstrue127.0.0.1:3306本机默认端口可省略不写直接为///--property nameusername value${jdbc.username}/property namepassword value${jdbc.password}//dataSource/environment/environments!--mappers加载映射加载方式如下使用相对于类路径的资源引用,例如:mapper resourceorg/mybatis/builder/AuthorMapper.xml/使用完全限定资源定位符(URL) 例如: mapper url file:///var/mappers/ AuthorMapper.xml/使用映射器接口实现类的完全限定类名例如: mapper class org.mybatis.builder.AuthorMapper/将包内的映射器接口实现全部注册为映射器例如: package nameorg.mybatis.builder/--mapperspackage namecom.kdy.mapper/!-- mapper resourceUserMapper.xml/--/mappers
/configuration
web.xml
?xml version1.0 encodingUTF-8?
web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0!--全局初始化参数--context-param!--servletContext.getInitParameter(contextConfigLocation)、jsp中通过el表达式--param-namecontextConfigLocation/param-nameparam-valueclasspath:applicationContext.xml/param-value/context-param!--配置Spring的监听器spring集成web里的1.web.xml中配置全局初始化参数contextConfigLocation和org.springframework.web.context.ContextLoaderListener的listener当web项目启动加载初始化参数contextConfigLocation并根据classpath:applicationContext.xml进行new出ApplicationContext对象app将app对象通过setAttribute(app,app)放入当前web应用最大的域servletContext域中域中并需要时getAttribute取出该app对象。2.还有一种方式为定义监听类和WebListener注解方式详见spring的博客中集成web部分。--listenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listener!--springMvc字符编码过滤器解决post请求中文乱码问题--filterfilter-nameCharacterEncodingFilter/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param/filterfilter-mappingfilter-nameCharacterEncodingFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping!--配置SpringMVC的前端控制器配置一个servlet类选择第三方org.springframework的DispatcherServlet配置该类且路径为拦截所有来作为springMvc的前端控制器servlet --servletservlet-nameDispatcherServlet/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-param!--该servlet的初始化参数--!--spring-mvc.xml是怎么加载的呢spring-mvc.xml是怎么加载的呢类似web.xml中的context-paramapplication域的全局初始化参数。这里下面配置初始化参数spring-mvc.xml名称即为web.xml中该DispatcherServlet的servlet的init初始化参数来提供以便org的DispatcherServlet根据这个servlet的init初始化参数去加载springMVC的配置文件继而IOC出controller(特有行为)实例提供给前端控制器DispatcherServlet(共有行为)使用。--param-namecontextConfigLocation/param-nameparam-valueclasspath:spring-mvc.xml/param-value/init-paramload-on-startup2/load-on-startup!--loadOnStartup负整数或不加默认第一次访问该servlet执行时创建servlet对象并初始化loadOnStartup为0或正整数时web服务器启动时创建servlet对象数字越小优先级越高--/servletservlet-mappingservlet-nameDispatcherServlet/servlet-nameurl-pattern//url-pattern!-- 配置该servlet的路径为拦截所有/虽会覆盖tomcat静态资源访问路径但现在没有静态资源html之类只有jsp动态页面。--/servlet-mapping
/web-app
com.kdy.exception写着玩的练习一下spring异常处理
Data
AllArgsConstructor
NoArgsConstructor
public class AccountException extends Exception {String message;
}
com.kdy.resolver写着玩的练习一下spring异常处理
public class MyExceptionResolver implements HandlerExceptionResolver {Overridepublic ModelAndView resolveException(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o, Exception e) {ModelAndView modelAndView new ModelAndView();if (e instanceof ClassCastException){modelAndView.addObject(info,类转换异常);}else if(e instanceof ArithmeticException){modelAndView.addObject(info,除零算数异常);}else if(e instanceof FileNotFoundException){modelAndView.addObject(info,文件找不到异常);}else if(e instanceof NullPointerException){modelAndView.addObject(info,空指针异常);}else if(e instanceof AccountException){AccountException ae(AccountException) e;modelAndView.addObject(info,AccountService的报的异常ae.getMessage());}modelAndView.setViewName(error);return modelAndView;}
}
webapp下jsp中error.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleerror/title
/head
body
h1异常页面~/h1
h2${info}/h2
/body
/htmlresource下spring-mvc.xml
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:mvchttp://www.springframework.org/schema/mvcxmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd!--Controller的组件扫描--context:component-scan base-packagecom.kdy/context:component-scan!--配置内部资源视图解析器--bean idviewResolver classorg.springframework.web.servlet.view.InternalResourceViewResolverproperty nameprefix value/jsp//property!--前缀--property namesuffix value.jsp/property!--后缀--/bean!--注解驱动顶替配置的配置的处理器映射器和适配器集成了jackson可Controller资源方法返回字为对象User时自动转为json--mvc:annotation-driven /!--js和css和html等被web.xml中配置的前端控制配置拦截了这里配置springMvc静态资源放行--mvc:default-servlet-handler/!--若使用这种方式必须配置注解驱动否则controller无法访问--!--自定义异常处理器--bean classcom.kdy.resolver.MyExceptionResolver/
/beans
com.kdy.service.impl
Service
public class AccountServiceImpl implements AccountService {Overridepublic void save(Account account) throws AccountException {try {//1.加载mybatis核心配置获取SqlSessionFactoryString resource mybatis-config.xml;InputStream inputStream Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象用它来执行sqlSqlSession sqlSession sqlSessionFactory.openSession();AccountMapper mapper sqlSession.getMapper(AccountMapper.class);mapper.save(account);sqlSession.commit();sqlSession.close();} catch (Exception e) {StringWriter sw new StringWriter();e.printStackTrace(new PrintWriter(sw, true));String str sw.toString();throw new AccountException(str);}}Overridepublic ListAccount findAll() throws AccountException {try {//1.加载mybatis核心配置获取SqlSessionFactoryString resource mybatis-config.xml;InputStream inputStream Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象用它来执行sqlSqlSession sqlSession sqlSessionFactory.openSession();AccountMapper mapper sqlSession.getMapper(AccountMapper.class);ListAccount accountList mapper.findAll();sqlSession.close();return accountList;} catch (Exception e) {StringWriter sw new StringWriter();e.printStackTrace(new PrintWriter(sw, true));String str sw.toString();throw new AccountException(str);}}
}
com.kdy.controller
Controller
RequestMapping(/account)
public class AccountController {Autowiredprivate AccountService accountService;//保存RequestMapping(value /save,produces text/html;charsetUTF-8)ResponseBodypublic String save(Account account) throws AccountException {accountService.save(account);return 保存成功;}//查询RequestMapping(/findAll)public ModelAndView findAll() throws AccountException {ListAccount accountList accountService.findAll();ModelAndView modelAndView new ModelAndView();modelAndView.addObject(accountList,accountList);modelAndView.setViewName(index);return modelAndView;}
}
webapp下jsp下save.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitlesave/title
/head
body
h1添加账户信息表单/h1
form nameaccountForm action${pageContext.request.contextPath}/account/save账户名称input typetext namenamebr/账户金额input typetext namemoneybr/input typesubmit value保存br/
/form
/body
/html
webapp下jsp下index.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
% taglib prefixc urihttp://java.sun.com/jsp/jstl/core %!--引入jstl标签库URI--
html
headtitleindex/title
/head
body
h1展示用户数据列表/h1
table border1pxtrth账户id/thth账户名称/thth账户金额/th/trc:forEach items${accountList} varaccounttrtd${account.id}/tdtd${account.name}/tdtd${account.money}/td/tr/c:forEach
/table
/body
/html运行tomcat访问http://localhost:8080/SsmModule/jsp/save.jsp 和http://localhost:8080/SsmModule/account/findAll 原始方式整合sping和mybatis的弊端 如service层中的是实现类中的方法 public void save(Account account) throws AccountException { InputStream in Resources.getResourceAsStream(mybatis-config.xml); SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(in); ... } 每当执行一次controller就会在service层创建一个sqlSessionFactory工厂 虽然可采取servletContextListener监听器将sqlSessionFactory存放servletContext域中
可参考spring博客中最下方集成web环境中的内容
1、web.xml中增加一个全局初始化参数mybatisConfigLocation !--全局初始化参数--context-param!--servletContext.getInitParameter(contextConfigLocation)、jsp中通过el表达式--param-namecontextConfigLocation/param-nameparam-valueclasspath:applicationContext.xml/param-value/context-paramcontext-param!--servletContext.getInitParameter(contextConfigLocation)、jsp中通过el表达式--param-namemybatisConfigLocation/param-nameparam-valuemybatis-config.xml/param-value/context-param
2、com.kdy.listener中
WebListener
public class MybatisLoadListener implements ServletContextListener {SneakyThrowsOverridepublic void contextInitialized(ServletContextEvent servletContextEvent) {ServletContext servletContext servletContextEvent.getServletContext();//获取web.xml中配置的application的全局初始化参数String mybatisConfigLocation servletContext.getInitParameter(mybatisConfigLocation);//其值为applicationContext.xmlInputStream inputStream Resources.getResourceAsStream(mybatisConfigLocation);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);servletContext.setAttribute(sqlSessionFactory,sqlSessionFactory);}Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {}
}
3、com.kdy.util下创建一个工具类
public class MybatisContextUtils {public static SqlSessionFactory getSqlSessionFactory(ServletContext servletContext){return (SqlSessionFactory)servletContext.getAttribute(sqlSessionFactory);}
}
controller中修改接口传递一个参数request且修改service层入参传递一个servletContext
Controller
RequestMapping(/account)
public class AccountController {Autowiredprivate AccountService accountService;//保存RequestMapping(value /save,produces text/html;charsetUTF-8)ResponseBodypublic String save(HttpServletRequest request,Account account) throws AccountException {WebApplicationContext ac1 WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());ServletContext servletContext ac1.getServletContext();accountService.save(account,servletContext);return 保存成功;}//查询RequestMapping(/findAll)public ModelAndView findAll(HttpServletRequest request) throws AccountException {WebApplicationContext ac1 WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());ServletContext servletContext ac1.getServletContext();ListAccount accountList accountService.findAll(servletContext);ModelAndView modelAndView new ModelAndView();modelAndView.addObject(accountList,accountList);modelAndView.setViewName(index);return modelAndView;}
}
Service
public class AccountServiceImpl implements AccountService {Overridepublic void save(Account account, ServletContext servletContext) throws AccountException {try {SqlSessionFactory sqlSessionFactory MybatisContextUtils.getSqlSessionFactory(servletContext);//2.获取SqlSession对象用它来执行sqlSqlSession sqlSession sqlSessionFactory.openSession();AccountMapper mapper sqlSession.getMapper(AccountMapper.class);mapper.save(account);sqlSession.commit();sqlSession.close();} catch (Exception e) {StringWriter sw new StringWriter();e.printStackTrace(new PrintWriter(sw, true));String str sw.toString();throw new AccountException(str);}}Overridepublic ListAccount findAll(ServletContext servletContext) throws AccountException {try {SqlSessionFactory sqlSessionFactory MybatisContextUtils.getSqlSessionFactory(servletContext);//2.获取SqlSession对象用它来执行sqlSqlSession sqlSession sqlSessionFactory.openSession();AccountMapper mapper sqlSession.getMapper(AccountMapper.class);ListAccount accountList mapper.findAll();sqlSession.close();return accountList;} catch (Exception e) {StringWriter sw new StringWriter();e.printStackTrace(new PrintWriter(sw, true));String str sw.toString();throw new AccountException(str);}}
} 运行tomcat访问http://localhost:8080/SsmModule/jsp/save.jsp 和http://localhost:8080/SsmModule/account/findAll 但是这种方式麻烦不说 service层每次还要加上一个servletContext的入参使得controller和service界限模糊不清 所以绝不推荐使用 Spring整合mybatis的方式整合SSM
思路 将session工厂交给spring容器管理从容器中获得执行操作的Mapper实例即可 将事务的控制(sqlSession.commit和sqlSession.close等)交给spring容器进行声明式事务控制 操作
接着原始方式整合SSM的案例写
如果写了上面监听器抽的步骤先回退到原始方式整合SSM案例
pom文件中引入spring-mybatis的包上面已经引入了包中有spring提供的工厂的实现类
1、resource下的mybatis-config.xml文件删除掉数据源和引入jdbc.properties的内容
2、applicationContext.xml中加上数据源和引入jdbc.properties的内容
接下来让service中的sqlSession交由spring产生
3、applicationContext.xml中配置sqlSessionFactory的bean
接下来mybatis核心配置中mapper映射的加载也可以交由spring托管
4、resource下的mybatis-config.xml文件删除加载映射mapperspackage...
5、applicationContext.xml中配置MapperScannerConfigurer扫描mapper所在的包并为mapper创建实现类
mybatis-config.xml变为
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttps://mybatis.org/dtd/mybatis-3-config.dtd
configuration!--起别名为权限定名的类起一个比较短的别名--typeAliasespackage namecom.kdy.domain/!--扫描的为它的类名且不区分大小写--!-- typeAlias typecom.kdy.domain.User aliasuser/typeAlias--!--mybatis已经将String-string、Long-long、Integer-int、Double-double、Boolean-boolean转换设置好了别名--/typeAliases
/configuration
applicationContext.xml变为
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:aophttp://www.springframework.org/schema/aopxmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
context:component-scan base-packagecom.kdy/!--开启组件扫描--context:property-placeholder locationclasspath:jdbc.properties/!--引入配置文件使用el获取--bean iddataSource classcom.mchange.v2.c3p0.ComboPooledDataSourceproperty namedriverClass value${jdbc.driver}/propertyproperty namejdbcUrl value${jdbc.url}/propertyproperty nameuser value${jdbc.username}/propertyproperty namepassword value${jdbc.password}/property/bean!--配置sqlSessionFactory--bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource/property!--加载mybatis核心文件--property nameconfigLocation valueclasspath:mybatis-config.xml/property/bean!--mybatis核心配置中mapper映射的加载也可以交由spring托管这样spring扫描包并将mapper放入spring容器中。--!--扫描mapper所在的包并为mapper创建实现类--bean classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty namebasePackage valuecom.kdy.mapper/property/bean
/beans
使用
只需在用到mapper的地方注入mapper包下的某个mapper接口即可
删除 spring-mvc.xml自定义异常处理器删MyException删myExceptionResolver
AccountServiceImpl
Service
public class AccountServiceImpl implements AccountService {Autowiredprivate AccountMapper accountMapper;Overridepublic void save(Account account){try {accountMapper.save(account);} catch (Exception e) {e.printStackTrace();}}Overridepublic ListAccount findAll(){try {ListAccount accountList accountMapper.findAll();return accountList;} catch (Exception e) {e.printStackTrace();}return null;}
}
接下来为其加上spring的事务管理
applicationContext.xml中加上配置平台事务管理器、事务的增强和织入
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:txhttp://www.springframework.org/schema/txxmlns:aophttp://www.springframework.org/schema/aopxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
context:component-scan base-packagecom.kdy/!--开启组件扫描--context:property-placeholder locationclasspath:jdbc.properties/!--引入配置文件使用el获取--bean iddataSource classcom.mchange.v2.c3p0.ComboPooledDataSourceproperty namedriverClass value${jdbc.driver}/propertyproperty namejdbcUrl value${jdbc.url}/propertyproperty nameuser value${jdbc.username}/propertyproperty namepassword value${jdbc.password}/property/bean!--配置sqlSessionFactory--bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource/property!--加载mybatis核心文件--property nameconfigLocation valueclasspath:mybatis-config.xml/property/bean!--mybatis核心配置中mapper映射的加载也可以交由spring托管这样spring扫描包并将mapper放入spring容器中。--!--扫描mapper所在的包并为mapper创建实现类--bean classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty namebasePackage valuecom.kdy.mapper/property/bean!--配置平台事务管理器--bean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty namedataSource refdataSource/!--引入数据源需要它的connection对象事务控制提交和回滚--/bean!--通知 事务的增强--tx:advice idtxAdvice transaction-managertransactionManagertx:attributes!--isolation隔离级别、propagation传播行为、timeout超时时间、readonly是否只读--!--对目标类中的某些名称的方法进行事务处理的增强--tx:method name*/!--tx:method name* isolationDEFAULT propagationREQUIRED timeout-1 read-onlyfalse/tx:method nametransfer isolationREPEATABLE_READ propagationREQUIRED read-onlyfalse/tx:method namesave isolationREPEATABLE_READ propagationREQUIRED read-onlyfalse/tx:method namefindAll isolationREPEATABLE_READ propagationREQUIRED read-onlytrue/tx:method nameupdate* isolationREPEATABLE_READ propagationREQUIRED read-onlyfalse/--!--以update开头的通配符的写法--/tx:attributes/tx:advice!--配置事务的aop织入也可抽取切点点表达式出来后引用--aop:configaop:advisor advice-reftxAdvice pointcutexecution(* com.kdy.service.impl.*.*(..))/aop:advisor/aop:config
/beans
运行部署访问即可。