SpringBoot集成Mybatis实现单表增删查改(注解方式)和关联表查询(xml方式,纯实体)(三)

202 阅读1分钟

前言:在SpringBoot集成Mybatis(一)中已经实现了注解方式和xml方式的单表查询,本章节新增通过注解的方式对单表进行修改,删除和新增。通过xml的方式对多表进行关联查询,并且返回的数据为实体类型 码云地址:gitee.com/fengayang/m…

下面两段代码为mapper.java文件和对应的xml文件,这两个文件需要关联着看

1、mapper代码

package com.jian.myspringboot.demo.dao;

import com.jian.myspringboot.demo.model.UserInfo;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserInfoMapper {
   /* *********************** TODO 注解方式操作数据库 start*******************/
    /**
     * 按照id查询用户
     * @param id 用户id
     * @return 单个用户信息
     */
    @Select("select * from user_info where id= #{id}")
    UserInfo queryUserById(@Param("id") Long id);

    /**
     * 新增用户信息,并返回新增数据id
     * @param userInfo 用户信息
     */
    @Insert("insert into user_info(user_name) values(#{userName})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    Long insertUserInfo(UserInfo userInfo);

    /**
     * 批量新增用户信息,并返回新增数据id集合
     * @param userInfos 用户实体集合
     * @return 修改条数
     */
    @Insert({"<script> insert into user_info(user_name) values " +
            "<foreach collection='userInfos' item='item' separator=',' >" +
            "(#{item.userName})" +
            "</foreach> </script>"})
    int insertBatchUserInfo(List<UserInfo> userInfos);

    /**
     * 修改业主信息数据
     * @param userInfo 用户实体
     * @return 修改条数
     */
    @Update("update user_info set user_name=#{userName} where id=#{id}")
    int updateUserInfo(UserInfo userInfo);

    /**
     * 批量修改
     * @param userInfos 用户信息列表
     * @return
     */
    @Update({"<script>" +
            "<foreach collection='userInfos' item='item' separator=';'>" +
            " UPDATE user_info set user_name = #{item.userName}" +
            " WHERE id = #{item.id}" +
            "</foreach>" +
            "</script>"})
    int updateBatchUserInfo(List<UserInfo> userInfos);

    /**
      批量删除用户信息
      @param userInfos
     * @return
     */
    @Delete({"<script>"+
            "delete from user_info where id in " +
            "<foreach collection='list' item='item' open='(' separator=',' close=')' > " +
            "#{item.id}" +
            "</foreach>" +
            "</script>"})
    int deleteBatchUserInfo(List<UserInfo> userInfos);

    /* *********************** 注解方式操作数据库end*******************/

    /* ****************************** TODO xml方式操作数据库start*******************************/
    /**
     * 查询所有用户
     * @return 所有用户信息
     */
    List<UserInfo> queryAllUser();


    /**
     * 查询用户信息和相关部门信息
     * @return
     */
    UserInfo queryUserInfoAndDepByUserId(@Param("id") Long id);

    /* ******************************xml方式操作数据库end*******************************/
}

2、mapperXml文件代码

<?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="com.jian.myspringboot.demo.dao.UserInfoMapper">
    <select id="queryAllUser" resultType="UserInfo">
        select
            *
        from
            user_info
    </select>

    <!--查询业主和部门信息-->
    <!--定义查询的字段,查询出来的字段要保持唯一性,不然返回的数据会有问题-->
    <sql id="user_dep_list">
        user.id,user.user_name,dep.id ideId,dep.name depName,dep.tel depTel
    </sql>
    <select id="queryUserInfoAndDepByUserId" resultMap="UserInfoResultMap">
        select <include refid="user_dep_list"/>
        from user_info user
                 left join tbl_department dep on user.department_id = dep.id
        where user.id = #{id}
    </select>
    <resultMap type="UserInfo" id="UserInfoResultMap">
        <id property="id" column="id"/>
        <result property="userName" column="user_name"/>
        <!--将关联表的数据转换为实体数据-->
        <association property="department" javaType="Department">
            <id property="id" column="ideId"/>
            <result property="name" column="depName"/>
            <result property="tel" column="depTel"/>
        </association>
    </resultMap>
</mapper>