写在前面
这是一个对 mybatis 部分重要特性 的回顾, 比较简单,也没有什么组织。
JDBC编程步骤
1、 加载数据库驱动
2、 创建并获取数据库链接
3、 创建jdbc statement对象
4、 设置sql语句
5、 设置sql语句中的参数(使用preparedStatement)
6、 通过statement执行sql并获取结果
7、 对sql执行结果进行解析处理
8、 释放资源(resultSet、preparedstatement、connection)
#{} 和 ${}
#{} | 占位符,引号包起来, | 推荐使用 #{} | 预编译后变成占位符?,参数替换在DBMS,预编译后SQL 的会被缓存起来 |
${} | 拼接符, 不会会以引号包起来, | 涉及表名使用${} | 预编译已经替换好了参数 |
SQL写在 XML和 写在DAO的区别
一般是推荐前者,搞一些映射配置就行了。
后者每次SQL修改需要重编译JAVA代码。
说实话 我觉得后者方便多了 ,毕竟只需要了解一些基本注解的使用,类的创建也比XML方便,也不用维护每一个映射路径(前者好像也可以写非全路径,我用的少记不带请了)
mybatis和hibernate
hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。
对sql语句进行优化、修改比较困难的。
应用场景:
适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。
mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。
应用场景:
适用与需求变化较多的项目,比如:互联网项目。
企业进行技术选型,以低成本 高回报作为技术选型的原则,根据项目组的技术力量进行选择。
mybatis一些特殊用用法
- My Batis将CLOB类型的列映射到java.lang.String类型上、而把BLOB列映射到byte[]类型上。
- MyBatis默认从左到右给方法的参数命名为param1、param2…,依次类推。
- 多行结果集映射成Map @MapKey("Id") Map<Long, XXXDto>
- 分页手段: RowBounds ,不过我建议在SQL中直接就给它分了。
- ResultHandler : 一些灵活的 “查询结果集映射到java对象” 的例子。
- mybatis会启用一级缓存;即,如果你使用同一个session对象调用了相同的SELECT语句,则直接会从缓存中返回结果,而不是再查询一次数据库。 session调用commit或close方法后,这个session中的一级缓存就会被清空
- 二级缓存: 在不同的session对象之间可以共享缓存的数据