关于mybatis的流程简介

来源:互联网 发布:it时代 编辑:程序博客网 时间:2024/04/29 08:03


Mybatis

1.    什么是mybatis?

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

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

如果使用 Maven来构建项目,则需将下面的 dependency代码置于 pom.xml文件中:

3. <dependency>

4.   <groupId>org.mybatis</groupId>

5.   <artifactId>mybatis</artifactId>

6.   <version>x.x.x</version>

7. </dependency>

 

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

1.3具体的实现过程和具体的讲解过程

MyBatis 中,使用SqlSessionFactoryBuilder创建SqlSessionFactory,进而来创建 SqlSession
得到 session 之后,你可以使用它来执行映射语句,提交或回滚连接,最后,当不再需要它的时候,你可以关闭 session 

Mybatis
社区自己开发了一个Mybatis-spring用来满足Mybatis用户整合Spring的需求。
使用 MyBatis-Spring之后, 会使用SqlSessionFactoryBean来代替SqlSessionFactoryBuilder创建SqlSessionFactory
然后可以使用使用sqlSession

Mybatis-Spring
提供了一种直接使用SqlSession的方式(一个实现了SqlSession接口的SqlSessionTemplate实现类)

8.        
它是线程安全的,可以被多个Dao同时使用;值得一提的是hibernate不是线程安全的,因此它不是非入侵式的
它跟Spring的事务进行了关联,确保当前被使用的SqlSession是一个已经和Spring的事务进行绑定了的,而且它还可以自己管理Session的提交和关闭
 -->
    
        <bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
        
<!--数据源的获取 -->
        
<propertyname="dataSource" ref="dataSource"></property>
        <!--得到mybatis的核心配置文件 //具体的配置文件的地址像
        
<propertyname="configLocation" value="classpath:mybatis.xml"/> 
        -->
        <!--自动扫描mapping.xml文件,**表示迭代查找代替了 config -->
        
<propertyname="mapperLocations" value="classpath:com/bean/**/*.xml"/>
        </bean>
        
<bean id="sqlSession"class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0"ref="sqlSessionFactory"></constructor-arg>
</bean>

9.   

Scope--生命周期

 

至于具体的映射文件的相关配置这里不多说,具体的看一下网页

http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html

以下具体讨论sql的强大功能 与JDBC Hibernate相比—mybaits在这方面强大的功能

动态SQL

MyBatis的强大特性之一便是它的动态 SQL。如果你有使用 JDBC或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL这一特性可以彻底摆脱这种痛苦。

通常使用动态 SQL 不可能是独立的一部分,MyBatis当然使用一种强大的动态 SQL语言来改进这种情形,这种语言可以被用在任意的 SQL映射语句中。

动态 SQL 元素和使用 JSTL或其他类似基于 XML的文本处理器相似。在 MyBatis之前的版本中,有很多的元素需要来了解。MyBatis 3大大提升了它们,现在用不到原先一半的元素就可以了。MyBatis采用功能强大的基于 OGNL的表达式来消除其他元素。

If语句

动态 SQL 通常要做的事情是有条件地包含where 子句的一部分。比如:

<select id="findActiveBlogWithTitleLike"

     resultType="Blog">

  SELECT * FROM BLOG

  WHERE state = ‘ACTIVE’

  <if test="title != null">

    AND title like #{title}

  </if>

</select>

choose, when,otherwise语句

有些时候,我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。

还是上面的例子,但是这次变为提供了“title”就按“title”查找,提供了“author”就按“author”查找,若两者都没有提供,就返回所有符合条件的BLOG(实际情况可能是由管理员按一定策略选出BLOG列表,而不是返回大量无意义的随机结果)。

<select id="findActiveBlogLike"

     resultType="Blog">

  SELECT * FROM BLOG WHERE state = ‘ACTIVE’

  <choose>

    <when test="title != null">

      AND title like #{title}

    </when>

    <when test="author != null andauthor.name != null">

      AND author_name like #{author.name}

    </when>

    <otherwise>

      AND featured = 1

    </otherwise>

  </choose>

</select>

 

Foreach针对集合的相关应用

动态 SQL 的另外一个常用的必要操作是需要对一个集合进行遍历,通常是在构建 IN 条件语句的时候。比如:

<select id="selectPostIn"resultType="domain.blog.Post">

  SELECT *

  FROM POST P

  WHERE ID in

  <foreach item="item" index="index"collection="list"

      open="(" separator=","close=")">

        #{item}

  </foreach>

</select>

foreach 元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。这个元素是很智能的,因此它不会偶然地附加多余的分隔符。

注意 你可以将任何可迭代对象(如列表、集合等)和任何的字典或者数组对象传递给foreach作为集合参数。当使用可迭代对象或者数组时,index是当前迭代的次数,item的值是本次迭代获取的元素。当使用字典(或者Map.Entry对象的集合)时,index是键,item是值。

到此我们已经完成了涉及 XML 配置文件和 XML 映射文件的讨论。下一部分将详细探讨 Java API,这样才能从已创建的映射中获取最大利益。

Logging

Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具:

·        SLF4J

·        Apache Commons Logging

·        Log4j 2

·        Log4j

·        JDK logging

具体选择哪个日志实现工具由MyBatis的内置日志工厂确定。它会使用最先找到的(按上文列举的顺序查找)。如果一个都未找到,日志功能就会被禁用。

不少应用服务器的classpath中已经包含Commons Logging,如TomcatWebShpere所以MyBatis会把它作为具体的日志实现。记住这点非常重要。这将意味着,在诸如WebSphere的环境中——WebSphere提供了Commons Logging的私有实现,你的Log4J配置将被忽略。这种做法不免让人悲催,MyBatis怎么能忽略你的配置呢?事实上,因Commons Logging已经存在了,按照优先级顺序,Log4J自然就被忽略了!不过,如果你的应用部署在一个包含CommonsLogging的环境,而你又想用其他的日志框架,你可以通过在MyBatis的配置文件mybatis-config.xml里面添加一项setting(配置)来选择一个不同的日志实现。