文章目录
- mybatis概述
- mybatis相对JDBC的好处
- 1、使用传统方式JDBC访问数据库:
- 2、使用mybatis框架访问数据库:
- mybatis 介绍
- 环境配置
- 框架原理
- mybatis框架执行过程
- mybatis开发dao的方法
- 输入映射和输出映射
- 动态sql
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框架
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片段(掌握)