mybatis复习
一. MyBatis
1. MyBatis简介
·MyBatis前身是iBatis,本是Apache的一个开源的项目
·ORM框架
·实体类和SQL语句之间建立映射关系
2. MyBatis特点
·基于SQL语法,简单易学
·能了解底层封装过程
·SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
·方便程序代码调试
3. 搭建MyBatis开发环境
1.下载mybatis-3.2.2.jar包并导入工程
2.编写MyBatis核心配置文件(configuration.xml)
3.创建实体类-POJO
4.DAO层-SQL映射文件(mapper.xml)
5.创建测试类
读取核心配置文件mybatis-config.xml
创建SqlSessionFactory对象,读取配置文件
创建SqlSession对象
调用mapper文件进行数据操作
4. MyBatis框架优缺点
4.1优点
·与JDBC相比,减少了50%以上的代码量
·最简单的持久化框架,小巧并简单易学
·SQL代码从程序代码中彻底分离,可重用
·提供XML标签,支持编写动态SQL
·提供映射标签,支持对象与数据库的ORM字段映射
4.2缺点
·SQL语句编写工作量大,对开发人员有一定要求
·数据库移植性差
5. MyBatis基本要素
·MyBatis的核心对象
SqlSessionFactoryBuilder
SqlSessionFactory
SqlSession
·mybatis-config.xml 系统核心配置文件
·mapper.xml SQL映射文件
6. 核心对象
6.1SqlSessionFactoryBuilder
·用过即丢,其生命周期只存在于方法体内
·可重用其来创建多个 SqlSessionFactory 实例
·负责构建SqlSessionFactory,并提供多个build方法的重载
·读取XML文件构造方式:
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
6.2SqlSessionFactory
·SqlSessionFactory是每个MyBatis应用的核心
·作用:创建SqlSession实例
SqlSession session = sqlSessionFactory.openSession(boolean autoCommit);
·作用域:Application
·生命周期与应用的生命周期相同
·单例
存在于整个应用运行时,并且同时只存在一个对象实例
6.3SqlSession
·包含了执行SQL所需的所有方法
·对应一次数据库会话,会话结束必须关闭
·线程级别,不能共享
SqlSession session = sqlSessionFactory.openSession();
try {
// do work
} finally {
session.close();
}
注意 在SqlSession里可以执行多次SQL语句,但一旦关闭了SqlSession就需要重新创建
6.4SqlSession的获取方式
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
SqlSession sqlSession = factory.openSession();
6.5SqlSession的两种使用方式
·通过SqlSession实例直接运行映射的SQL语句
·基于Mapper接口方式操作数据
7.系统核心配置文件
7.1 mybatis-config.xml 系统核心配置文件
·configuration 配置
·properties 可以配置在Java 属性配置文件中
·settings 修改 MyBatis 在运行时的行为方式
·typeAliases 为 Java 类型命名一个别名(简称)
·typeHandlers 类型处理器
·objectFactory 对象工厂
·plugins 插件
·environments 环境
·environment 环境变量
·transactionManager 事务管理器
·dataSource 数据源
·mappers 映射器
注意元素节点的顺序!
<?xml version="1.0" encoding="UTF-8" ?>
<!--文档类型,头文件-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--根节点,XMl只能有一个-->
<configuration>
<settings>
<!--二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
<!--一个environments有N个environment-->
<typeAliases>
<package name="cn.bdqn.entity"></package>
</typeAliases>
<environments default="development">
<environment id="development">
<!--
transactionManager:JDBC保证事务的
update
delete
事务分类:JDBC:编程式事务
xxx.beginTransaction()
tx.commit()
tx.rollback()
配置式事务
JDBC|MANAGED
区别
-->
<transactionManager type="JDBC"></transactionManager>
<!--
POOLED:MyBatis内置的连接池
c3p0连接池
POOLED 、UNPOOLED 、JNDI
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///blog"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- <package name="cn.bdqn.dao"></package>-->
<mapper resource="cn/bdqn/dao/DeptMappr.xml"></mapper>
<mapper resource="cn/bdqn/dao/Ibndao.xml"></mapper>
<mapper resource="cn/bdqn/dao/IEmpDAO.xml"></mapper>
<mapper resource="cn/bdqn/dao/ICategoryDAO.xml"></mapper>
<mapper resource="cn/bdqn/dao/ITeacher.xml"></mapper>
</mappers>
</configuration>
7.2 小配置
<?xml version="1.0" encoding="UTF-8"?>
<!--头文件-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:
命名空间:区分不同空间下的同名SQLID
A: findlAll
B: findAll
-->
<mapper namespace="cn.bdqn.dao.IDeptDao">
<cache/>
<!--SQL标签
id:唯一锁定到SQL标识
paramenterType:SQL语句的入参 可以省略
resultType:
增删除操作:不能 写
查询:单个实体的类型
-->
<sql id="aa">
blogId,blogAuthor,blogAddress,blogDel
</sql>
<resultMap id="DeptMap" type="Dept">
<!--<result column="BlogAuthorr" property="blogAuthor"/>-->
</resultMap>
<!--查询所有-->
<select id="getAll" resultMap="DeptMap">
/*SQL文:SQL语句*/
SELECT <include refid="aa"></include>FROM bloginfo
</select>
</mapper>
8.总结
9.附git完整事例代码一份
https://github.com/qjtlovezch/Y2165/tree/master/_02MyBatis