- 创建javaWeb项目
在SettingsFile Encodings,配置Tomcat设置项目编码格式为utf-8导入jar包,然后导入spring、springMVC、MyBatis、Junit、json、文 件上传、日志 相关的jar包,
2.整合配置SpringMVC
创建配置文件springMVC-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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:annotation-driven />
在Spring的配置文件 applicationContext.xml 中整合Spring和MyBatis
- 开启注解扫描
- 配置数据源
- MyBatis配置
- 事务管理配置
- 事务切面配置
3、propagation属性
propagation属性的7个传播行为
- REQUIRED:指定当前方法必需在事务环境中运行,如果当前有事务环境就加入当前正在执 行的事务环境,如果当前没有事务,就新建一个事务。这是默认值。
- SUPPORTS:指定当前方法加入当前事务环境,如果当前没有事务,就以非事务方式执行。
- MANDATORY:指定当前方法必须加入当前事务环境,如果当前没有事务,就抛出异常。
- REQUIRES_NEW:指定当前方法总是会为自己发起一个新的事务,如果发现当前方法已运行 在一个事务中,则原有事务被挂起,我自己创建一个属于自己的事务,直我自己这个方法commit 结束,原先的事务才会恢复执行。
- NOT_SUPPORTED:指定当前方法以非事务方式执行操作,如果当前存在事务,就把当前事 务挂起,等我以非事务的状态运行完,再继续原来的事务。
- NEVER:指定当前方法绝对不能在事务范围内执行,如果方法在某个事务范围内执行,容器 就抛异常,只有没关联到事务,才正常执行。
- NESTED:指定当前方法执行时,如果已经有一个事务存在,则运行在这个嵌套的事务中.如果 当前环境没有运行的事务,就新建一个事务,并与父事务相互独立,这个事务拥有多个可以回 滚的保证点。就是指我自己内部事务回滚不会对外部事务造成影响,只对 DataSourceTransactionManager事务管理器起效。 isolation
属性有这些值:
- DEFAULT:采用数据库默认隔离级别
- SERIALIZABLE:最严格的级别,事务串行执行,资源消耗最大;
- REPEATABLE_READ:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的 数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失
- READ_COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并 行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。
5. READ_UNCOMMITTED:保证了读取过程中不会读取到非法数据。隔离级别在于处理多事务 的并发问题。 readOnly:表示对应的事务应该被最优化为只读事务。 如果值为true就会告诉Spring这个方法里面没有insert、update或者delete,你只需要提供只读的 数据库Connection就行了,这种执行效率会比read-write的Connection高,所以这是一个最优化 提示。在一些情况下,一些事务策略能够起到显着的最优化效果,例如在使用Object/Relational映 射工具(如:Hibernate或TopLink)时避免dirty checking(试图“刷新”)。 timeout:指定事务超时为几秒。 一般不会使用这个属性。在JTA中,这将被简单地传递到J2EE服务器的事务协调程序,并据此得到 相应的解释。
4、添加log4j配置
#配置根 Logger
log4j.rootLogger=INFO , appender1
#配置日志信息输出目的地(appender)
#appender1 输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.Threshold=INFO
log4j.appender.appender1.Target=System.out
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c{1}:%L %5p - %m%n
#
#包含 SQL 语句实际的执行时间
log4j.logger.jdbc.sqltiming=INFO
#除了 ResultSet 之外的所有JDBC调用信息,篇幅较长
log4j.logger.jdbc.audit=OFF
#包含 ResultSet 的信息,输出篇幅较长
log4j.logger.jdbc.resultset=OFF
#输出了 Connection 的 open、close 等信息
log4j.logger.jdbc.connection=OFF
#仅仅记录 SQL 语句,会将占位符替换为实际的参数
log4j.logger.jdbc.sqlonly=console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n
#log4j.logger.jdbc.sqltiming=INFO,console
#log4j.logger.jdbc.connection=INFO,console
5.添加PO:SysUser测试,添加Dao接口SysUserDao,编写SysUserDao接口对应的SysUseMapper.xml,编写Service层代码,编写Controller,编写Jsp页面