SQL映射文件详解

sql映射文件

        SQL映射是MyBatis框架最具有特殊的部分,功能强大而且使用简单。MyBatis框架的主要思想是将SQL语句从程序代码中分离出来,对JDBC访问数据库的代码进行封装,从程序消除了所以SQL参数设置以及处理结果集的JDBC代码,从而大幅减少数据访问层的编码量。并且,SQL语句与代码解耦,可以最大限度的实现对SQL语句的灵活管理,方便SQL调优以保证性能。

SQL映射文件中的几个顶级元素介绍如下

mapper:SQL映射文件的根元素。只有一个namespace,用于区分不同的mapper,必须全局唯一。

cache:为给定命名空间配置缓存。

cache-ref:引用其他命名空间中的缓存配置。

resultMap:用来描述查询结果集中的字段和Java实体类属性的对应关系。

sql:定义可重用的SQL语句块。可以在其他语句映射中引用,提高编写和维护SQL语句的效率。

insert:映射insert语句。

update:映射update语句。

delete:映射delete语句。

select:映射select语句。

MyBatis框架的条件查询

单一条件查询
    <select id="getUsersByRealName" resultType="sysuser" parameterType="String">
        select * from t_sys_user where realName like concat('%',#{param},'%')
    </select>

parameterType属性,它表示为SQL语句传入参数的类型,使用完全限定名或别名,支持基础数据类型和复杂数据类型。

多条件查询
一、将条件封装成Java对象作为入参

在mapper接口中定义方法并使用实体类对象入参

与接口方法绑定的SQL语句中分别使用#{realName}和#{roleId}(即#{属性名})来访问实体类的对应属性

public List<SysUser> getUserListByPojo(SysUser sysUser);

 在mapper映射文件中使用

    <select id="getUserListByPojo" resultType="sysuser" parameterType="sysuser">
        select * from
                     t_sys_user
                 where
                     realName like concat('%',#{realName},'%')
                   and
                     roleId=#{roleId}
    </select>
二、将查询条件封装成Map对象入参

使用Map类型传递多个参数,绑定的SQL语句中使用#{Map的key}来获取参数值

在mapper接口中定义方法并使用Map对象入参

public List<SysUser> getUserListByMap(Map<String,Object> userMap);

在mapper映射文件中使用

    <select id="getUserListByMap" resultType="sysuser" parameterType="map">
        select * from
            t_sys_user
        where
            realName like concat('%',#{rName},'%')
          and
            roleId=#{rId}
    </select>
三、使用@Param注解实现多参数入参

在mapper接口中定义方法并使用@Param注解定义参数名

public List<SysUser> getUserListByParams(@Param("realName")String realName,@Param("roleId")int roleId);

在mapper映射文件中使用

    <select id="getUserListByParams" resultType="sysuser">
        select * from
            t_sys_user
        where
            realName like concat('%',#{realName},'%')
          and
            roleId=#{roleId}
    </select>

MyBatis框架的结果映射

使用resultMap元素自定义结果映射

<resultMap id="userWithRoleName" type="sysuser">
    <id property="id" column="id"/>
    <result property="roleName" column="userRoleName"/>
</resultMap>

使用方式

<select id="getUserListWithRoleName" parameterType="sysuser" resultMap="userWithRoleName">
        select u.*,r.roleName 
        from t_sys_user u,t_sys_role r 
        where u.realName like concat('%',#{realName},'%') 
            and u.roleId=#{roleId} 
            and u.roleId=r.id
</select>

嵌套结果映射

association元素

用于处理“has-one”类型的关系

    <resultMap id="userWithSysRole" type="sysuser">
        <id property="id" column="id"/>
        <result property="realName" column="realName"/>
        <association property="sysRole" javaType="sysrole">
            <id property="id" column="rid"/>
            <result property="code" column="code"/>
            <result property="roleName" column="roleName"/>
        </association>
    </resultMap>

association元素的主要属性:

        property:实体类中用来映射查询结果子集的属性

        javaType:property指定的属性的数据类型

        association元素包含如下子元素:

                id

                result

collection元素

collectio元素和association元素作用非常类似,只不过表达的是“一对多”关系,即实体类内部嵌套的是一个集合类型的属性

    <resultMap id="userWithAddresses" type="sysuser">
        <id property="id" column="id"/>
        <result property="account" column="account"/>
        <result property="realName" column="realName"/>
        <collection property="addressList" ofType="address">
            <id property="id" column="aid"/>
            <result property="contact" column="contact"/>
            <result property="addressDesc" column="addressDesc"/>
            <result property="postCode" column="postCode"/>
            <result property="tel" column="tel"/>
        </collection>
    </resultMap>

collection元素有如下常用属性

        property:实体类中用来映射查询结果子集的集合属性

        ofType:property指定的集合属性中的元素的数据类型

实用小知识

resultMap的自动映射

        <!-- 全自动映射 -->
        <setting name="autoMappingBehavior" value="FULL"/>

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL映射文件是指在使用对象关系映射(ORM)框架时,为了将对象与数据库表进行映射而创建的文件。在Java开发中,常用的ORM框架有MyBatis和Hibernate,它们都支持使用SQL映射文件来定义对象与数据库表之间的映射关系。 SQL映射文件通常使用XML格式来编写,包含了一系列的SQL语句和配置信息。下面是一个简单的SQL映射文件示例: ```xml <!-- UserMapper.xml --> <mapper namespace="com.example.UserMapper"> <select id="getUserById" resultType="com.example.User"> SELECT * FROM users WHERE id = #{id} </select> <insert id="insertUser" parameterType="com.example.User"> INSERT INTO users (name, age) VALUES (#{name}, #{age}) </insert> <update id="updateUser" parameterType="com.example.User"> UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id} </update> <delete id="deleteUser" parameterType="int"> DELETE FROM users WHERE id = #{id} </delete> </mapper> ``` 在上述示例中,`namespace`属性指定了映射文件对应的Mapper接口或类的全限定名。`select`、`insert`、`update`和`delete`标签分别定义了查询、插入、更新和删除操作的SQL语句,使用`id`属性指定了方法名,`parameterType`属性指定了方法参数的类型,`resultType`属性指定了查询结果的映射类型。 通过SQL映射文件,我们可以将数据库操作的SQL语句独立出来,降低了代码和SQL的耦合度,使得代码更加清晰、易于维护。ORM框架会根据映射文件中的配置信息,自动将对象与数据库表进行映射,简化了开发过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值