A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-6-1 09:28 编辑

反射/内省/事务/TreadLocal/分页/Ajax-Json


#反射:        
    - **让方法执行,invoke()**
    - newInstance():实例化
    - setAccessible();强制
    - Constructor();构造
    - feild();属性
    - method();方法
#内省(introspector)
- 用来获取JavaBean的属性及属性的get/set方法
- Java.beans:就是一个满足了特定格式的Java类
    - 需要提供无参数的构造方法
    - 属性私有
    - 对私有的属性提供
- 通过Introspector.BeanInfo()获取类的属性名称,返回BeanInfo
- getPropertyDestriptors();类中所有的属性,返回PropertyDestriptors,Map键值对
- 只是获取类中的get和set方法
    - getReadMthod()
    - getwriterMethod()
#事务
- 逻辑上的一组操作,组成操作的各个逻辑单元一起成功,一起失败
####mysql的事务的管理:
    1. 手动开启事务:
        - start transaction
        - commit/rollback
    2. 设置一个自动提交参数:
        - show variables like '%commit%' 查看与commit相关参数
        - set autocommit = 0 将参数设置成OFF

####JDBC中的事务管理(Connection(里面也可设置隔离级别setTransactionTsolation))(面试)
        - read uncommitted(不安全,性能快):未提交读,脏读,不可重复读,虚读都可能发生
        - read committed(oracle默认),已提交读,避免脏读,但是不可重复读和虚读有可能发生
        - repeatable read(mysql默认),可重复的,避免脏读,但是虚读有可能发生
        - Serializable(安全,性能慢)串行化的,避免脏读,不可重复读,虚读的发生
        - **原子性**强调事务的不可分割
        - **一致性**,强调的是事务执行前后,数据的完整性要保持一致
        - **隔离性**,一个事务的执行不应该受到其他事务的干扰,如果不考虑事务的隔离性,会引发一系列的问题(脏读,不可重复读,幻读/虚读)
        - **引发的一些安全性的问题(ACID)**:
            - 一类是读问题:
                - 脏读:一个事务读到另一个事务还没有提交的数据
                - 不可重复读:一个事务读到了另一个事务已经提交的update数据,导致在当前的事务中多次查询结果不一致
                - 虚读/幻读(概率性,执行很多次才出现一次):一个事务读到另一个事务已经提交的insert数据,导致在当前的事务中多次的查询结果不一致
            - 一类是写问题
                - 引发两类的丢失更新(了解就行)
        - **持久性**,事务一旦结束(提交/回滚)数据就持久保存到了数据库
1. 开启事务:需要关闭自动提交
    - setAutoCommit(false);默认是turn自动提交
//业务
2. 提交事务
    - commit()
3. 回滚事务(有异常)
    - rollback();

# ThreadLocal当前线程#
    - 把Connection对象绑定当前线程
    - 注意,一个线程绑定一个Connection对象,一个线程内多个conn对象是指向同一个

# MVC和EE开发三层结构的区别 #
- 客户端层
    - java Applet
    - HTML,CSS,JS
- WEB层
    - Servlet+JSP
- 业务层
    - EJB(企业级的JAVAbean重量级的)
- 持久层

####EE开发的三层结构,详情查看图解

#商品的添加的功能:
- 重复提交的问题
    1. 添加完商品之后,转发到一个页面,刷星该页面
    2. 网速很慢,点击提交的按钮,其实已经在提交类但是网速慢,不停的点击提交
- 解决重复提交的根本解决办法:令牌机制(一次性)
    1. 生成随机的令牌保存在session中.
    2. 在表单提交的时候,将随机的令牌放入到表单的隐藏字段中
    3. 在Servlet中获取session中和表单的中的令牌是否一致
    4. 如果一致执行插入操作,不一致跳转到其他页面,将令牌销毁
#修改商品中主要记住的
- 要在修改页面的表上方加上一个隐藏字段
            
        <input type="hidden" name ="pid" value="${ product.pid }" />

- 多选或者复选框内的数据回选
   
        <c:if test="${ pd.cid==4 }">selected</c:if>

#商品分页的显示
- 分页条:
    - 首页,上一页[1][2][3][4][5][6]下一页,尾页
- 分页功能的实现:   
    1. 物理分页(一般使用这种):一次只差10条记录,点击下一页,再去查询后10条
        - 主要使用SQL语句进行控制的分页
        - 缺点:经常需要和数据库进行交互
        - 优点:如果数据量特别大,不会导致内存的溢出
    2. 逻辑分页:一次性将所有数据全都查询出来,再根据需要进行截取
        - List集合进行控制,subList()
        - 缺点:数据量如果特别大,容易导致内存的溢出
        - 优点:与数据库交互次数少
    3. 不同的数据库对分页的语句也是不一样的
        - MYSQL进行分页,limit关键字
            - select*form xxx where .. Group by ... Having...Order by ... Limit a,b; -- a:从哪里开始 b:查询的记录数
            - 根据页数去计算limit后面的连个参数
                - currPage    begin    pageSize
                    - 1             0            10
                    - 2             10        10
                    - 3               20        10
                - begin = (currPage - 1) * pageSize
            - 参数的传递
                - 前台--->后台:currPage
                - 后台--->前台:cuurPage,totalPage(总页数),totalCount(总记录数),pageSize,List集合   

            - 使用一个JavaBean封装参数:
                - 后台--->前台:传递一个JavaBean就行   
        - Oracle 进行分页,使用SQL语句嵌套
        - SQL Server 数据库进行分页:使用top关键字
#异步Ajax
- 原生的JS的写法去实现
- 利用JQ去写Ajax(重要)
- 什么是Ajax:
    1. Ajax:异步的 JavaScript And xml
        - 使用的是老技术,用的是新思想
    2. 区别:
        - 异步,局部刷新
        - 同步,全部刷新
    3. AJAX的功能:完成页面的额局部刷新,不中断用户的体验
        - 早期的时候JS技术根部不收重视,后台开发人员经常讲JS当成一种玩具式语言
        - JS中有一个对象XMLHttpRequest对象可以向服务器异步发送请求,传统的B/S结构的软件,所有实现功能都需要在服务器端写代码(胖服务器),现在有类AJAX以后,可以将部分代码写到客户端浏览器(瘦服务器---RIA:Rich Internet Application)
        - FLEX:AS脚本编程(不支持手机端,倒闭了)
        - XML:使用xml作为数据传递的格式---JSON(比较小,用的多)
# JSON轻量级的数据交换格式 #
- 可以用JavaScript直接来解析
- 对象表示为键值对
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
- JSON的数据格式

        {“id”:1,”name”:aaa}


    [{“id”:1,”name”:aaa},{“id”:2,”name”:bbb}]


    {
        “city”:{“cid”:1,”cname”:”xxx”}
    }

- JSON的生成工具
    - JSONLIB 转换JSON数据:
        * JSONArray        :将数组或List集合转成JSON.
        * JSONObject    :将对象或Map集合转成JSON.
- 刚拿到的data对象是一个文本的String字符串,还不是真正的JSON对象,
- 如果不想要,那就用这个来去除里面属性:config.setExcludes(new String [ ] { " pid " });
- 数据结构自己能手写出来


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马