MyBatis
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
●MyBatis是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架
●MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
MyBatis最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。
●github
●https://github.com/mybatis/mybatis-3/
●参考
●mybatis – MyBatis 3 | 配置http://www.mybatis.org/mybatis-3/zh/configuration.html
功能架构
MyBatis优缺点
MyBatis优点:
●简单易学
●灵活
●降低sql与程序代码的耦合
●提供映射标签,支持对象与数据库的orm字段关系映射
●提供对象关系映射标签,支持对象关系组建维护
●提供xml标签,支持编写动态sql
MyBatis缺点:
●编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此
●SQL语句依赖于数据库,导致数据库移植性较差
●二级缓存机制不佳
MyBatis的执行流程
MyBatis的Maven依赖库
MyBatis的Maven依赖库
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
MyBatis核心配置文件
MyBatis核心配置文件是一个xml文件
●配置环境(开发、测试、生产)
●配置数据库连接信息
●配置连接池
●设置MyBatis运行参数
●配置映射器(mappers)
核心配置文件基础配置
简单配置
标签说明
各标签说明如下
●默认的环境 ID(比如:default=”development”)
●每个 environment 元素定义的环境 ID(比如:id=”development”)
●事务管理器的配置(比如:type=”JDBC|MANAGED”)
●数据源的配置(比如:type=” [UNPOOLED|POOLED|JNDI]”)
Mapper映射文件
Mapper映射文件
●MyBatis 的真正强大在于它的映射语句,也是它的魔力所在
●所有的SQL语句都要定义要Mapper文件中
●常用标签
●resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象
●insert – 映射插入语句
●update – 映射更新语句
●delete – 映射删除语句
●select – 映射查询语句
Mapper文件说明
●Mapper文件的定义和根节点
●Mapper必须在核心配置文件中注册
<insert>标签
●用于执行insert into
●属性说明
●id 引用的名称
●parameterType
将要传入语句的参数的完全限定类名或别名,可选,可以是Map、 Pojo或普通类型
●useGeneratedKeys
是否有自动增长列
●keyProperty
自动增长列的字段名
说明
●从Map或Pojo中取出key或property值的语法
●#{key|property}
●如果要使用Oracle的序列为字段赋值,使用selectKey子标签
●resultType 返回的类型
●keyProperty 将selectKey的返回值填充到指定的字段
●order 执行的顺序,可选值为before和after
<update>和<delete>
●<update>
update语句
<delete>
●delete语句
resultMap
如果Pojo的属性名和表中的字段名不一致,需要使用 resultMap标签映射属性名和字段名
MyBatis API
SqlSession
●会话,代表与数据库的一次会话
●SqlSessionFactory
●用于创建SqlSession的工厂
●SqlSessionFactoryBuilder
●创建创建SqlSessionFactory的构建器
SqlSession的常用方法
●int insert(String statement, Object parameter);
●int update(String statement, Object parameter);
●int delete(String statement, Object parameter);
●<E> List<E> selectList(String statement, Object parameter);
●<T> T selectOne(String statement, Object parameter);
●void commit();
●void rollback();
●void close();
MyBatis以接口方式编程
MyBatis可以以接口方式编程,只需要定义接口无需要实现,同时,也不再使用SqlSession来执行sql语句。
●定义DAO
●将Mapper中每个sql的id定义为DAO中对应的方法