MyBatis 配置的局地小知识点

MyBatis别名配置——typeAliases


  类型别名是为 Java 类型设置一个短的名字。它只和 XML
配置有关,存在的含义仅在于用来压缩类完全限定名的冗余。说白了就是事先安装包名

api是如此写的

<typeAliases>
  <typeAlias alias="Author" type="domain.blog.Author"/>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
</typeAliases>

也足以指定一个包名,MyBatis 会在包名上面搜索须要的 Java Bean,比如:

<typeAliases>
  <package name="domain.blog"/>
</typeAliases>

 

其一一直在xml中的<configuration>下设置就能够,再选用的时候就能够平昔运用别名了,可是要注意的时候写在xml下的时候有各类关系的
哦!蒙受错误自己解决,调整职分就好

早就为广大宽广的 Java
类型内建了相应的门体系名。它们都是大大小小写不灵动的,须要注意的是由中央类型名称再度导致的异样处理。

别名 映射的类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

映射器——mappers


 

既然 MyBatis 的作为早就由上述要素配置完了,大家现在即将定义 SQL
映射语句了。但是首先大家要求报告 MyBatis 到何地去找到那个讲话。 Java
在自行检索那地点没有提供一个很好的方法,所以最佳的方法是告诉 MyBatis
到哪个地方去找映射文件。你可以动用相对于类路径的资源引用,
或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。

此处有三种方法

第一种类路径的资源引用
<mapper resource="com/entity/UserMapper.xml"/>
第二种直接给出本地地址形式的,自己存放的地址,完全限定资源定位符
<mapper url="file:///var/mappers/UserMapper.xml"/>
第三种以类的形式去寻找
<mapper class="com.entity.AuthorMapper"/>
第四种包名的形式
 <package name="com.entity.builder"/>

 

炫耀配置细节


 

resultMap和resultType  

  MyBatis中在查询举办select映射的时候,再次来到类型可以用resultType,也得以用resultMap,

  resultType是直接表示回去类型的,查询出来的每一个特性都是置身一个应和的Map里面的,其中键是属性名,值则是其对应的值。当提供的回到类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultType所指定的目的对应的习性。所以实际上MyBatis的每一个查询映射的归来类型都是ResultMap,只是当大家提供的回来类型属性是resultType的时候,MyBatis对活动的给我们把相应的值赋给resultType所指定对象的习性。

  resultMap则是对外表ResultMap的引用,然后根据查找出来的特性名进行键值对包裹,紧要用在展开复杂联合查询上,结果集映射是MyBatis
中最精锐的特点。许多复杂的映照都可以轻松解决。

  resultType跟resultMap不可以而且设有。

resultMap扶助继承

  

  extends=”User”表达继承了上一个resultMap,倘若一个实体类很重的话,先付给一个框架大家都三番五次与他,是无可非议的取舍

    <!--多对多关联查询 -->
    <resultMap id="User" type="com.entity.User">
        <result property="id" column="id" />
        <result property="username" column="username" />
        <result property="password" column="password" />
    </resultMap>
    <resultMap id="user_info" type="User" extends="User">
        <collection property="userInfos" ofType="com.entity.UserInfo"
            column="uid">
            <result property="id" column="id" />
            <result property="address" column="address" />
        </collection>
    </resultMap>
    <select id="getUser" resultMap="user_info">
        select * from user u,userinfo i
        where u.id=i.uid and u.id=#{id}
    </select>

动态SQL语句落成多规格查询


if

动态 SQL 寻常要做的事情是有规则地蕴藏 where 子句的一有的。

<select id="findActiveBlogWithTitleLike"
     resultType="Blog">
  SELECT * FROM BLOG 
  WHERE state = ‘ACTIVE’ 
  <if test="title != null">
    AND title like #{title}
  </if>
</select>

那条语句提供了一个可选的文件查找类型的成效。假若没有传来“title”,那么具有处于“ACTIVE”状态的BLOG都会回去。

choose

<select id="queryEmp"  resultType="cn.test.entity.Emp">
          select * from emp where 1=1
          <choose>
          <when test="deptNo!=null">
          and deptno=#{deptNo}
          </when>
          <when test="deptName!=null">
          and deptname=#{deptName}
          </when>
          <otherwise>
          and personnum>#{personNum}
          </otherwise>
          </choose>

 </select>

上面也说了,choose相当于Java中的switch语句;当第三个when知足时;就只举办第三个when中的条件。当when中的条件都不满足时;就会履行默许的的;也就是otherwise中的语句。

Where

<select id="getU" resultMap="User" parameterType="com.entity.User">
        select*from user
        <where>
            <if test="username!=null and username!=''">
                username like concat('%',#{username},'%')
            </if>
            <if test="id!=null">
                and id=#{id}
            </if>
        </where>
    </select>

 where上面首个if语句中以and开首,也得以不难第四个and
,尽管首个if语句中有and;mybatis会将首先个and忽略。

set

<update id="updateEmp" parameterType="cn.test.entity.Emp" flushCache="true">
          update emp 
          <set>
          <if test="empName!=null">empname=#{empName},</if>
          <if test="job!=null">job=#{job}</if>
          </set>
          where empno=#{empNo}
          </update>

  在mybatis中的SQL语句结尾无法加“;”,那样会造成mybatis无法识别字符;导致SQL语句的语法错误;

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
元素的意义是老大强大的,它同意你指定一个集结,讲明可以用在要素体内的集合项和目录变量。它也允许你指定开闭匹配的字符串以及在迭代当中放置分隔符。那一个因素是很智能的,由此它不会有时地附加多余的分隔符。

 

 

 
 【版本评释】本文为博主原创小说,转发请注脚出处

 

网站地图xml地图