What
Mybatis是持久层ORM框架,它是对于JDBC的封装,支持定制的SQL、存储过程以及高级映射,然后避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJO映射成数据库的记录。
核心系统架构图
- SqlSessionFactoryBuilder接收SqlMapConfig.xml文件流,构建出SqlSessionFactory对象。
- SqlSessionFactory读取SqlmapConfig.xml连接数据库和mapper映射信息。用来生产出真正操作数据库的SqlSession对象。
- SqlSession执行拼接好的SQL,然后输出映射
- Statement查询数据库;
对于JDBC的优化
-问题一: JDBC中数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能
解决方案:使用数据库链接池可解决这个问题,在 SqlMapConfig.xml 中配置数据链接池,使用连接池管理数据库链接。
问题二:Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大, sql 变动需要改变 java 代码。
解决方案:将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。
问题三:向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参数对应。
解决方案:Mybatis 自动将 java 对象映射至 sql 语句,通过 statement 中的 parameterType 定义输入参数的类型。
问题四:对结果集解析麻烦, sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成 pojo 对象解析比较方便。
解决方案:Mybatis 自动将 sql 执行结果映射至 java 对象,通过 statement 中的 resultType 定义输出结果的类型
输入参数深入
使用标签的 parameterType 属性来设定。该属性的取值可以是基本类型,引用类型(例如:String 类型),还可以是实体类类型(POJO 类)。同时也可以使用实体类的包装类。
注意:
- 基 本 类 型 和 String 我 们 可 以 直 接 写 类 型 名 称 , 也 可 以 使 用 包 名 . 类 名 的 方 式 , 例 如 :java.lang.String。
- 实体类类型,目前我们只能使用全限定类名。
输出结果封装
resultType 属性可以指定结果集的类型,它支持基本类型和实体类类型。它的使用和parameterType类型一样。
数据源分类
1.UnPooled
 这是不使用连接池的数据源,然后在进行dataSource连接的时候,需要重新创建连接,以及断开连接,这是比较耗时。
2.Pooled
&mesp;数据的连接、断开在连接池中取,这样提高了效率。在 Mybatis 的 SqlMapConfig.xml 配置文件中, 通过来实现 Mybatis 中连接池的配置。
3.JNDI
Java 命名与目录接口(Java Naming and Directory Interface).在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。