MyBatis映射配置文件

官网文档地址:mybatis – MyBatis 3 | 配置

一、xxxMapper.xml 的固定内容格式

<?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="dao.UserDao">
    <!-- 配置 sql -->
</mapper>


二、配置

SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):

  • cache – 该命名空间的缓存配置。
  • cache-ref – 引用其它命名空间的缓存配置。
  • resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
  • parameterMap – 老式风格的参数映射。此元素已被废弃,并可能在将来被移除!请使用行内参数映射。文档中不会介绍此元素。
  • sql – 可被其它语句引用的可重用语句块。
  • insert – 映射插入语句。
  • update – 映射更新语句。
  • delete – 映射删除语句。
  • select – 映射查询语句。


1. 参数

<select id="findUserById" parameterType="int" resultType="user">
  SELECT * FROM PERSON WHERE ID = #{id}
</select>

        这个语句名为 findUserById,接受一个 int (或 Integer)类型的参数,并返回一个 User 类型的对象,其中的键是列名,值便是结果行中的对应值。

  parameterType  : 参数类型

  resultType  :返回值类型

  参数符号 

#{id}

 对应的  dao 接口方法 

public interface UserDao {
    /**
     * 使用配置文件 查询所有
     * @return
     */
    List<User> findUserById(int id);
}

2. sql 片段

        用于定义sql片段

<sql id="selectUser">select * from testMyBatis.user</sql>

         使用

<select id="findAll" resultType="dao.UserDao">
    <include refid="selectUser"></include>
</select>

3. 类型别名

<!-- mybatis-config.xml 中 -->
<typeAlias type="domain.User" alias="User"/>

<!-- SQL 映射 XML 中 -->
<select id="findAll" resultType="User">
    <include refid="selectUser"></include>
</select>

4. resultMap 结果映射

<!-- 两种解决方式 -->
<!-- 一、起别名 -->
    <!-- select id as userId, name as userName ... from ... -->
<!-- 二、配置对应关系 -->
    <resultMap id="userMap" type="domain.User">

    <!-- 主键字段对应 -->
    <id property="userId" column="id"></id>
    
​
    <!-- 非主键字段对应 -->
    <result property="username" column="name"></result>

</resultMap>
<!-- 并将 resultType 改为 resultMap = { resultMap.id } -->

  property  :对象中的属性名

  column  :数据库中的字段名

5. 模糊查询

<!-- 模糊查询 -->
<select id="findUserByName" parameterType="java.lang.String" resultType="domain.User">
    select * from testMybatis.user where username like #{un}
</select>


 三、表关系

一对一

创建  实体类 

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order {
    private int id;
    private Date orderTime;
    private int total;
    
    // 对应的表对象
    private User user;
​
}

编写  映射配置文件  

<mapper namespace="dao.OrderDao">
​    <!-- resultMap -->
    <resultMap id="orderMap" type="order">
        <!-- 手动指定字段与实体属性的映射关系 -->
        <id property="id" column="oid" />
        <result property="orderTime" column="orderTime" />
        <result property="total" column="total" />
​
        <!-- 配置关联表 -->
        
        <!-- 方式一 -->
        <!-- property: 属性名称, column: 字段名称 -->
        <!-- <result property="user.id" column="uid" /> -->
        
        <!-- 方式二 -->        
        <!-- property: 属性名称, javaType: 当前实体属性的类型 -->
        <association property="user" javaType="user">
            <id property="id" column="uid" />
            <result property="birthday" column="birthday" />
            <result property="username" column="username" />
            <result property="sex" column="sex" />
            <result property="address" column="address" />
        </association>
    </resultMap>

​​    <!-- sql-->
    <select id="findAll" resultMap="orderMap">
        select *,o.id oid from orders o,user u where o.uid = u.id
    </select>
</mapper>

 编写dao接口及测试类 

一对多

添加实体类属性(  一的一方 

private List<Order> orders;

编写  映射配置文件  

<resultMap id="userMap" type="user">
    <id property="id" column="uid" />
    <result property="username" column="username" />
    <result property="birthday" column="birthday" />
    <result property="sex" column="sex" />
    <result property="address" column="address" />
    <!-- 配置集合信息 -->
    <!--
        property: 集合名称
        ofType: 当前集合的数据类型
    -->
    <collection property="orders" ofType="order">
        <id property="id" column="oid" />
        <result property="orderTime" column="orderTime" />
        <result property="total" column="total" />
    </collection>
</resultMap>
​
​
<select id="findAllAndOrder" resultMap="userMap">
    select *,o.id oid from user u, orders o where u.id = o.uid
</select>

 编写dao接口及测试类 

多对多

添加实体类属性(  需要的一方 

private List<Role> roles;

编写  映射配置文件 ( 同一对多,多一个中间表 )

<resultMap id="userRole" type="user">
    <id property="id" column="userId" />
    <result property="username" column="username" />
    <result property="birthday" column="birthday" />
    <result property="sex" column="sex" />
    <result property="address" column="address" />
​
    <collection property="roles" ofType="role">
        <id property="id" column="roleId" />
        <result property="roleName" column="roleName" />
    </collection>
</resultMap>

<select id="findAllAndRole" resultMap="userRole">
    select * from user u, user_role ur, role r where u.id = ur.userId and ur.roleId = r.id
</select>

 编写dao接口及测试类 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值