zoukankan      html  css  js  c++  java
  • MyBatis3用户指南

    1. 范围和生命周期
         SqlSessionFactoryBuilder -->SqlSessionFactory-->SqlSession-->Mapper 实例

         SqlSessionFactoryBuilder 最佳范围是方法范围, 创建完SqlSessionFactory就可以丢弃了;

         SqlSessionFactory最佳范围是应用内;

         SqlSession 是线程不安全的, 所以要及时关闭.

         Mapper实例可以从SqlSession中获取, 最佳范围是方法内.

         String resource = "org/mybatis/example/Configuration.xml";
         Reader reader = Resources.getResourceAsReader(resource);

         // 由SqlSessionFactoryBuilder根据配置文件生成SqlSessionFactory,它可以从 XML 配置,注解或手动配置 Java 来创建SqlSessionFactory

         SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);

         // 由SqlSessionFactory生成SqlSession对象
         SqlSession session = sqlMapper.openSession();
         // 使用SqlSession对象操作数据
         Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
         // 或者
         BlogMapper mapper = session.getMapper(BlogMapper.class);
         Blog blog = mapper.selectBlog(101);
    <?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">
         <mapper namespace="org.mybatis.example.BlogMapper">
              <select id="selectBlog" parameterType="int" resultType="Blog">
                   select * from Blog where id = #{id}
              </select>
         </mapper>

    2. XML 映射配置文件

    XML 文档的高层级结构如下:
      configuration 配置
           properties 属性
           settings 设置
           typeAliases 类型命名
           typeHandlers 类型处理器
           objectFactory 对象工厂
           plugins 插件
           environments 环境
                environment 环境变量
                     transactionManager 事务管理器
                     dataSource 数据源
           mappers

    3. SQL 映射的 XML 文件

         SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):
           cache   -   配置给定命名空间的缓存。
           cache- ref  –   从其他命名空间引用缓存配置。
           resultMap  –  最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载你的对象。
           parameterMap  –  已经被废弃了!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除。这里不会记录。
           sql   –  可以重用的 SQL 块,也可以被其他语句引用。
           insert  –  映射插入语句
           update –  映射更新语句
           delete –  映射删除语句
           select –   映射查询语句 


    字符串替换

        直接在 SQL 语句中插入一个不改变的字符串。比如,像 ORDER BY,你可以这样来使用:
         ORDER BY ${columnName}

    resultMap: 代替JDBC代码, 完成从结果集中取出数据的功能
           constructor  –   类在实例化时,用来注入结果到构造方法中
           idArg  –  ID 参数;标记结果作为 ID 可以帮助提高整体效能
           arg  –  注入到构造方法的一个普通结果
           id   –  一个 ID 结果;标记结果作为 ID 可以帮助提高整体效能
           result –   注入到字段或 JavaBean 属性的普通结果
           association –   一个复杂的类型关联;许多结果将包成这种类型
           嵌入结果映射  –   结果映射自身的关联,或者参考一个
           collection   –   复杂类型的集
           嵌入结果映射  –   结果映射自身的集,或者参考一个
           discriminator  –   使用结果值来决定使用哪个结果映射
           case –   基于某些值的结果映射
           嵌入结果映射  –   这种情形结果也映射它本身,因此可以包含很多相同的元素,或者它可以参照一个外部的结果映射。

    构造方法

    <constructor>

         <idArg column="id" javaType="int"/>

         <arg column=”username” javaType=”String”/>

    </constructor>

    public class User {

         //…

         public User(int id, String username) {

         //…

         }

         //…

    }

         关联

         <association  property="author" column="blog_author_id" javaType=" Author">
              <id property="id" column="author_id"/>
              <result property="username" column="author_username"/>
         </association>

    集合

         <collection property="posts" ofType="domain.blog.Post">
              <id property="id" column="post_id"/>
              <result property="subject" column="post_subject"/>
              <result property="body" column="post_body"/>
         </collection>

         鉴别器 相当于switch语句,

         <resultMap id="vehicleResult" type="Vehicle">
              <id property=”id” column="id" />
              <result property="vin" column="vin"/>
              <result property="year" column="year"/>
              <result property="make" column="make"/>
              <result property="model" column="model"/>
              <result property="color" column="color"/>
              <discriminator javaType="int" column="vehicle_type">
                   <case value="1" resultMap="carResult"/>
                   <case value="2" resultMap="truckResult"/>
                   <case value="3" resultMap="vanResult"/>
                   <case value="4" resultMap="suvResult"/>
              </discriminator>
         </resultMap>

    4. 缓存

         自定义缓存要实现Cache接口

    5. 动态SQL

    1. if
    <select id=”findActiveBlogWithTitleLike”
    parameterType=”Blog” resultType=”Blog”>
    SELECT * FROM BLOG
    WHERE state = „ACTIVE‟
    <if test=”title != null”>
    AND title like #{title}
    </if>
    </select>
    2. choose , when, otherwise
    <select id=”findActiveBlogLike”
    parameterType=”Blog” resultType=”Blog”>
    SELECT * FROM BLOG WHERE state = „ACTIVE‟
    <choose>
    <when test=”title != null”>
    AND title like #{title}
    </when>
    <when test=”author != null and author.name != null”>
    AND title like #{author.name}
    </when>
    <otherwise>
    AND featured = 1
    </otherwise>
    </choose>
    </select>
    3. trim, where, set
    <select id=”findActiveBlogLike”
    parameterType=”Blog” resultType=”Blog”>
    SELECT * FROM BLOG
    <where>
    <if test=”state != null”>
    state = #{state}
    </if>
    <if test=”title != null”>
    AND title like #{title}
    </if>
    <if test=”author != null and author.name != null”>
    AND title like #{author.name}
    </if>
    </where>
    </select>
    <update id="updateAuthorIfNecessary"
    parameterType="domain.blog.Author">
    update Author
    <set>
    <if test="username != null">username=#{username},</if>
    <if test="password != null">password=#{password},</if>
    <if test="email != null">email=#{email},</if>
    <if test="bio != null">bio=#{bio}</if>
    </set>
    where id=#{id}
    </update>
    4. foreach: 用于构建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>

    6. JAVA API

  • 相关阅读:
    Oracle 安装安全补丁过程中出现的问题
    Oracle 设置日志模式
    Oracle 设置archivelog错误解决方案
    sum() over() 函数的使用
    C盘清理,移动node 依赖和缓存文件
    ol设置最佳可视范围和限制缩放
    flex弹性布局模式下文字超出显示省略号
    查看svn本地账户和密码
    flutter apk启动闪退问题
    More than one file was found with OS independent path 'lib/armeabi-v7a/libflutter.so'
  • 原文地址:https://www.cnblogs.com/jeevan/p/3489510.html
Copyright © 2011-2022 走看看