文章目录

  • 1 三大框架
    • 1.1 ssh
    • 1.2 ssm(最流行的框架)
    • 1.3 ssj(Spring springMvc jpa)
  • 2 Spring集成JPA
    • 2.1 加载jdbc.properties
    • 2.2 配置ApplicationContext.xml
    • 2.3 spring事物传播机制
      • 2.3.1 事物配置
  • 3 SpringMVC和spring集成或者整合
    • 3.1 配置web.xml
    • 3.2 配置ApplicationContext-mvc.xml
    • 3.3 修改web.xml,解决延迟加载的异常

1 三大框架

1.1 ssh

struts
spring
hibernate
(struts2 Spring Hibernate)

1.2 ssm(最流行的框架)

SpringMVC
Spring
MyBatis

1.3 ssj(Spring springMvc jpa)

Struts2 Spring JPA
SpringMVC Spring JPA
SpringMVC Spring spring Data JPA(spring的全家桶)

2 Spring集成JPA

<dependencies>
<!-- spring和springmvc整合包-->
<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.2.5.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.5.RELEASE</version>
</dependency>
<!-- springjdbc的包-->
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.2.5.RELEASE</version>
</dependency>
<!-- Spring和ORM(JPA)整合的包-->
<dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>4.2.5.RELEASE</version>
</dependency>
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.3.8.Final</version>
</dependency>
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.3.8.Final</version>
</dependency>
<!-- mysql数据库-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version>
</dependency>
<!-- 连接池-->
<dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.2.2</version>
</dependency>
<!-- Spring测试-->
<dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.2.5.RELEASE</version>
</dependency>
<!-- Springaop-->
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.9</version>
</dependency>
<!-- 处理json的包-->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.6.5</version>
</dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope>
</dependency>
</dependencies>

2.1 加载jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///ssj
jdbc.username=root
jdbc.password=root

2.2 配置ApplicationContext.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:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!--开启注解扫描--><context:component-scan base-package="cn.itsource" /><!-- 加载jdbc.properties --><context:property-placeholder location="classpath:jdbc.properties" /><!-- 配置连接池dataSource --><!-- destroy-method="close当前bean销毁的时候,会先调用close方法,关闭连接" --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><!-- 依赖注入连接池需要的属性 --><!-- property name="是BasicDataSource的set方法,本质属性" --><!-- property value="是jdbc.properties配置文件的key" --><property name="driverClassName" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><!--得到EntityManagerFactory--><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><!--配置属性--><property name="dataSource" ref="dataSource" /><!--扫描实体类--><property name="packagesToScan" value="cn.itsource.domain" /><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><!--是否显示sql--><property name="showSql" value="true" /><!--是否创建表--><property name="generateDdl" value="true" /><!--数据库方言--><property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" /></bean></property></bean><!--事物管理器--><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory" /></bean><!--开启事物  扫描@Transaction这种注解--><tx:annotation-driven /></beans>

2.3 spring事物传播机制

事物的传播机制 Propagation
Propagation.REQUIRED
表示当前方法必须运行在事物中

Propagation.SUPPORTS
表示当前不需要事物,如果存在当前事物 那么就在这个事物中运行

Propagation.MANDATORY
表示该方法必须在事务中运行,如果当前事务不存在,则会抛出一个异常

Propagation.REQUIRES_NEW
表示当前方法必须运行在它自己的事务中。一个新的事务将被启动。如果存在当前事务,在该方法执行期间,
当前事务会被挂起。如果使用JTATransactionManager的话,则需要访问TransactionManager

Propagation.NOT_SUPPORTED
表示该方法不应该运行在事务中。如果存在当前事务,在该方法运行期间,当前事务将被挂起。
如果使用JTATransactionManager的话,则需要访问TransactionManager

Propagation.NEVER
表示当前方法不应该运行在事务上下文中。如果当前正有一个事务在运行,则会抛出异常

Propagation.NESTED
表示如果当前已经存在一个事务,那么该方法将会在嵌套事务中运行。嵌套的事务可以独立于当前事务进行单独地提交或回滚。
如果当前事务不存在,那么其行为与PROPAGATION_REQUIRED一样。注意各厂商对这种传播行为的支持是有所差异的。

2.3.1 事物配置

readOnly = true
只读

@Transactional(propagation = Propagation.SUPPORTS,readOnly = true)
public class ProductServiceImpl implements IProductService

如果自身的方法配置传播机制 方法上面就采用自己配置注解

@Transactional(propagation = Propagation.REQUIRED)
public void save(Product product) {productDao.save(product);
}

3 SpringMVC和spring集成或者整合

3.1 配置web.xml

导入jar --spring-web /spring-webmvc

  1. 配置springmvc配置文件
  2. 配置前缀 后缀 (视图解析器)
  3. 静态资源放行
  4. 上传解析器
  5. 扫描@RequestMapping注解
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!--处理懒加载关闭问题--><filter><filter-name>OpenEntityManagerInViewFilter</filter-name><filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class></filter><filter-mapping><filter-name>OpenEntityManagerInViewFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--监听器读取配置--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:ApplicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--字符编码过滤器--><filter><filter-name>characterEncodingFilter</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><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--核心控制器--><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:ApplicationContext-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

3.2 配置ApplicationContext-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><context:component-scan base-package="cn.itsource.web.controller" /><!--静态资源放行--><mvc:default-servlet-handler /><!--扫描--><mvc:annotation-driven /><!--视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" /></bean>
</beans>

3.3 修改web.xml,解决延迟加载的异常

<!-- 添加关闭entityManger过滤器,必须在struts2过滤器之前 -->
<filter><filter-name>OpenEntityManagerInViewFilter</filter-name><filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter><filter-mapping><filter-name>OpenEntityManagerInViewFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

在Product类里面配置

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="dir_id")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
private ProductDir productDir;

Spring_SSJ集成相关推荐

  1. Nignx集成fastDFS后访问Nginx一直在加载中解决

    问题描述: Nginx集成fastDFS后,访问Nginx一直在加载中,得不到页面.查看Nginx的错误日志: 可以看到是fastdfs.conf的配置错误,tracker的ip没有修改: fastd ...

  2. Hexo集成Algolia实现搜索功能

    2年前搭建的hexo博客好久没有维护了,一看 hexo 以及先前使用 butterfly 主题已经更新好几个版本了,看介绍在速度性能上有了很大的提高,于是打算给 hexo 升个级,整理整理翻翻新.通过 ...

  3. 将TVM集成到PyTorch

    将TVM集成到PyTorch 随着TVM不断展示出对深度学习执行效率的改进,很明显PyTorch将从直接利用编译器堆栈中受益.PyTorch的主要宗旨是提供无缝且强大的集成,而这不会妨碍用户.PyTo ...

  4. 将TVM集成到PyTorch上

    将TVM集成到PyTorch上 随着TVM不断展示出对深度学习执行效率的改进,很明显PyTorch将从直接利用编译器堆栈中受益.PyTorch的主要宗旨是提供无缝且强大的集成,而这不会妨碍用户.为此, ...

  5. Vitis-AI集成

    Vitis-AI集成 Vitis-AI是Xilinx的开发堆栈,用于在Xilinx平台(包括边端设备和Alveo卡)上进行硬件加速的AI推理.它由优化的IP,工具,库,模型和示例设计组成.设计时考虑到 ...

  6. 中继TensorRT集成

    中继TensorRT集成 介绍 NVIDIA TensorRT是用于优化深度学习推理的库.这种集成将使尽可能多的算子从Relay转移到TensorRT,从而无需调整调度,即可在NVIDIA GPU上提 ...

  7. 如何在TVM上集成Codegen(下)

    如何在TVM上集成Codegen(下) Bring DNNL to TVM: JSON Codegen/Runtime 现在实现将Relay,序列化为JSON表示的DNNL codegen,然后实现D ...

  8. 如何在TVM上集成Codegen(上)

    如何在TVM上集成Codegen(上) 许多常用的深度学习内核,或者提供DNNL或TensorRT等框架和图形引擎,让用户以某种方式描述模型,从而获得高性能.此外,新兴的深度学习加速器也有自己的编译器 ...

  9. TensorRT宏碁自建云(BYOC, BuildYourOwnCloud)上集成

    TensorRT宏碁自建云(BYOC, BuildYourOwnCloud)上集成 这个PR增加了对分区.编译和运行TensorRT BYOC目标的支持. Building 有两个新的cmake标志: ...

最新文章

  1. 不止最佳长论文,腾讯AI在ACL上还有这些NLP成果(附论文链接)
  2. 子module 引入so库,aar文件配置
  3. ms sql 聚合事例
  4. python识别简单训练模型_Python3+OpenCV实现简单交通标志识别
  5. java读取邮箱附件_使用javamail获取附件内容
  6. grassfire算法
  7. linux 内核 发送数据类型,Linux内核数据类型及跨平台
  8. 转载需作者授权是如何实现的
  9. 频率单位Hz、MHz、GHz、THz、PHz、EHz换算关系
  10. Java开发 音视频会议
  11. win10开始菜单应用图标丢失
  12. Unity TextMeshPro显示中文
  13. snakeyaml操作yml文件中注释的处理
  14. IIS部署ASP网站项目详细教程(内部含有子目录)
  15. 计算机绘画社团活动教案,电脑绘画社团课教师教案.doc
  16. lgv20刷twrp_LG V30+ 日版 L-01K 刷机解锁BL 刷入TWR 回复日版基带
  17. 人工智能:免疫算法概述
  18. ABAP 动态控制选择屏幕 / Free Selection
  19. 对智能手表的功能买点认知介绍
  20. 【洛谷】P1010 幂次方

热门文章

  1. 益和VA 虚拟化应用安全性深度体验
  2. 物联网安全的现状简述
  3. ICSE NIER 2017 论文阅读 - Production-Driven Patch Generation
  4. Bootstrap - 跟着李南江学编程
  5. 联发科最新MT6739 Sensor移植资料
  6. 华为云“DDoS高防+CDN”联动
  7. beanmapper java_java – 在Spring中配置ObjectMapper
  8. Python 使用turtle模块绘制统计柱状图
  9. HTML CSS基本语法
  10. error:2006D080:BIO routines:BIO_new_file:no such file