Mybatis框架Mybatis介绍
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了Google,并且改名为MyBatis 。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的 XML 或注解来配置和映射基本体,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
Mybaties封装了JDBC的很多细节,使开发者只需要关注sql语句本身,无需关注注册驱动,创建连接等繁杂过程。使用了ORM思想实现了结果集的封装。
二、JDBC问题分析
1.一个JDBC编码例子
一个JavaWeb中连接数据库的代码如下:
详细的步骤可以参照———JDBC编程步骤。
package jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Date;/** * 类说明: * JDBC创建PreparedStatement对象连接数据库 * @author qianliangguo */public class testPreparedStatement { public static void main(String[] args) { Connection conn = null; PreparedStatement pstm = null; ResultSet rs = null; try { // 1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); // 2.获取连接 String url = "jdbc:mysql://localhost:3306/mybase?useUnicode=true&characterEncoding=utf-8"; String user = "root"; String password = "Hudie"; conn = DriverManager.getConnection(url, user, password); // 3.创建PreparedStatement,预编译sql语句 String sql = "select * from emp where job=?"; pstm = conn.prepareStatement(sql);//创建sql半成品 pstm.setString(1,"clerk");//参数绑定 //4.执行sql语句 rs = pstm.executeQuery(); //5.处理结果集 while(rs.next()){ int empno = rs.getInt("empno"); String ename = rs.getString("ename"); String job = rs.getString(3); int mgr = rs.getInt("mgr"); Date hiredate = rs.getDate(5); double sal = rs.getDouble("sal"); double comm = rs.getDouble("commit"); int deptno = rs.getInt(8); System.out.println(empno+" "+ename+" "+job+" "+mgr+" "+hiredate+" "+sal+" "+comm+" "+deptno); } } catch (Exception e) { e.printStackTrace(); } finally { // 6.关闭连接/释放资源 try { rs.close(); pstm.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }}
2.JDBC编码问题分析
数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能。
如果使用数据库链接池可解决此问题。
Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java代码。
设想:把sql语句写在一个配置文件中,修改配置文件中的sql语句就行了。
使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。
设想:sql语句中的占位符及其参数写在一个配置文件中,自动的完成参数的输入。(输入映射)
对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便。
设想:查询的结果和Java对象可以自动完成映射。(输出映射)
二、持久层框架
1.Hibernate
Hibernate是一个全自动ORM(Object Relation Mapping),旨在消除sql。但这也是把双刃剑,直接造成了herbinate的优化成本高。
2.Mybaties
Mybaties是一个半自动,轻量级的框架。sql与Java编码分离,sql由开发人员控制。
三、MyBatis优缺点
总结:Mybatis的优点同样是Mybatis的缺点,正因为Mybatis使用简单,数据的可靠性、完整性的瓶颈便更多依赖于程序员对sql的使用水平上了。sql写在xml里,虽然方便了修改、优化和统一浏览,但可读性很低,调试也非常困难,也非常受限。Mybatis没有hibernate那么强大,但是Mybatis最大的优点就是简单小巧易于上手,方便浏览修改sql语句。
1.优点
①简单易学。(mybatis本身就很小且简单。没有任何第三方依赖)
②灵活。(sql写在xml里,便于统一管理和优化)
③解除sql与程序代码的耦合。(通过提供DAL层,将业务逻辑和数据访问逻辑分离)
④提供映射标签,支持对象与数据库的orm字段关系映射。
⑤提供对象关系映射标签,支持对象关系组建维护。



共有 0 条评论