MyBatis 框架详解 (一)

持久层框架:直接操作对象  将查询结果转换成对象集合   把对象保存到数据库  你不用写太多sql 语句(容易出错,不利于面向对象)

 MyBatis:是一个持久层的框架,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

                构建工厂模式  ,拿到数据源,拿到基本配置文件通过数据源拿到session (专门操作数据库)

 

引入jar包:

   1.要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。

   2.maven构建项目:将以下加到pom.xml中;

     

从 XML 中构建 SqlSessionFactory

      xml只是一种  获取SqlSessionFactory方式 ( SqlSesionFactoryy有好几个来源  xml/properties文件/Configuration实例);

    可以使用classpath路径下的资源文件进行配置,也可以使用文件流来得到路径;MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件更加容易。

  

mybatis-config.xml配置文件

       mybatis核心配置(获取数据库连接的数据源+事务管理器--管理事务的)Configuration通过Resources的方式读取配置文件中信息(SqlSessionFactoryBuilder 中的方法可以new 一个Configuration 实例去加载配置文件的内容  后生成SqlSessionFactory)

<?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">
<configuration>
    <typeAliases>
        <typeAlias alias="student" type="com.spring.entry.Student" />
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1/test" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <!--所有的映射注册-->
    <mappers>
        <mapper resource="com/spring/mybatis/StudentMapper.xml" />
        <mapper class="com.spring.mybatis.TeacherMapper"/>
    </mappers>
</configuration>

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

不使用 XML 构建 SqlSessionFactory

   直接用Java程序创建Configuration实例  Configuration添加了映射器类 (mappercalss) 含 SQL 映射语句的注解从而避免了 XML 文件的依赖(xml里面存sql  所有的sql语句都可以在xml); new 事务管理器

    

从 SqlSessionFactory 中获取 SqlSession:

         SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句; opensession相当于打开了一个连接;

   通过session的方法 相当于直接拿到了一个实体对象(没有任何封装)  

    

对于给定语句能够合理描述参数和返回值的接口(比如说StudentMapper.class)---你可以自定义session的方法(selectstudentmapper)  利用接口的方式进行可封装;

  

     sql查出结果跟你的实体进行匹配<mapper namespace=""> 通过id (方法名)调用sql   返回一个对象类型

使用指定的完全限定名“org.mybatis.example.BlogMapper.selectBlog”来调用映射语句命名空间唯一;这个命名可以直接映射到在命名空间中同名的 Mapper 类,并将已映射的 select 语句中的名字、参数和返回类型匹配成方法;

 利用命名空间直接调用  实体类.calss

BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);

 

映射类:用注解替换xml形式(第三种)

     映射器是一个你创建来绑定你映射的语句的接口(StudentMapper)。

    映射器实例(Mapper Instances):从 SqlSession 中获得的,任何映射器实例的最大作用域是和请求它们的 SqlSession 相同的,最好把映射器放在方法作用域(method scope)内;

     xml 对应了实体类  id即类中的方法 输出类型就是该类的类型 

     session(可操作mapper文件)                                              

     执行:session----->mapper(固定类) 【注解@/xml<....id>】------>mapper 去增删改查

映射器(mappers)

        告诉 MyBatis 到哪里去找映射文件,可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等.

         

Mapper XML 文件:

      MyBatis 的真正强大在于它的映射语句,由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的。

         

        

  

select:预处理方面优势‘??’  

       

标签内置属性

     

     

 

Result Maps(解决联合查询问题)

resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC 

ResultSets 数据提取代码中解放出来, 并在一些情形下允许你做一些 JDBC 不支持的事情

   

返回值为HashMap类型,HashMap 不是一个很好的领域模型你的程序更可能会使用 JavaBean 或 POJO(Plain Old Java Objects,普通 Java 对象)作为领域模型。 MyBatis 对两者都支持(对应到对象上)

解决字段名和属性名不匹配的问题

  1. 类别名:  

这些情况下,MyBatis 会在幕后自动创建一个 ResultMap,再基于属性名来映射列到 JavaBean 的属性上。如果列名和属性名没有精确匹配,可以在 SELECT 语句中对列使用别名(这是一个 基本的 SQL 特性)来匹配标签。比如:

<select id="selectUsers" resultType="User">
  select
    user_id             as "id",
    user_name           as "userName",
    hashed_password     as "hashedPassword"
  from some_table
  where id = #{id}
</select>

2.resultMap :解决列名不匹配的另外一种方式(对象里的对象  1:n关系)

 

动态 SQL

  1.判断(sql拼接的情况)true--拼接 false--不拼接

         

   2.遍历:

        

ps:mybatis框架功能强大,我们需要了解其内部原理,更好的运用它!

            mybatis官方文档http://www.mybatis.org/mybatis-3/zh/index.html

猜你喜欢

转载自blog.csdn.net/weixin_42249629/article/details/81675447