杂记

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>
View Code

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
View Code

   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;
    }
 }
View Code

 注意:为了使自定义的工具类适用于所有实体类,我们将方法的参数设置为泛型,根据调用者传递的实体类对象和请求参数封装表单数据

 

 

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);
  }
}
View Code

运行结果:

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

 
View Code

   分页

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>

原文地址:https://www.cnblogs.com/bkyy/p/8036573.html