SSM项目搭建(Spring,Spring mvc ,Mybatis)
各种包就不说了,直接开始配置文件
(一)、mybatis相关的配置,也就是与数据库相关的配置
(1)数据源
(2)sqlSessionFactory
(3)mapperScannerConfigurer
不借助配置的mybatis,需要从mybatis.xml中来读数据,加载出一个sqlSessionFactory对象,然后sqlSession对象从sqlSessionFactory.openSession().getMapper(XXXDao.class);
mybatis.xml中一般配置的有数据源,然后这样就可以获取数据源并且找到XXXDao对应接口的映射xml文件,这样就很容易实现操作数据库的对象sqlSession了,但是有了spring,
这些对象都可以通过spring的ioc来管理了,不需要做这些获取对象的操作,直接注入属性值就可以了具体如下
开启扫描
<context:component-scan base-package="com.lyb.oa.dao"></context:component-scan>
数据源
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/oa?useUnicode=true&characterEncoding=utf-8"></property>
<property name="username" value="root"></property>
<property name="password" value="" ></property>
</bean>
sessionFactory要关联数据源和别名,不然要在xml中写好多包,重复
<bean name="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="typeAliasesPackage" value="com.lyb.oa.entity"></property>
</bean>
映射扫描,这里的sqlSessionFactoryBeanName要配置为value哦!!!源码里这就是个String类型的属性
下面的basePackage的值就是xml放的位置,否则会找不到映射
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sessionFactory"></property>
<property name="basePackage" value="com.lyb.oa.dao"></property>
</bean>
(二)、申明式事务,也就是业务相关的配置
因为在数据层主要就是Dao,视图层打交道的就是控制器controller,servlet等相关的类,而业务层的申明式事务就是要在这些类对象的方法执行的时候对其封装为一个事务,对其加强,与具体业务息息相关。所以要在业务层配置事务。ACID
<!-- 业务层相关 ,申明式事务-->
<aop:aspectj-autoproxy/>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 通知 设置通知,查询相关方法不涉及事务处理,其他有对数据库做操作的需要强制添加事务propagation="REQUIRED"-->
<tx:advice id="txAdvice" transaction="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true"></tx:method>
<tx:method name="find*" read-only="true"></tx:method>
<tx:method name="query*" read-only="true"></tx:method>
<tx:method name="search*" read-only="true"></tx:method>
<tx:method name="*" propagation="REQUIRED"></tx:method>
</tx:attributes>
</tx:advice>
<!-- 织入通知到切入点 所有的业务方法都可以式切入点,将这些切入点和通知关联起来就配置OK了-->
<aop:config>
<aop:pointcut id="txpc" execution="execution(* com.lyb.oa.service.*.*(..))"></aop:pointcut>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txpc"></aop:advisor>
</aop:config>
(三)、与视图相关的配置,也就是整合spring-mvc了
最基本的有三点1、开启springmvc的注解 2、静态资源访问设置默认不通过核心控制器 3、视图解析器
<!-- mvc相关注解 -->
<mvc:annotion-driven></mvc:annotion-driven>
<!-- 静态资源访问 -->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INFO/pages/"></property>
<property name="subfix" value=".jsp"></property>
</bean>
(四)、最后web项目在启动的时候是要从web.xml作为读取文件入口的,所以需要在web.xml中加载spring mvc相关的配置核心控制器,其他组件用注解就可以自己去操作了
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-web.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
原文地址:https://www.cnblogs.com/liuyongbo/p/11044630.html
- 花式解释AutoEncoder与VAE
- 用CNN做句子分类:CNN Sentence Classification (with Theano code)
- MySQL与Python的交互
- 实时Android语音对讲系统架构
- ElasticSearch优化系列二:机器设置(内存)
- Tensorflow之 CNN卷积神经网络的MNIST手写数字识别
- 你听过算法也是可以贪心的吗?
- 前后端分离ueditor富文本编辑器的使用-Java版本
- Golang语言社区--Go语言基础第六节函数
- Golang语言社区--理解 go interface 的 5 个关键点
- 得到一个物种所有基因的TSS(转录起始位点)区域的bed文件。
- 如何选择聚类模块数目
- 谁能告诉我,这数据测毁了么?
- 计算资源及编程-仅针对生信人员
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 栈与队列:匹配问题都是栈的强项
- SpringBoot源码学习(五)
- SpringBoot源码学习(六)
- SpringBoot源码学习(七)
- LeetCode52|有序数组中的单一元素
- LeetCode53|搜索二维矩阵II
- LeetCode54|二叉树的层次遍历
- LeetCode55|二叉树的层次遍历II
- LeetCode56|二叉树的层平均值
- LeetCode57|二叉树的锯齿形层次遍历
- LeetCode58|N叉树的层序遍历
- 技术创作101训练营-CRC校验没那么难
- 栈与队列:有没有想过计算机是如何处理表达式的?
- 栈与队列:滑动窗口里求最大值引出一个重要数据结构
- 栈与队列:求前 K 个高频元素和队列有啥关系?