黑马程序员技术交流社区

标题: 【石家庄校区】事务、AJAX、分页、Listener笔记总结 [打印本页]

作者: chenlong43210    时间: 2018-5-27 16:08
标题: 【石家庄校区】事务、AJAX、分页、Listener笔记总结
事务管理
核心思想:使用同一个Connection对象
业务层:事务管理需在业务层
    方式一:向下传递Connection
                业务层获得Connection对象,将同一个Connection对象传递给DAO层
    方式二:使用当前线程ThreadLocal<T>
            DBUtils就是这种方式
MySQL中事务默认自动提交,一条SQL语句就是一个事务
Oracle中事务默认需手动提交
ACID特性
- 原子性(Atomicity):事务的不可分割。事务中的操作单元不可切割,要么全部成功,要么全部失败
- 一致性(Consistency):事务执行前后,数据完整性保持一致。业务状态和其他业务状态保持一致
- 隔离性(Isolation):一个事务执行,不应该受到其他事务的干扰
- 持久性(Durability):事务一旦结束(提交/回滚),数据就会持久化到数据库中
如果不考虑事务的隔离性引发的安全问题
- 读问题:
  - 脏读:一个事务读到另一个事务未提交的数据,导致查询结果跟实际数据不一致
  - 不可重复读:一个事务读到另一个事务已经提交的update数据,导致多次查询结果不一致
  - 虚读/幻读:一个事务读到另一个事务已经提交的insert数据,导致多次查询结果不一致
- 写问题:引发两类丢失更新
事务隔离级别
    read uncommitted(未提交读)--脏读、不可重复读、虚读都有可能发生
    read committed        (已提交读)--避免脏读。(Oracle默认)
    repeatable read (可重复读)--避免脏读、不可重复读(MySql默认)
    serializable        (串行化)--避免脏读、不可重复读、虚读。一个事务结束后才可执行另一个事务
    安全性越高,性能越低。
    MySQL5.5之后设置隔离级别
      SELECT @@tx_isolation; --查看当前事务隔离级别
      SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别 --设置事务隔离级别
   
AJAX
    JQ对象.load(url, [data], [callback]) //将相应的内容加载到当前标签中
    $.getJSON(url, [data], [callback]) //get请求直接返回jsonDATA
    $.get(url, [data], [callback], [type])
    $.post(url, [data], [callback], [type])
            url:路径
            data: Key/value 参数。JSON格式{key,"value",...},
            callback: 响应成功时执行的回调函数。function(data){} data为响应内容
            type:返回内容格式,xml, html, script, json, text, _default。(默认为字符串格式)
    JQform表单.serialize() //将当前表单可提交的参数序列化成JSON格式的参数
    JQform表单.serializeArray() //序列化成json数组
    $.parseJSON(data) //data转换成json
    //应对复杂业务逻辑写法
    $.ajax({
            type:..., //请求类型,默认"GET"
            cache:false, //是否缓存该页面
            data:{}, //参数
            dataType:..., //返回内容数据格式
            contentType:(默认: "application/x-www-form-urlencoded")) //发送信息至服务器时内容编码类型
            success:function(){} //成功执行方法
            error:function(){} //错误执行函数
            complete:function(){} //成功失败都执行此方法
    });
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
    对象表示为键值对
    数据由逗号分隔
    花括号保存对象
    方括号保存数组
    如:
    {"id":1,"name":aaa} //一个对象
    [{"id":1,"name":aaa},{"id":2,"name":aaa}] //对象数组
    {
        "person":{"id":1,"name":aaa}
    }

分页技术
分类:
- 物理分页:一次只去数据库中查询当前页需要的数据(常用)
  缺点:经常和数据库交互
  优点:数据量特别大时,不会导致内存溢出
- 逻辑分页:一次性将所有数据查询出来,放入内存(集合),每次查询只需去内存中截取
一般会将分页信息封装成一个JavaBean(PageBean<T>)。称为BO(Busines Object,附有业务含义的BavaBean)
    private int currPage; //当前页码。页面请求参数
    private int pageSize; //每页显示条数。自定义
    private int totalCount; //总记录数。数据库查询
    private int totalPage; //总页数:(int) Math.ceil(totalCount*1.0/pageSize)
    private List<T> list; //当前页内容。数据库查询
数据库分页查询语句:
    MySQL中:
      select ... limit m,n; --从索引m开始,查找n条数据(就是从第m+1条,到m+n条)
      select ... limit n; --查询前n条记录
      每页显示n条数据
        第i页: limit (i-1)*n,n
                (currPage-1)*pageSize
    Oracle中:rownum,使用SQL语句嵌套
    SQLserver中:top

Listener
概述
监听器:监听器就是一个Java类用来监听其他的Java类的变化
主要应用:Swing编程;Android应用。
监听器的术语:
- 事件源:被监听的对象(如:汽车)
- 监听器对象:监听的对象(如:汽车上报警器)
- 事件源与监听器绑定:配置(如:汽车上安装报警器)
- 事件:指的是事件源的改变(如:踹汽车一脚)
  功能: 获得事件源对象.
Servlet的监听器(都是接口,需定义类实现):
      监听ServletContext,HttpSession,ServletRequest三个域对象,共有3类8种
      事件源和监听器绑定:通过web.xml配置完成
一类:监听三个域对象的创建和销毁的监听器(3个)
    ServletContextListener:监听ServletContext对象
            contextDestroyed(ServletContextEvent sce) //对象销毁时执行
            contextInitialized(ServletContextEvent sce) //对象创建时执行
            作用:优化程序思想,将加载资源大的内容放到对象创建的时候加载
    HttpSessionListener:监听HttpSession对象
            sessionCreated(HttpSessionEvent se)
            sessionDestroyed(HttpSessionEvent se)
    ServletRequestListener:监听ServletRequest对象
            requestInitialized(ServletRequestEvent sre)
            requestDestroyed(ServletRequestEvent sre)
二类:监听三个域对象的属性变更的监听器(3个.属性添加,属性移除,属性替换)
    ServletContextAttributeListener:监听ServletContext对象
            attributeAdded(ServletContextAttributeEvent scab)
            attributeRemoved(ServletContextAttributeEvent scab)
            attributeReplaced(ServletContextAttributeEvent scab)
    HttpSessionAttributeListener:监听HttpSession对象
            xxx(HttpSessionBindingEvent se)
    ServletRequestAttributeListener:监听ServletRequest对象
            xxx(ServletRequestAttributeEvent srac)
三类:监听HttpSession对象中的JavaBean的状态的改变.(2个,绑定,解除绑定,钝化和活化)
            JavaBean实现监听器类,自动检测与Session的变化,所以无需再配置文件中绑定
    HttpSessionBindingListener:监听HttpSession中的JavaBean的绑定解除绑定的状态.
            valueBound(HttpSessionBindingEvent event) //绑定
            valueUnbound(HttpSessionBindingEvent event)
    HttpSessionActivationListener:监听HttpSession中的JavaBean的钝化和活化的状态(JavaBean需实现序列化接口)
            sessionDidActivate(HttpSessionEvent se) //活化(反序列化到内存)
            SessionWillPassivate(HttpSessionEvent se) //钝化(序列化到硬盘)
配置序列化Session的时机:
      方式一:tomcat/conf/context.xml :对tomcat中的所有虚拟主机和虚拟路径生效.
      方式二:tomcat/conf/Catalina/localhost/context.xml :对tomcat下的localhost虚拟主机中的所有路径生效.
      方式三:工程的META-INF/context.xml :对当前的工程生效
      添加内容:
      <!--
            maxIdleSwap        :1分钟 如果session不使用就会序列化到硬盘.
            directory        :itheima 序列化到硬盘的文件存放的位置.
      -->
      <?xml version="1.0" encoding="UTF-8"?>
      <Context>
            <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
                    <Store className="org.apache.catalina.session.FileStore" directory="itheima"/>
            </Manager>
      </Context>
      






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2