凭hash就是location的1个属性吗?

3.利用hash技术解决以上提到的Ajax的两个缺陷比较成熟的应用举例
Gmail可以说是把Ajax技术用到了极致,Google采用hash来解决Ajax技术的两大缺陷。

}
  • 作用:location是window对象的一个属性,本身也是对象类型,它的作用是用来获取文档对象的相关信息,如文档的URL地址信息。

    二、location对象常用的属性:

    作用:获取或设置窗口中的url地址信息

    获取格式:)加载新的文档

    2、)// 新的文档替换当前文档。
  • 本文将与大家分享下location对象使用属性和方法来解析URL的实例,感兴趣的朋友可以参考下,希望对你有所帮助


  • 本文实例讲述了JS基于Location实现访问Url、重定向及刷新页面的方法。分享给大家供大家参考,具体如下: js通过Location实现访问')" />

  • 在我的上一篇文章中主要介绍了window对象的常用属性和screen对象:点击打开链接点击此链接可以查看 Location对象也有一系列的属性: hash:设置或返回从井号(#)开始的URL host:设置或返回主机名和当前URL的...

  • 兼容性问题 最近在项目开发中遇到了一个问题,客户的需求是要根据URL中传入...

  • 获取变量的值(截取等号...

  • IE下window.lcoation可以被重写而不重新定向,具体方法是: var location = {},然后就可以重写具体的属性了,这样会对通过js判断location带来了一定风险。 如何判断location是否被重写了?折腾了一个下午,折腾了一...

  • }
    • 持久化就是将程序的数据在持久化和瞬时状态转化的过程
    • 数据库(jdbc),io文件持久化
    • 有一些对象,不能让他丢掉
    • 完成持久化工作的代码块
    • 帮助程序员将数据存入到数据库中
    • 传统的JDBC代码太复杂了。简化 框架。自动化
    • 不用MyBatis也可以。更容易上手。技术没有高低之分
      • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
      • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
      • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
      • 提供映射标签,支持对象与数据库的orm字段关系映射
      • 提供对象关系映射标签,支持对象关系组建维护
      • 提供xml标签,支持编写动态sql。
    1. 新建一个普通的Maven项目
    2. 删除src目录(变为父工程,后续会减少导包的重复性)
    • 编写Mybatis的核心配置文件
    
     
    
    
     
     
     
    
    • 接口实现类由原来的UserDaoImpl转换为一个mapper配置文件

    核心配置文件中注册mappers

    1. Maven导出资源问题
    2. 注意在mybatis核心配置文件中,每一个Mapper.xml都需要在Mybatis核心配置文件中注册
    • id:就是对应的namespace中的方法名;
    
    

    2、编写对应的mapper中的sql执行语句

    
    

    2、编写对应的mapper中的SQL执行语句

    
    
    
    

    2、编写对应的mapper中的SQL执行语句

    
    

    2、编写对应mapper中的sql执行语句

    • 程序配置文件必须符合规范;报错信息是从后往前读
    • 输出的xml文件中出现中文乱码的问题
    • maven资源没有导出问题

    假设我们的实体类,数据库中的表,字段或者参数过多,我们应当考虑使用Map

    
    

    对象传递参数,直接在sql中去对象的额属性即可!【parameterType=“Object”】

    只有一个基本类型参数的情况下,可以直接在sql种取到!

    多个参数用Map,或者注解

    1、java代码执行的时候,传递通配符%%

    2、在sql拼接中使用通配符!

    • Mybatis的配置文件包含了会深深影响mybatis行为的设置和属性信息

    Mybatis可以配置成适应多种环境

    尽管可以配置多个环境,但是每个SQLSessionFactory实例只能选择一种环境

    学会使用配置多套运行环境

    连接池:这是一种使得并发web应用快速响应请求的流行处理方式。

    我们可以通过properties属性来实现引用配置文件的

    这些属性都是可外部配置且可动态替换的,既可以在典型的java属性文件中配置,也可以通过properties元素的子元素来传递。【db.properties】

    注意:在xml中所有的配置文件必须要保持顺序

    • 可以在其中增加一些属性配置
    • 如果两个文件有同一个字段,优先使用外部配置文件
    • 类型别名可为Java类型设置一个缩写名字。它仅用于XML配置
    • 意在降低冗余的权限定类名书写

    也可以指定一个包,每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author,;若有注解,则别名为其注解值。见下面的例子:

    在实体类比较少的时候,使用第一种方式。

    如果实体类十分多,建议用第二种扫描包的方式。

    第一种可以DIY别名,第二种不行,如果非要改,需要在实体上增加注解。

    这是mybatis极为重要的调整设置,他们会改变Mybatis的运行时行为。

    方式二:使用class文件绑定注册

    • 接口和他的Mapper配置文件必须同名
    • 接口和他的Mapper配置文件必须在同一个包下

    方式三:使用包扫描进行注入

    生命周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题。

    • 说变了就是可以想象为:数据库链接池
    • SqlSessionFactory一旦被创建在应用的运行期间一直存在,没有任何理由丢弃它或者重新创建一个实例
    • 最简单的使用单例模式或静态单例模式
    • 连接到连接池的一个请求
    • SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
    • 用完之后需要赶紧关闭,否则资源被占用!

    这里的每一个Mapper,就代表一个具体业务

    新建一个项目,拷贝之前的,测试实体类字段不一致的情况

    测试出现问题,password的值为空

    • ResultMap 的设计思想是,对简单的语句根本不需要配置显式的结果映射,对于复杂一点的语句,只需要描述语句之间的关系就行了。
    • ResultMap 的优秀之处——你完全可以不用显式地配置它们,简而言之就是

    如果一个数据库操作,出现了异常,我们需要排错,那么日志是最好的助手

    在Mybatis中具体使用哪一日志实现,在设置中设定

    • Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件;
    • 我们也可以控制每一条日志的输出格式;
    • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程;
    • 最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

    4.Log4j的使用,直接测试运行查询

    4、之后可在log文件夹中查看日志文件信息

    
    

    不再使用SQL实现分页

     
    
    • 之前学过面向对象编程,也学习过接口,但在真正的开发中,很多时候会选择面向接口编程。

    • 根本原因:解耦,可拓展,提高复用,分层开发中,上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性更好

    • 在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;

    • 而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。

    本质:反射机制实现(java所有的框架都是基于反射实现的)

    1、在MybatisUtils工具类创建的时候实现自动提交事物!

    2、编写接口,增加注解

    【注意:我们必须要将接口注册绑定到我们的核心配置文件中!】

    • 基本类型的参数或者String类型,需要加上
    • 如果只有一个基本类型的话,可以忽略,但是建议都加上!
    • 我们在SQL中引用的就是我们这里的@Param(“ ”)中设定的属性名!

    Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。

    1. 在实体类上加注解即可!
    • 多个学生,对应一个老师
    • 对于学生而言,关联—多个学生,管联一个老师【多对一】
    • 对于老师而言,集合—一个老师,有很多个学生【一对多】

    5.在核心配置文件中绑定注册我们的Mapper接口或者文件

    6.测试查询是否能成功!

    按照结果查询嵌套(推荐使用)

    回顾Mysql多对一查询方式:

    比如:一个老师拥有多个学生

    对于老师而言,就是一对多的关系

    1.环境搭建,和刚才一样

      1. javaType用来指定实体类中属性的类型
      2. ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型
    • 保证SQL的可读性,尽量保证通俗易懂
    • 注意一对多和多对一中,属性名和字段的问题!
    • 如果问题不好排查错误,可以使用日志,推荐使用Log4j

    什么是动态SQL:动态SQL就是指根据不同的条件生成不同的SQL语句

    利用动态SQL这一特性可以彻底拜托这种痛苦。

    在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式,
    MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。
    
    1. mybatis核心配置文件,下划线驼峰自动转换
    
    

    需求:根据作者名字和博客名字来查询博客!如果作者名字为空,那么只根据博客名字查询,反之,则根据作者名来查询

    
    
    根据作者名字和博客名字来查询博客! 如果作者名字为空,那么只根据博客名字查询,反之,则根据作者名来查询

    修改上面的SQL语句:

    同理,上面的对于查询SQL语句包含where关键字,如果在进行更新操作的时候,可以使用set语句

    1. SQL配置文件(注意set语句后面的“,”会在查询的时候自动去除,就像choose的when)

    有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose 标签可以解决此类问题,类似于 Java 的 switch 语句

    所谓的动态SQL,本质还是SQL语句,只是我们可以在SQL层面,去执行一个逻辑代码

    有时候可能某个 sql 语句我们用的特别多,为了增加代码的重用性,简化代码,我们需要将这些代码抽取出来,然后使用时直接调用。

    ①、最好基于 单表来定义 sql 片段,提高片段的可重用性

    • 动态 SQL 的另一个常见使用场景是对集合进行遍历(尤其是在构建 IN 条件语句的时候)。
    • foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量。它也允许你指定开头与结尾的字符串以及集合项迭代之间的分隔符。这个元素也不会错误地添加多余的分隔符。
    collection:指定输入对象中的集合属性 item:每次遍历生成的对象 open:开始遍历时的拼接字符串 close:结束时拼接的字符串 separator:遍历对象之间需要拼接的字符串

    小结:其实动态 sql 语句的编写往往就是一个拼接的问题,为了保证拼接准确,我们最好首先要写原生的 sql 语句出来,然后在通过 mybatis 动态sql 对照着改,防止出错。

    多在实践中使用才是熟练掌握它的技巧。

    1.什么是缓存【cache】?

    • 将用户经常查询的数据放在缓存(内存中),用户去查询数据就不用从磁盘上(关系型数据库数据库文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。
    • 减少和数据库的交互次数,减少系统开销,提高系统效率

    3.什么样的数据能使用缓存

    • 经常查询并且不经常改变的数据
    • Mybatis包含一个非常强大的查询缓存特性,他可以非常方便的顶置和配置缓存。缓存可以吉大的提升查询效率。

    • mybatis系统默认定义了两种缓存:一级缓存和二级缓存

      • 默认情况下,只有一级缓存开启(SqlSession级别的缓存,也称为本地缓存)
      • 二级缓存需要手动开启和配置,他是基于namespace级别的缓存
      • 为了提高扩展性,Mybatis定义了缓存接口Cache。我们可以通过Cache接口来自定义二级缓存

    一级缓存也叫本地缓存:

    • 与数据库同一次会话期间查询到的数据会放在本地缓存中。
    • 以后如果需要获取相同的数据,直接从缓存中拿,没必须再去查询数据库;

    1、在mybatis中加入日志,方便测试结果

    
    

    3、接口对应的Mapper文件

    一级缓存失效的四种情况

    一级缓存是SqlSession级别的缓存,是一直开启的,我们关闭不了它;

    一级缓存失效情况:没有使用到当前的一级缓存,效果就是,还需要再向数据库中发起一次查询请求!

    观察结果:发现发送了两条SQL语句!

    结论:每个sqlSession中的缓存相互独立

    观察结果:发现发送了两条SQL语句!很正常的理解

    结论:当前缓存中,不存在这个数据

    3、sqlSession相同,两次查询之间执行了增删改操作!

    
    

    观察结果:查询在中间执行了增删改操作后,重新执行了

    结论:因为增删改操作可能会对当前数据产生影响

    4、sqlSession相同,手动清除一级缓存

    小结:一级缓存默认是开启的,只在一次SqlSession中有效,也就是拿到连接到关闭连接这个区间段!
    一级缓存相当于一个Map。

    • 二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存
    • 基于namespace级别的缓存,一个名称空间,对应一个二级缓存;
      • 一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中;
      • 如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中;
      • 新的会话查询信息,就可以从二级缓存中获取内容;
      • 不同的mapper查出的数据会放在自己对应的缓存(map)中;

    2、去每个mapper.xml中配置使用二级缓存,

    官方示例=====>查看官方文档 这个更高级的配置创建了一个 FIFO 缓存,每隔 60 秒刷新, 最多可以存储结果对象或列表的 512 个引用,而且返回的对象被认为是只读的, 因此对它们进行修改可能会在不同线程中的调用者产生冲突。
    • 所有的实体类先实现序列化接口
    • 只要开启了二级缓存,我们在同一个Mapper中的查询,可以在二级缓存中拿到数据
    • 查出的数据都会被默认先放在一级缓存中
    • 只有会话提交或者关闭以后,一级缓存中的数据才会转到二级缓存中

    第三方缓存实现–EhCache: 查看百度百科

    Ehcache是一种广泛使用的java分布式缓存,用于通用缓存;

    要在应用程序中使用Ehcache,需要引入依赖的jar包

    在mapper.xml中使用对应的缓存即可

    编写ehcache.xml文件,如果在加载时未找到/ehcache.xml资源或出现问题,则将使用默认配置。

    diskStore:为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。参数解释如下: defaultCache:默认缓存策略,当ehcache找不到定义的缓存时,则使用这个缓存策略。只能定义一个。 eternal:对象是否永久有效,一但设置了,timeout将不起作用。 timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。 timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。 clearOnFlush:内存数量最大时是否清除。 LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。 LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

    合理的使用缓存,可以让我们程序的性能大大提升!

    配置Maven静态资源过滤问题!

    14.2、编写配置文件

    接口对应的Mapper映射文件

    }

    我要回帖

    更多关于 hashtable允许null键和值吗 的文章

    更多推荐

    版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

    点击添加站长微信