SSM整合案例
使用IDEA整合SSM
spring核心配置文件:beans_core.xml/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-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd "> <!-- 开启spring的注解模式 1 -->
<context:annotation-config/>
<!-- 扫描具体的注解包 1 -->
<context:component-scan base-package="com.ujiuye.*"></context:component-scan>
<!-- 读取外部的数据库连接条件文件 2 -->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClassName}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean> <!-- spring 整合mybatis 使用的工具类 2 -->
<bean name="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"/>
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"/>
</bean> <!-- 扫描 mapper接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ujiuye.mapper"/>
</bean> <!-- 引入spring提供的事务管理 -->
<bean name="manager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> <tx:advice id="myDriver" transaction-manager="manager">
<tx:attributes>
<!--增-->
<tx:method name="save*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<tx:method name="add*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<tx:method name="insert*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<!--删-->
<tx:method name="delete*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<!--改-->
<tx:method name="update*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<!--查-->
<tx:method name="get*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<tx:method name="find*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
</tx:attributes> </tx:advice> <!-- 那种类型 -->
<aop:config>
<aop:pointcut id="pc" expression="execution(* com.ujiuye.service.*.*(..))"></aop:pointcut>
<aop:advisor advice-ref="myDriver" pointcut-ref="pc"/>
</aop:config> </beans>
配置文件理解:
1.为什么已经扫描具体的注解包了 还需要开启spring的注解模式?是不是重复了。
这个问题其实不写下面这句也不会有任何问题,但是官方介意先开启spring注解模式
<!-- 开启spring的注解模式 -->
<context:annotation-config/>
2.SqlSessionFactoryBean是整合mybatis的一个很重要的类,他的具体功能。
一、数据库的连接(mybatis毕竟是一个持久层框架)
二、扫描mybatis核心配置文件
三、mybatis逆向生成的mapper.xml文件(或者是自己写的mapper.xml文件)。
如果mapper.xml文件和mapper接口放在同一个文件夹中则不需要此操作,但是介意将配置文件放在同一个配置文件夹中管理(Mybatis反向工程位置)
需要注意的是这个文件夹不是普通的文件夹,需要将文件夹变成Resources资源文件夹如下图

四、事务管理

springmvc配置文件 springmvc.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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <!-- 扫描具体控制层注解 -->
<context:component-scan base-package="com.ujiuye.controller"/>
<!-- 开启springmvc的注解驱动模式 2 -->
<mvc:annotation-driven/>
<!-- 解决静态资源无法访问的问题 1 -->
<mvc:default-servlet-handler/>
<!-- 视图解析器 2 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean> </beans>
配置文件理解:
1、静态文件问题
产出原因:由于我们在web.xml文件中配置了servlet,并且<url-pattern>/</url-pattern>会拦截静态支援文件,因为优先级问题 /* > *.jsp >/ 造成静态资源被servlet拦截,将我们的静态文件当初一个请来处理,所以在cotroller根本处理不了,所以会报一个404找不到的错误。
解决方法:在springmvc.xml文件中配置 <mvc:default-servlet-handler/> 这个标签会将我们cotroller处理不了的丢给默认tomcat中一个默认的DefaultServlet来处理。
我们都知道tomcat自身本来就有一个web.xml文件,而我们也写了一个servlet,程序会采用就近原则选择我们写的servle来执行所以就将原来默认的servlet覆盖掉。所以就造成了静态资源访问不到的问题
下图是默认web.xml源码

2.视图解析器:
我们先来了解一个spring servlet执行流程

图片来源https://www.jianshu.com/p/0f981efdfbbd
一、用户发送一个请求spring的DispatchServlet(前置控制器)接收到请求后就会到RequestMappingHandlerMapping(处理映射器)中去寻找有没有符何条件的servlet就好像一张菜单。然后再返回到(前置控制器)中如果有,
二、DispatchServlet将拿到的结果到RequestMappingHandlerAdapter(处理器适配器)中寻找具体的那个servlet,返回一个ModelAndView 到(前置控制器)中,然后(前置控制器)在将ModelAndView给InternalResourceViewResolver(视图解析器),(视图解析器)进行处理将
三、将一个具体的视图返回到(前置控制器)中最后进行视图处理将结果返回给用户。(哇,很烦)。
接下来就会有人有疑问为什么。配置文件中没有看到
(处理映射器) (处理器适配器) 而只有 (视图解析器)
因为只要我们开启springmvc注解模式,就不需要配置这两个是配置了
mybatis核心配置文件 sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <settings>
<!-- 打印查询语句 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings> <typeAliases>
<package name="com.ujiuye.cus.bean"></package>
<package name="com.ujiuye.pro.bean"></package>
<package name="com.ujiuye.emp.bean"></package>
<package name="com.ujiuye.mdo.bean"></package>
</typeAliases> </configuration>
配置文件理解:
1、需要在mybatis中填写的内容,声明也不写也可以(因为最主要的配置已经在spring核心配置文件中配置了) 但是一定要有这个文件。如果有器大需要配置的:懒加载、缓存。。。就需要在这个文件中配置
作者:Pei-Qi 博客:https://www.cnblogs.com/hwxxbc/ github:https://github.com/Pei-Qi
本人是一个刚刚接触IT行业的新人,有什么不到位的地方还请原谅,如果写的有什么错误的地方希望能够指出,蟹蟹。。。。
SSM整合案例的更多相关文章
- 08 SSM整合案例(企业权限管理系统):07.订单操作
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.用户操作 09.权限控制 10.权限关联与控制 11.AOP日志 07.订单操作 SSM订单操作 ...
- 08 SSM整合案例(企业权限管理系统):05.SSM整合案例的基本介绍
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户和角色操作 10.权限关联 11.AOP日志 05.SSM整合案例的基本介绍 ...
- 08 SSM整合案例(企业权限管理系统):06.产品操作
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.用户操作 09.权限控制 10.权限关联与控制 11.AOP日志 06.产品操作 SSM 环境搭 ...
- 08 SSM整合案例(企业权限管理系统):09.用户和角色操作
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户和角色操作 10.权限关联 11.AOP日志 09.用户和角色操作 1. 用 ...
- 08 SSM整合案例(企业权限管理系统):08.权限控制
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 08.权限控制 SSM权限操作 ...
- 08 SSM整合案例(企业权限管理系统):10.权限关联与控制
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 10.权限关联与控制 1.用户 ...
- 08 SSM整合案例(企业权限管理系统):11.AOP日志
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户和角色操作 10.权限关联 11.AOP日志 11.AOP日志 1.数据库与 ...
- SSM整合案例:图书管理系统
目录 SSM整合案例:图书管理系统 1.搭建数据库环境 2.基本环境搭建 2.1.新建一个Maven项目,起名为:ssmbuild,添加web的支持 2.2.导入pom的相关依赖 2.3.Maven静 ...
- SSM整合案例--用户登录
实现用户登录案例,并进行非法拦截 实现当用户未登录时,无法跳转到出登录页面以外的任何页面,拦截用户仍在登陆页面:当用户登录成功即可跳转到其他页面 (1)导入依赖 <!-- https://mvn ...
随机推荐
- HDU 4781 Assignment For Princess 构造
题意: 构造一个\(N(10 \leq N \leq 80)\)个顶点\(M(N+3 \leq M \leq \frac{N^2} {7})\)条边的有向图,要满足如下条件: 每条边有一个\([1,M ...
- nginx的常用负载均衡算法,分别是
随机分配,hash一致性分配,最小连接数分配,主备分配 随机,轮训,一致性哈希,主备,https://blog.csdn.net/liu88010988/article/details/5154741 ...
- Python3下基于bs4和sqlalchemy的爬虫实现
本文来自网易云社区 作者:王贝 小学生现在都在学python了,作为专业程序员当然不能落下了,所以,快马加鞭,周六周末在家学起了python3,python3的基本语法比较简单,相比于Java开发更加 ...
- 链表中倒数第k个结点 【微软面试100题 第十三题】
题目要求: 输入一个链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针. 参考资料:剑指offer第15题 题目分析: 1.两个指针,第一个先走k步,然后两个指针同时走,直到第一个走 ...
- Leetcode2--->链表中对应位相加(进位)
题目: 给定两个单链表,单链表中的数都是非负数.链表中的数字都是反向存储的,,每个节点都是个位数,将链表对应的位相加,返回最终的结果: 举例: Input: (2 -> 4 -> 3) + ...
- python - 数据驱动测试 - ddt
# -*- coding:utf-8 -*- ''' @project: jiaxy @author: Jimmy @file: study_ddt.py @ide: PyCharm Communit ...
- Oracle实例和数据库区别
什么是数据库,其实很简单,数据库就是存储数据的一种媒介.比如常用的文件就是一种,在Oracle10G中,数据的存储有好几种.第一种是文件形式,也就是在你的磁盘中创建一批文件,然后在这些文件 ...
- 关于ida pro的插件keypatch
关于ida pro的插件keypatch 来源 https://blog.csdn.net/fjh658/article/details/52268907 关于ida pro的牛逼插件keypatch ...
- CentOS7 Failed to start iptables.解决方法
Shit, CentOS怎么这么多bug.... 公司机房周日突然掉电,之前的Openstack环境就不能用了. 重新Run了一遍安装脚本,发现这个错误: iptables 咋又起不来了呢..... ...
- 浅谈getStackTrace()方法(一)
缘起: 今天看到有一个工具类中有一句: String msgToPrint = Thread.currentThread().getStackTrace()[1].getMethodName(); 输 ...