MyBatis入门(二)

2017-12-25  本文已影响13人  長得太帥忚四種檌

Configuration.xml中配置的内容和顺序如下:

以下内容可以有, 也可以没有, 但是有的时候, 顺序必须是这样的:

properties属性的配置

<properties>
    <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
    <property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis"/>
</properties>

1.创建db.properties文件

jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=root

2.在properties节点中加载

<properties resource="db.properties"></properties>

3.加载属性文件的同时, 还可以在properties节点中定义属性, 当两者中有相同名字的属性时, 使用的是属性文件中的内容!

typeAliases节点配置: 给pojo类型起一个别名, 方便使用!

<typeAliases>
    <!-- 给指定的一个类型起别名, 使用时不区分大小写 -->
    <typeAlias type="com.gongxm.bean.Book" alias="book"/>
</typeAliases>
<typeAliases>
    <!-- 给指定的包下的所有类型起别名,别名就是类名, 使用时不区分大小写 -->
    <package name="com.gongxm.bean"/>
</typeAliases>
别名 映射的类型
_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
map Map

mappers(映射器)

Mapper配置的几种方法:

<mapper resource="sqlmap/User.xml" />
<mapper class="com.gongxm.mybatis.mapper.UserMapper"/>

注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

<package name="com.gongxm.mybatis.mapper"/>

注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

resultMap

如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。

<!-- resultMap定义
    type:返回结果映射的pojo,可以使用别名
 -->
<resultMap type="orders" id="order_list_result_map">
    <!-- id主键的映射, property时候pojo中主键的属性,column:返回结果中主键的列-->
    <id property="id" column="id"/>
    <!-- 普通列使用result映射 -->
    <result property="userId" column="user_id"/>
    <result property="number" column="number"/>
    <result property="createtime" column="createtime"/>
    <result property="note" column="note"/>
</resultMap>
<select id="getOrderListResultMap" resultMap="order_list_result_map">
    select id,user_id,number,createtime,note from orders
</select>
<id />:此属性表示查询结果集的唯一标识,非常重要。如果是多个字段为复合唯一约束则定义多个<id />。
Property:表示User类的属性。
Column:表示sql查询出来的字段名。
Column和property放在一块儿表示将sql查询出来的字段映射到指定的pojo类属性上。
<result />:普通结果,即pojo的属性。

动态SQL语句

<sql id="find_user_list_where">
  select * from user
  where 1=1
  <if test="id!=null">
    and id=#{id}
  </if>
  <if test="username != null and username != ''">
    and username like '%${username}%'
  </if>
</sql>
<sql id="find_user_list_where">
  select * from user
 <where>
    <if test="id!=null">
      and id=#{id}
    </if>
    <if test="username != null and username != ''">
      and username like '%${username}%'
    </if>
 </where>
</sql>
<if test="ids!=null and ids.size>0">
  <foreach collection="ids" open=" and id in(" close=")" item="id" separator="," >
    #{id}
  </foreach>
</if>

说明:
collection: 指定要遍历的集合
open: 要生成的语句以什么内容开始
close:要生成的语句以什么内容结束
item: 遍历到集合中的元素
separator: 每个元素之间的分隔符

    <sql id="select">
        select * from books
    </sql>
    
    <select id="findBookById" parameterType="string" resultType="com.gongxm.bean.Book">
        <include refid="select"/> where id = #{id}
    </select>
    
    <select id="findBooksByName" parameterType="string" resultType="com.gongxm.bean.Book">
        <include refid="select"/> where book_name like #{name}
    </select>

resultMap定义一对一, 一对多关系

    <!-- 查询订单关联用户信息使用resultmap -->
    <resultMap type="Orders" id="orderUserResultMap">
        <id column="id" property="id"/>
        <result column="user_id" property="userId"/>
        <result column="number" property="number"/>
        <result column="createtime" property="createtime"/>
        <result column="note" property="note"/>
        <!-- 一对一关联映射 -->
        <!-- 
        property:Orders对象的user属性
        javaType:user属性对应 的类型
         -->
        <association property="user" javaType="com.gongxm.mybatis.po.User">
            <!-- column:user表的主键对应的列  property:user对象中id属性-->
            <id column="user_id" property="id"/>
            <result column="username" property="username"/>
            <result column="address" property="address"/>
        </association>
    </resultMap>
    <select id="findOrdersWithUserResultMap" resultMap="orderUserResultMap">
        SELECT
            o.id,
            o.user_id,
            o.number,
            o.createtime,
            o.note,
            u.username,
            u.address
        FROM
            orders o
        JOIN `user` u ON u.id = o.user_id
    </select>

说明

association:表示进行关联查询单条记录
property:表示关联查询的结果存储在com.gongxm.mybatis.po.Orders的user属性中
javaType:表示关联查询的结果类型
<id property="id" column="user_id"/>:查询结果的user_id列对应关联对象的id属性,这里是<id />表示user_id是关联查询对象的唯一标识。
<result property="username" column="username"/>:查询结果的username列对应关联对象的username属性。
  <resultMap type="user" id="userOrderResultMap">
        <!-- 用户信息映射 -->
        <id property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="birthday" column="birthday"/>
        <result property="sex" column="sex"/>
        <result property="address" column="address"/>
        <!-- 一对多关联映射 -->
        <collection property="orders" ofType="orders">
            <id property="id" column="oid"/>    
              <!--用户id已经在user对象中存在,此处可以不设置-->
            <!-- <result property="userId" column="id"/> -->
            <result property="number" column="number"/>
            <result property="createtime" column="createtime"/>
            <result property="note" column="note"/>
        </collection>
    </resultMap>
    <select id="getUserOrderList" resultMap="userOrderResultMap">
        SELECT
        u.*, o.id oid,
        o.number,
        o.createtime,
        o.note
        FROM
        `user` u
        LEFT JOIN orders o ON u.id = o.user_id
    </select>

说明

collection部分定义了用户关联的订单信息。表示关联查询结果集
property="orders":关联查询的结果集存储在User对象的上哪个属性。
ofType="orders":指定关联查询的结果集中的对象类型即List中的对象类型。此处可以使用别名,也可以使用全限定名。
<id />及<result/>的意义同一对一查询。
上一篇下一篇

猜你喜欢

热点阅读