MyBatis 介绍、简单入门程序

JDBC 编程中的问题


        1. 将 SQL 语句硬编码到 Java 代码。不利于系统维护。

            设想怎样解决:将SQL单独抽取出来,在配置文件(xml方式、properties文件)进行配置。

        2. 数据库连接不能反复利用,对数据库资源是一中浪费。
            设想怎样解决:使用数据库连接池管理数据库连接。

        3. 向 Statement 设置參数时,对于參数的位置通过硬编码指定,不利于系统维护。

            设想怎样解决:是否可以自己主动将 Java 对象的值设置到 Statement。

        4. 遍历结果集。resultSet.getString硬编码指定列名称。

            设想怎样解决:是否能自己主动将 SQL 查询结果集转成 Java 对象。


MyBatis 介绍


        MyBatis 本是 Apache 的一个开源项目 iBatis,2010年这个项目由 Apache software foundation 迁移到 google code,而且改名为 MyBatis。

        MyBatis 是一个优秀的持久层框架。它对 JDBC 的操作数据库的过程进行封装,使开发人员仅仅须要关注 SQL 本身,而不须要花费精力去处理比如注冊驱动、创建 connection、创建 statement、手动设置參数、结果集检索等 JDBC 繁杂的过程代码。

        MyBatis 通过 xml 或主键的方式将要运行的 statement 配置起来,并通过 Java 对象和 statement 中的 SQL 进行映射生成终于运行的 SQL 语句,最后由 MyBatis 框架运行 SQL 并将结果映射成 Java 对象并返回。


        MyBatis 是一个不全然的 ORM 框架。MyBatis 也可以进行对象关系映射,可是还是须要手动写 SQL 语句。Hibernate 对JDBC 的封装比較深,是一个全然的优秀的 ORM 框架,全然实现了 Java 对象到关系的映射,SQL 不须要手动编写。

Mybatis 框架


        Mybatis配置
        

        1. SqlMapConfig.xml 是 MyBatis 的核心配置文件。配置了数据源(连接池)、事务。mapper.xml 是 MyBatis 的映射文件。
        2. SqlSessionFactory 会话工厂,用户生产会话SqlSession。

        3. SqlSession 会话,是一个面向用户的门面接口。用于操作数据库(CRUD)。
        4. Executor 运行器。SqlSession 内部通过 Executor 操作数据库,Executor 须要使用 Mapped Statement 中封装的数据信息来操作数据库。

        5. Mapped Statement 是 MyBatis 一个底层封装对象,封装了 SQL 语句、传入 SQL 语句的參数,将 SQL 查询结果映射成 Java 对象。

Mybatis 入门程序


        

Mybatis 是怎样解决JDBC的问题


        1. 将SQL语句硬编码到Java代码。不利于系统维护。
            设想怎样解决:将SQL单独抽取出来,在配置文件(xml方式、properties文件)进行配置。

            在 MyBatis 的映射文件(如:User.xml)配置sql语句。
    
        2. 数据库连接不能反复利用,对数据库资源是一中浪费。

            设想怎样解决:使用数据库连接池管理数据库连接。

            在 SqlMapConfig.xml 下的 environments 节点配置了连接池。


        3. 向 Statement 设置參数时。对于參数的位置通过硬编码指定,不利于系统维护。

(如 preparedStatement.setString(1,"jerome"))

            设想怎样解决:是否可以自己主动将 Java 对象的值设置到 Statement。
            在User.xml中通过 paramenterType,输入參数的类型,在sql语句通过#{}表示占位符号,{}写的是po的属性名,完毕自己主动将 Java 对象映射到 SQL 语句中。

    
        4. 遍历结果集。resultSet.getString 硬编码指定列名称。

(如:resultSet.getString("id"))

            设想怎样解决:是否能自己主动将SQL查询结果集转成Java对象。

            User user = sqlSession.selectOne("test.findUserByName", "jerome");


參考

        传智播客公开课:链接:http://pan.baidu.com/s/1bnbH2qj password:9f30

源代码



原文地址:https://www.cnblogs.com/clnchanpin/p/7260546.html