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

posted on 2018-01-03 10:29  溜氓  阅读(186)  评论(0编辑  收藏  举报

导航