SSMSQL映射文件

本章博客主要讲ssm框架中常用的SQL映射文件的写法,主要以查询为例,仅供参考,希望能帮助到各位道友

列举下SQL映射文件的几个顶级元素

在这里插入图片描述
在这里插入图片描述

resultType和resultMap的区别是什么

ResultType对应entity中的一个对象
ResultMap也是返回值类型,但是范围要大于ResultType,可以存键值对

MyBatis核心对象的生命周期

在这里插入图片描述

增删改查操作

select

在这里插入图片描述
没有条件的时候的查询

/**
* 查询所有用户
*/
List<User> findUsers();

<select id="findUsers" resultType="User">
    select * from smbms_user
</select>

有多个参数的时候
可以通过@Param进行参数传递

/**
* 根据用户名称和用户角色进行查询
* 多个参数的时候一定要加上@Param才能实现查询,不然会报错
* @return
*/
List<User> findByUserNameAndUserRole(@Param("userName") String userName,@Param("userRole") Integer userRole);

<select id="findByUserNameAndUserRole" resultType="User">
    select * from smbms_user where userName like concat("%",#{userName},"%")
    and userRole=#{userRole}
</select>

也可以封装成User对象进行参数传递

/**
* 根据用户名称和用户角色进行查询
* @return
*/
List<User> findByUserNameAndUserRole1(User user);

<select id="findByUserNameAndUserRole1" resultType="User" parameterType="User">
    select * from smbms_user where userName like concat("%",#{username},"%")
    and userRole=#{userrole}
</select>

甚至可以封装成Map进行参数传递

/**
* 根据用户名称和用户角色进行查询
* @return
*/
List<User> findByUserNameAndUserRole2(Map<String,Object> map);
    
<select id="findByUserNameAndUserRole2" resultType="User">
    select * from smbms_user where userName like concat("%",#{username},"%")
    and userRole=#{userrole}
</select>
联表查询如何实现

在这里插入图片描述
通过别名方式进行查询

/**
* 根据用户表和角色表进行联表查询
* @return
*/
List<User> findByUserAndRole();

<select id="findByUserAndRole" resultType="User">
    select user.*,role.roleName as userRoleName from smbms_user user inner join 	smbms_role role on user.userRole = role.id
</select>

通过自定义ResultMap绑定数据

/**
* 根据用户表和角色表进行联表查询
* @return
*/
List<User> findByUserAndRole2();

<select id="findByUserAndRole2" resultMap="userMap">
    select user.*,role.roleName from smbms_user user inner join smbms_role role
    on user.userRole = role.id
</select>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ResultMap

在这里插入图片描述

<!--id是唯一的,对应resultMap的唯一标识名称  type是里面返回的类型-->
<resultMap id="userMap" type="User">
    <!--id标签表示表的主键-->
    <!--column表示数据库的列   property表示实体类的属性-->
    <id column="id" property="id"></id>
    <!--如果不是主键列,就用result表示-->
    <result column="roleName" property="userRoleName"></result>
</resultMap>

在这里插入图片描述

/**
* 对用户和角色进行联表查询
* @return
*/
List<User> findAllUserAndRole();

<resultMap id="UserAndRole" type="User">
        <id property="id" column="id"></id>
        <result property="username" column="userName"></result>
        <!--association表示一个实体类-->
        <!--association对应User类的属性值,javaType表示属性值的类型-->
        <association property="role" javaType="Role">
            <id property="id" column="roleId"></id>
            <result property="roleName" column="roleName"></result>
        </association>
    </resultMap>
    <select id="findAllUserAndRole" resultMap="UserAndRole">
        select user.*,role.id as roleId,role.roleName from smbms_user user inner 		  join smbms_role role on user.userRole = role.id
    </select>

在这里插入图片描述

/**
* 根据用户ID查询所有的地址信息
* @return
*/
List<User> findAddressById(Long id);

    <resultMap id="UserAndAddressList" type="User">
        <id property="id" column="id"></id>
        <result property="username" column="userName"></result>
        <!--association表示一个实体类-->
        <!--association对应User类的属性值,javaType表示属性值的类型-->
        <collection property="addressList" ofType="com.changan.entity.Address">
            <id property="id" column="addressId"></id>
            <result property="addressDesc" column="addressDesc"></result>
        </collection>
    </resultMap>
    <select id="findAddressById" resultMap="UserAndAddressList">
        select user.*,address.id as addressId,address.addressDesc from smbms_user 			user inner join smbms_address address on
        user.id = address.userId where user.id = #{id}
    </select>

欢迎各位大佬补充和指点

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值