Mybatis 小总结
来源:互联网 发布:龙诚健康大数据 编辑:程序博客网 时间:2024/06/14 22:08
1.mybatis和hibernate的区别?
(1) 两个最大的区别
针对简单逻辑,Hibernate和MyBatis都有相应的代码生成工具,可以生成简单基本的DAO层方法;
针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。
(2) 开发难度:
Hibernate的开发难度要大于Mybatis。主要由于Hibernate比较复杂、庞大,学习周期较长。
而Mybatis则相对简单一些,并且Mybatis主要依赖于sql的书写,让开发者感觉更熟悉。
(3) sql书写比较:
Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。
Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。
(3) 数据库扩展性比较 :
Mybatis由于所有SQL都是依赖数据库书写的,所以扩展性,迁移性比较差。
Hibernate与数据库具体的关联都在XML中,所以HQL对具体是用什么数据库并不是很关心。
(5) 日志系统:
hibernate日志系统非常健全,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;
而mybatis没有自己的日志统计,所以要借助log4j来记录日志。
(6) sql语句的优化上:
由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多。而hibernate的sql很多都是自动生成的,无法直接维护sql。
2.为什么 dbutils 或 SpringJdbcTempate 不能称为是框架, 而mybatis可以称之为框架?
因为 dbutils 或 SpringJdbcTempate 不能去映射关联关系,而mybatis可以。
3.mybatis 中$ 和 #的区别?
#{}表示一个占位符号 :
1.#{}相当于preparedStatement中的占位符赋值
2.自动进行java类型和jdbc类型转换
3.防止sql注入
4.可以接收简单类型值或pojo属性值
5.传输单个简单类型值,#{}括号中可以是任意名称
6.#传入的数据,在mysql中会被当成字符串,自动加个双引号,很大程度防止sql注入,安全的。
${}表示拼接sql拼串,将parameterType 传入的内容拼接在sql中:
1.不把java类型转为jdbc类型
2.可以接收简单类型值或pojo属性值
3.parameterType传输单个简单类型值,${}括号中只能是value。
4.$传入的数据会直接显示在sql中,一般传数据库对象(列名),它不能防止sql的注入,不安全。
说明:MyBatis排序时使用order by 动态参数时需要注意,用$而不是#;
4. mybatis配置文件中, parameterType、resultType、resultMap三者有什么区别?
parameterType是在mapperxml文件CRUD进行传参的属性,可以不指定。
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap。resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。
实现原理:
在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性,所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
5.ofType和JavaType的区别?
都是指定对象的类型 不同的是当使用反向查询select从另一个maper文件中取出数据时必须用ofType ,都可以为collection和association是指定对象的类型, ,都不是必须写的, 只有反向select时需要ofType.
6.mybatis在xml文件中处理大于号小于号的方法
(1) 第一种方法:
用了转义字符把>和<替换掉,然后就没有问题了。
附:XML转义字符
(2) 第二种方法:
因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析,例如:
Mybatis相关练习源码请参考:https://github.com/luomingkui/Mybatis
阅读全文
0 0
- mybatis的小总结
- mybatis小坑总结
- Mybatis 小总结
- Mybatis 小总结
- mybatis小坑总结帖
- Spring+Mybatis J2SE小例总结
- 小程序员的日常总结之mybatis
- mybatis中sql写法技巧小总结
- (5)MyBatis小总结:一个简单的例子
- mybatis配置的一些小问题总结 mybatis报错:org.mybatis.spring.MyBatisSystemException: nested exception is org.apach
- mybatis总结
- MyBatis总结
- MyBatis 总结
- mybatis 总结
- mybatis--总结
- Mybatis总结
- mybatis 总结
- mybatis总结
- HDU1054 Strategic Game(二分图最小点集覆盖,König定理)
- bootstrapTable后端分页
- debian 8.2 + apt-get + mongodb 3.2
- @JsonIgnore注解
- CDH 自定义添加Spark2服务
- Mybatis 小总结
- 一名前端工程师的自学之路,Js篇(11-16更新)
- 菜鸟(第二题)
- Android RecyclerView更新某条/一条数据
- 输入n,计算2的n次幂
- UDP打洞(成功打洞)
- 友盟数据平台负责人吴磊:移动大数据平台的架构与实践
- maven项目pom文件(3)-将项目依赖的jar拷贝到指定文件夹
- TextView常用属性