Mybatis概述

mybatis概述

1 mybatis爆发的义

  传统的jdbc, 及其在的题材

package cn.rodge.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * jdbc测试程序
 * @author Rodge
 */
public class JDBCDemo {
    private static String driverClass = “com.mysql.jdbc.Driver”;
    private static String url = “jdbc:mysql://localhost:3306/mybatis”;
    private static String user = “root”;
    private static String password = “123”;
    
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
            //1.注册驱动
            Class.forName(driverClass);
            //2.获取连接
            connection = DriverManager.getConnection(url, user,
password);
            //3.编写sql语句
            String sql = “select * from user where username = ?”;
            //4.创建statement
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, “王五”);
            //5.查询得到重返结果
            resultSet = preparedStatement.executeQuery();
            //6.遍历查询结果
            while (resultSet.next()) {
                System.out.println(resultSet.getString(“id”) + ”   ” +
resultSet.getString(“username”));
            }
        } catch (ClassNotFoundException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            //释放资源
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    connection = null;
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    preparedStatement = null;
                }
            }
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    resultSet = null;
                }
            }
        }
        
    }
}
  传统jdbc存在的题材

1.
数据库链接的频繁创造与释放会促成系统资源的荒废,从而影响系性能—>数据库连接池可以解决这些题材;

  解决:在SqlMapConfig.xml中布局数据链接池,使用连接池管理数据库链接。

2. 数据库连接音信与sql语句以次中的硬编码, 
造成代码是维护,在实质上接纳被sql语句的生成可能相比生,
sql语句的改变会导致java代码的更动;

  解决:Mybatis将Sql语句配置在XXXXmapper.xml文件中及java代码分离。

3.
利用preparedStatement向占位符?中传唱参数有硬编码,因为sql语句中where条件不自然,可能多吗或丢掉,还生或改动SQL语句,不便民系统保障;

  解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的项目。

4.
针对结果集的辨析是硬编码(查询列名),sql变化导致解析代码变化,不便于系统保障,
假设能查询数据库的结果封装成pojo对象,这样分析起来就较好

  解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的型。

   针对上述jdbc存在的题目, mybatis提供了缓解方案:

  MyBatis
本是apache的一个开源项目iBatis, 二零一零年是类型由apache software
foundation 迁移到了google code,并且改名为MyBatis
。二〇一三年2月动迁到Github。

   MyBatis是一个帅之持久层框架,它对jdbc的操作数据库的过程举办包装,使开发者只待关注 SQL 本身,而未需要花精力去处理例如登记驱动、创立connection、创立statement、手动设置参数、结果集检索等jdbc繁杂的历程代码。

  Mybatis通过xml或阐明的章程将执行之各样statement(statement、preparedStatemnt、CallableStatement)配置起,并由此java对象以及statement中之sql进行映射生成最后实施的sql语句,最后由mybatis框架执行sql并拿结果映射成java对象并回到。

2 mybatis基本架构

 图片 1

1)  mybatis配置

  SqlMapConfig.xml,此文件作为mybatis的大局配置文件,配置了mybatis的周转条件等消息。

  mapper.xml文件就sql映射文件,文件中布局了操作数据库的sql语句。此文件要以SqlMapConfig.xml中加载。

2)  通过mybatis环境异常布置音讯构造SqlSessionFactory即会话工厂

3)  由会话工厂创建sqlSession即会话,操作数据库需要经过sqlSession举行。

4)  mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有一定量单实现,一个是着力执行器、一个凡是缓存执行器。

5)  Mapped
Statement也是mybatis一个根封装对象,它包裹了mybatis配置信息以及sql映射消息万分。mapper.xml文件中一个sql对许一个Mapped
Statement对象,sql的id即凡Mapped statement的id。

6)  Mapped Statement对sql执行输入参数举办定义,包括HashMap、基本项目、pojo,Executor通过Mapped
Statement在推行sql前以输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

7)  Mapped Statement对sql执行输出结果开展定义,包括HashMap、基本类型、pojo,Executor通过Mapped
Statement在尽sql后以出口结果映射至java对象吃,输出结果映射过程分外给jdbc编程中针对结果的分析处理过程。

3 mybatis与hibernate不同

  Mybatis和hibernate不同,它不全是一个ORM框架,因为MyBatis需要程序员自己编排Sql语句,不过mybatis可以通过XML或注明模式灵活安排要运行的sql语句,并以java对象及sql语句映射生成最后实施之sql,最后将sql执行的结果又映射生成java对象。

  Mybatis学习窍门低,简单易学,程序员间接编写原生态sql,可严酷控制sql执行性,灵活度高,异常适合对关周到据模型要求未赛的软件开发,例如互联网软件、集团运营类软件等,因为当时类软件需要转变频繁,一但求变动要求成果输出快捷。可是活的前提是mybatis不能做到数据库无关性,假使需要贯彻襄助多数据库的软件则要打定义多套sql映射文件,工作量非凡。

  Hibernate对象/关系映射能力强,数据库无关性好,对于涉及模型要求高的软件(例如需要稳定的定制化软件)如若就此hibernate开发可以节省成千上万代码,提升效用。但是Hibernate的读书窍门高,要通门槛再强,而且怎么设计O/R映射,在性和目的模型中怎么衡量,以及怎么着用好Hibernate需要拥有非凡强之经验与力才行。

  可想而知,按照用户之求于简单的资源环境下如能做出维护性、扩充性卓绝的软件架构都是好搭,所以框架只有符合才是极其好。

 

网站地图xml地图