关于java:在上海乐字节学习的第二十八天持续更新中

2次阅读

共计 3929 个字符,预计需要花费 10 分钟才能阅读完成。

为什么要学习 mybatis

学习 mybatis 之前肯定要先有 jdbc 编程根底,不然你就不能很好的了解为什么要学习 mybatis。

所以思考到初学者可能没有 jdbc 肯定的根底,所以尽量让大家都能看懂,能深刻理解学习 mybatis 的

作用,我在上面应用 jdbc 的原始办法(未经封装),让初学者也能有 jdbc 的肯定了解!

jdbc 编程步骤:

1、加载数据库驱动
2、创立并获取数据库链接
3、创立 jdbc statement 对象
4、设置 sql 语句
5、设置 sql 语句中的参数 (应用 preparedStatement)
6、通过 statement 执行 sql 并获取后果
7、对 sql 执行后果进行解析解决
8、开释资源 (resultSet、preparedstatement、connection)

jdbc 的原始办法(未经封装)实现查询数据库表记录

public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;

try {
    // 加载数据库驱动
    Class.forName("com.mysql.jdbc.Driver");

    // 通过驱动治理类获取数据库链接
    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
    // 定义 sql 语句 ? 示意占位符
    String sql = "select * from user where username = ?";
    // 获取预处理 statement
    preparedStatement = connection.prepareStatement(sql);
    // 设置参数,第一个参数为 sql 语句中参数的序号(从 1 开始),第二个参数为设置的参数值
    preparedStatement.setString(1, "王五");
    // 向数据库收回 sql 执行查问,查问出后果集
    resultSet = preparedStatement.executeQuery();
    // 遍历查问后果集
    while (resultSet.next()) {System.out.println(resultSet.getString("id") + "" + resultSet.getString("username"));
    }
} catch (Exception e) {e.printStackTrace();
} finally {
    // 开释资源
    if (resultSet != null) {
        try {resultSet.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();}
    }
    if (preparedStatement != null) {
        try {preparedStatement.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();}
    }
    if (connection != null) {
        try {connection.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();}
    }
} 

}

jdbc 问题总结:

1、数据库连贯创立、开释频繁造成系统资源节约,从而影响零碎性能。如果应用数据库连接池可解决此问题。
2、Sql 语句在代码中硬编码,造成代码不易保护,理论利用中 sql 变动的可能较大,sql 变动须要扭转 java 代码。
3、应用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不肯定,可能多也可能少,批改 sql 还要批改代码,零碎不易保护。
对后果集解析存在硬编码(查问列名),sql 变动导致解析代码变动,零碎不易保护,如果能将数据库记录封装成 pojo 对象解析比拟不便。

Mybatis 解决 jdbc 编程的问题

1、数据库连贯创立、开释频繁造成系统资源节约从而影响零碎性能,如果应用数据库连接池可解决此问题。
解决:在 SqlMapConfig.xml 中配置数据连接池,应用连接池治理数据库链接。
2、Sql 语句写在代码中造成代码不易保护,理论利用 sql 变动的可能较大,sql 变动须要扭转 java 代码。
解决:将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码拆散。
3、向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不肯定,可能多也可能少,占位符须要和参数一一对应。
解决:Mybatis 主动将 java 对象映射至 sql 语句,通过 statement 中的 parameterType 定义输出参数的类型。
4、对后果集解析麻烦,sql 变动导致解析代码变动,且解析前须要遍历,如果能将数据库记录封装成 pojo 对象解析比拟不便。
解决:Mybatis 主动将 sql 执行后果映射至 java 对象,通过 statement 中的 resultType 定义输入后果的类型。

jdbc 存在的各种问题,然而在 mybatis 中能够失去很好地解决,所以咱们要学习 mybatis 框架,在企业应用 mybatis 框架也是十分宽泛的。

Mybatis 是什么

MyBatis 本是 apache 的一个开源我的项目 iBatis, 2010 年这个我的项目由 apache software foundation 迁徙到了 google code,并且改名为 MyBatis。2013 年 11 月迁徙到 Github。
MyBatis 是一个优良的长久层框架,它对 jdbc 的操作数据库的过程进行封装,使开发者只须要关注 SQL 自身,而不须要破费精力去解决例如注册驱动、创立 connection、创立 statement、手动设置参数、后果集检索等 jdbc 繁冗的过程代码。
Mybatis 通过 xml 或注解的形式将要执行的各种 statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过 java 对象和 statement 中的 sql 进行映射生成最终执行的 sql 语句,最初由 mybatis 框架执行 sql 并将后果映射成 java 对象并返回。

Mybatis 外围架构

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 编程中对后果的解析处理过程。

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 须要具备很强的教训和能力才行。
总之,依照用户的需要在无限的资源环境下只有能做出维护性、扩展性良好的软件架构都是好架构,框架只有适宜才是最好。

其实很多根本都是引入各自的 jar 包,从而调用各自特有的性能。

正文完
 0