mybatis应用分析与最佳实践

传统的JDBC连接数据库的步骤

  1. 注册驱动,获取连接
  2. 创建Statement 对象
  3. execute()方法执行SQL
  4. 把结果集转换成POJO对象
  5. 关闭资源

当项目复杂时,使用原生的API会带来的问题:

  1. 连接资源管理的复杂,需要手动关闭连接,如果某一个连接忘记关闭,会导致系统资源的消耗。
  2. 对数据库的连接和关闭操作的与业务无关的代码的重复,造成代码的冗余。
  3. 对于查询结果集的处理过于复杂,要对查询的结果的每一个字段进行匹配
  4. sql语句直接写在java代码中, sql语句的硬编码,不利于项目的维护

SpringJDBC对数据库的处理
1.方法的封装采用 JdbcTemplate
2.资源的管理: dataSource
3. 结果集的处理: rowMapper

Apache Dbutils 与Spring JDBC 解决的问题:
1.数据连接的方法的封装
2.支持数据源
3.支持映射结果集

未解决的问题
1.SQL语句的硬编码
2.参数只能按顺序传入
3.没有实现实体类到数据库记录的映射
4.没有提供缓存等功能

ORM: Object Relational Mapping 对象关系映射
O: Object 对象 Mapping: 映射 R: Relational 关系型数据库

ORM框架之 Hibernate
使用hbm.xml或者注解将Java的实体类与数据库的字段进行对应
用session 方法提供save等增删改查的操作,将实体类对数据库进行操作.

Hibernate 的缺点

  1. 不能指定部分字段,只能操作该对象的所有的字段
  2. 无法自定义SQL, Hibernate的session提供的sql都是框架自动生成的,无法对其优化.
  3. 不支持动态sql

半自动的ORM框架: mybatis
特性:
1.使用连接池对连接进行集中的管理
2.sql和代码分离,集中管理
3.支持参数映射和动态sql
4.结果集的映射
5.缓存管理
6.重复sql的提取. 提供标签,其他地方的sql可以进行应用
7.插件机制

ORM框架选择参考
1.业务简单的项目可以使用Hibernate
2.需要灵活的SQL使用mybatis
3.对性能要求高,操作的表少,使用JDBC
4.SpringJDBC可以和ORM框架混用

mybatis的四个核心对象
1.SqlSessionFactoryBuilder
2.SqlSessionFactory
3.SqlSession
4.Mapper

SqlSessionFactoryBuilder 是用来创建SqlSessionFactory工厂类的, 工厂类是用来创建SqlSession会话的. 工厂类是要一直存在的, 因为要创建很多的会话, 但是SqlSessionFactoryBuilder对象只要生成了一个工厂类的对象, 就没有作用了.
为了节省资源,SqlSessionFactory设置为单例的.
SqlSession 为每一次的请求调用方法去调用数据库时会使用的对象.是通过工厂类产生的.
Mapper为session.getMapper的方法调用出来的. 与SqlSession的生命周期相同.

mybatis的配置文件
一. 全局配置文件Configuration.xml
父级标签configuration对应了mybatis中的org.apache.ibatis.session.Configuration类
代表在此配置文件中设置的值,都会在Configuration类中进行赋值.