springMvc事务的注解配置、实现、挂起
1、事务的配置
Spring-MyBaties.XML配置
<!-- spring mvc 自动扫描注解的时候,不去扫描@Service --> <context:component-scan base-package="com.spdbccc.manager"> <!--将Controller的注解排除掉 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <util:properties id="app" location="classpath:app-${env}.properties"/> <bean id="dataSource_1" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="#{app.jndiName_member}"/> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory_1" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource_1"/> <property name="configLocation" value="classpath:spring/vazh_mybatis.xml"/> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.spdbccc.manager.vazh.*.mapper"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_1"></property> </bean> <!--定义事务管理器--> <bean name="transactionManager_1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource_1"></property> </bean>
2、事务的使用
在需要实现事务的类声明或方法声明上加@Transactional注解
@Transactional( value =
"transactionManager_1", readOnly = false, isolation = Isolation.DEFAULT,
propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
3、事务的挂起
NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为它开启事务。如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行。
例如 方法A支持事务
方法B不支持事务。
方法A调用方法B。
在方法A开始运行时,系统为它建立Transaction,方法A中对于数据库的处理操作,会在该Transaction的控制之下。
这时,方法A调用方法B,方法A打开的 Transaction将挂起,方法B中任何数据库操作,都不在该Transaction的管理之下。
当方法B返回,方法A继续运行,之前的Transaction回复,后面的数据库操作继续在该Transaction的控制之下 提交或回滚。
利用BeanUtils 工具类封装表单数据
一、BeanUtils工具类的使用
1、首先导入BeanUtils工具类的jar包
commons-beanutils-1.8.0.jar
commons-logging-1.1.1.jar
2、setPropertity(Object bean,String name,Object value)方法
作用:为实体类bean的name属性设置属性值value(属性值为Object类型,可以以其他类型的对象为值)
3、populate(Object bean,Map properties)方法
作用:将map中的键值对,赋值给实体类bean的对应属性
populate封装对象时,实际上是调用了该对象所属类的set方法,因此页面表单内元素的name属性值一定要与实体类中的属性名一致,也就是与set方法中去掉set,并将剩下字符串的首字母小写的到的字符串一致
二、自定义类封装表单数据
步骤:
1、通过request.getParameterMap()方法,获取存储表单数据的map
2、通过BeanUtils工具类的populate(t,map)方法,给实体类对象赋值
3、返回实体类对象
代码:
public class WEBUtils { public static <T>T populateObject(HttpServletRequest request,T t){ Map<String, String[]> map = request.getParameterMap(); System.out.println(map); try { BeanUtils.populate(t, map); } catch (Exception e) { e.printStackTrace(); } return t; } }
注意:为了使自定义的工具类适用于所有实体类,我们将方法的参数设置为泛型,根据调用者传递的实体类对象和请求参数封装表单数据
java中instanceof用法
一、简介
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
package com.instanceoftest; interface A{} class B implements A{ } class C extends B { } class instanceoftest { public static void main(String[] args){ A a=null; B b=null; boolean res; System.out.println("instanceoftest test case 1: ------------------"); res = a instanceof A; System.out.println("a instanceof A: " + res); res = b instanceof B; System.out.println("b instanceof B: " + res); System.out.println("/ninstanceoftest test case 2: ------------------"); a=new B(); b=new B(); res = a instanceof A; System.out.println("a instanceof A: " + res); res = a instanceof B; System.out.println("a instanceof B: " + res); res = b instanceof A; System.out.println("b instanceof A: " + res); res = b instanceof B; System.out.println("b instanceof B: " + res); System.out.println("/ninstanceoftest test case 3: ------------------"); B b2=(C)new C(); res = b2 instanceof A; System.out.println("b2 instanceof A: " + res); res = b2 instanceof B; System.out.println("b2 instanceof B: " + res); res = b2 instanceof C; System.out.println("b2 instanceof C: " + res); } }
运行结果:
instanceoftest test case 1: ------------------ a instanceof A: false b instanceof B: false instanceoftest test case 2: ------------------ a instanceof A: true a instanceof B: true b instanceof A: true b instanceof B: true instanceoftest test case 3: ------------------ b2 instanceof A: true b2 instanceof B: true b2 instanceof C: true
分页
1、javaBean的特点
1)私有化属性
2)无参构造器
3)getter/setter方法
2、软件的三层架构
1)表现层(表示层、web层):html/jsp/servlet
2)业务逻辑层:写业务逻辑代码(service)
3)持久化层:和数据库打交道,操作数据库的代码(dao层)
3、MVC模型
M:model模型(封装数据)
V:View视图(html/jsp)渲染数据
C:Controller(servlet)控制程序的运行流程
4、分页
列 表显示条数过多现象,由于后台Sql语句是使用 select 字段名 from 表名 的方式导致的!实际开发中不可以这个写,也就是我们对于 查询的列表 必须添加分页,对于后台 sql语句而言,就是select 字段名 from 表名 limit 起始索引,查询条数
分页有后台 分页,前端也有分页信息
优点:减少了浏览器的网络 消耗减少了后台 数据库服务器的压力,也减少了tomcat服务器的压力。
5、HTML
块元素:<h1></h1>
行内 元素:<span></span>