Java知识点学习(第14天)
Mybatis的优缺点?
优点:
- 基于SQL语句编程,相当灵活,不会对程序或数据库的现有设计造成影响,SQL写在XML中,解除了SQL和程序的耦合,便于统一管理,同时支持编写动态SQL,可重用。
- 与JDBC相比,减少了大量的代码量,消除了JDBC大量的冗余代码,不需要手动开关连接。
- 很好的与各种数据库兼容(因为Mybatis使用JDBC来连接数据库,所以只要JDBC支持的数据库Mybatis都支持)。
- 能够与Spring很好的集成。
- 提供映射标签,支持对象与数据库的ORM字段关系映射,提供对象关系映射。
缺点:
- SQL 语句的编写工作量较大,对开发人员的SQL语句功底有有定的要求。
- SQL语句依赖于数据库,导致数据库移植性性差,不能随意更换数据库.
#{}和${}的区别是什么?
- #{}是预编译处理,是占位符,${}是字符串替换、是拼接符。
- Mybatis在处理#{}时,会将sql中的#{}替换成?号,调用PrepareStatement来赋值。
- Mybatis在处理${} 时,会将sql中的 ${}替换为变量的值,调用Statement来赋值。
- 使用#{}可以有效防止SQL注入,提供系统的安全性。
索引的基本原理
索引用来快速地寻找那些具有特定值的记录,如果没有索引,一般说执行查询时需要遍历整张表。索引的原理就是把无序的数据变成有序的数据。
- 把创建了索引的列的内容进行排序。
- 对排序结果生成倒排表。
- 在倒排表内容上拼接上数据地址链。
- 在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据。
索引设计的原则
总体的设计原则是查询更快、占用空间更小。
- 适合索引的列是出现在where子句,或者连接子句中指定的列。
- 基数较小的表,索引效果较差,没有必要在此列建立索引。
- 使用短索引,如果对长字符串进行索引,应该指定一个前缀长度,这样能够节省大量的索引空间,如果搜索词超过了索引的前缀长度,则使用索引排除不匹配的行,然后检查其余行是否可能匹配。
- 不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以只保持需要的索引有利于查询即可。
- 定义有外键的数据列一定要建立索引。
- 更新频繁字段不适合创建索引。
- 若是不能有效区分数据的列不合适做索引列(如性别,男女未知,最多就三种情况,区分度很小)。
- 尽量的拓展索引而不是新增索引。如果表中已经有了a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
- 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。
- 对于定义为text、image和bit的数据类型的列不要建立索引。