mybatis笔记-1 mybatis环境配置+介绍

mybatis概述

mybatis 是一个优秀的基于 java 的持久层框架,是apache下的*项目。mybatis托管到goolecode下,再后来托管到github下(https://github.com/mybatis/mybatis-3/releases)。

它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。

mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中
sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。

采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

为了我们能够更好掌握框架运行的内部过程,并且有更好的体验,下面我们将从自定义 Mybatis 框架开始来学习框架。此时我们将会体验框架从无到有的过程体验,也能够很好的综合前面阶段所学的基础。

mybatis相对JDBC的好处

1、使用传统方式JDBC访问数据库:

(1)使用JDBC访问数据库有大量重复代码(比如注册驱动、获取连接、获取传输器、释放资源等)

(2)JDBC自身没有连接池,会频繁的创建连接和关闭连接,效率低

(3)SQL是写死在程序中,一旦修改SQL,需要对类重新编译。

(4)对查询SQL执行后返回的ResultSet对象,需要手动处理,有时会特别麻烦

2、使用mybatis框架访问数据库:

(1)Mybatis对JDBC对了封装,可以简化JDBC代码。

(2)Mybatis支持连接池(也可以配置其他的连接池),因此可以提高程序的效率

(3)Mybatis是将SQL配置在mapper文件中,修改SQL只是修改配置文件,类不需要重新编译。

(4)对查询SQL执行后返回的ResultSet对象,Mybatis会帮我们处理,转换成Java对象。

mybatis 介绍

mybatis是一个持久层的框架,是apache下的*项目。

mybatis托管到goolecode下,再后来托管到github下(https://github.com/mybatis/mybatis-3/releases)。

mybatis让程序员将主要精力放在sql上,通过mybatis提供的映射方式,*灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。

mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)

环境配置

需要的包:jdbc包+

jdbc驱动:JDBC Driver fot MySQL版:https://www.mysql.com/products/connector/

mybatis下载地址:https://github.com/mybatis/mybatis-3/releases ,下的是mybatis-3.5.2.zip。

mybatis笔记-1 mybatis环境配置+介绍

将核心包复制到工程里面,然后添加到类路径。

框架原理

mybatis框架

mybatis笔记-1 mybatis环境配置+介绍

mybatis框架执行过程

1、配置mybatis的配置文件,SqlMapConfig.xml(名称不固定)

2、通过配置文件,加载mybatis运行环境,创建SqlSessionFactory会话工厂(SqlSessionFactory在实际使用时按单例方式)

3、通过SqlSessionFactory创建SqlSession。SqlSession是一个面向用户接口(提供操作数据库方法),实现对象是线程不安全的,建议sqlSession应用场合在方法体内。

4、调用sqlSession的方法去操作数据。如果需要提交事务,需要执行SqlSession的commit()方法。

5、释放资源,关闭SqlSession

mybatis开发dao的方法

1.原始dao 的方法

  • 需要程序员编写dao接口和实现类
  • 需要在dao实现类中注入一个SqlSessionFactory工厂

2.mapper代理开发方法(建议使用)

只需要程序员编写mapper接口(就是dao接口)。
程序员在编写mapper.xml(映射文件)和mapper.java(接口)需要遵循一个开发规范:

  • mapper.xml中namespace就是mapper.java的类全路径。
  • mapper.xml中statement的id和mapper.java中方法名一致。
  • mapper.xml中statement的parameterType指定输入参数的类型和mapper.java的方法输入参数类型一致
  • mapper.xml中statement的resultType指定输出结果的类型和mapper.java的方法返回值类型一致。

SqlMapConfig.xml配置文件:可以配置properties属性、别名、mapper加载。

输入映射和输出映射

  • 输入映射:
    • parameterType:指定输入参数类型可以简单类型、pojo、hashmap。
    • 对于综合查询,建议parameterType使用包装的pojo,有利于系统扩展。
  • 输出映射:
    • resultType:查询到的列名和resultType指定的pojo的属性名一致,才能映射成功。
    • reusltMap:可以通过resultMap 完成一些高级映射。如果查询到的列名和映射的pojo的属性名不一致时,通过resultMap设置列名和属性名之间的对应关系(映射关系)。可以完成映射。
      • 高级映射:
        将关联查询的列映射到一个pojo属性中。(一对一)
        将关联查询的列映射到一个List中。(一对多)

动态sql

  • 动态sql:(重点)
    • if判断(掌握)
    • where
    • foreach
    • sql片段(掌握)