Skip to content

mybatits工作积累

新增

xml
<!-- parameterType:Cinema 表示入参 -->
<insert id="addCinema" parameterType="Cinema">
    <!-- nsert into cinema (cinema_name, cinema_address, cinema_city, create_time) values (#{cinemaName}, #{cinemaAddress}, #{cinemaCity}, current_timestamp)-->
    insert into cinema (
    <if test="cinemaName != null and cinemaName != '' ">cinema_name, </if>
    <if test="cinemaAddress != null and cinemaAddress != '' ">cinema_address, </if>
    <if test="cinemaCity != null and cinemaCity != '' ">cinema_city, </if>
    create_time
    )values(
    <if test="cinemaName != null and cinemaName != ''">#{cinemaName}, </if>
    <if test="cinemaAddress != null and cinemaAddress != ''">#{cinemaAddress}, </if>
    <if test="cinemaCity != null and cinemaCity != ''">#{cinemaCity}, </if>
    current_timestamp
    )
</insert>
<!-- parameterType:Cinema 表示入参 -->
<insert id="addCinema" parameterType="Cinema">
    <!-- nsert into cinema (cinema_name, cinema_address, cinema_city, create_time) values (#{cinemaName}, #{cinemaAddress}, #{cinemaCity}, current_timestamp)-->
    insert into cinema (
    <if test="cinemaName != null and cinemaName != '' ">cinema_name, </if>
    <if test="cinemaAddress != null and cinemaAddress != '' ">cinema_address, </if>
    <if test="cinemaCity != null and cinemaCity != '' ">cinema_city, </if>
    create_time
    )values(
    <if test="cinemaName != null and cinemaName != ''">#{cinemaName}, </if>
    <if test="cinemaAddress != null and cinemaAddress != ''">#{cinemaAddress}, </if>
    <if test="cinemaCity != null and cinemaCity != ''">#{cinemaCity}, </if>
    current_timestamp
    )
</insert>

修改

xml
<update id="updateCinema" parameterType="Cinema">
    <!--UPDATE cinema
    SET cinema_name = #{cinemaName}, cinema_address = #{cinemaAddress}, cinema_city = #{cinemaCity}
    WHERE cinema_id = #{cinemaId};-->
    update cinema
    <set>
        <if test="cinemaName != null and cinemaName != ''">cinema_name = #{cinemaName}, </if>
        <if test="cinemaAddress != null and cinemaAddress != ''">cinema_address = #{cinemaAddress}, </if>
        <if test="cinemaCity != null and cinemaCity != ''">cinema_city = #{cinemaCity}, </if>
    </set>
    where cinema_id = #{cinemaId}
</update>
<update id="updateCinema" parameterType="Cinema">
    <!--UPDATE cinema
    SET cinema_name = #{cinemaName}, cinema_address = #{cinemaAddress}, cinema_city = #{cinemaCity}
    WHERE cinema_id = #{cinemaId};-->
    update cinema
    <set>
        <if test="cinemaName != null and cinemaName != ''">cinema_name = #{cinemaName}, </if>
        <if test="cinemaAddress != null and cinemaAddress != ''">cinema_address = #{cinemaAddress}, </if>
        <if test="cinemaCity != null and cinemaCity != ''">cinema_city = #{cinemaCity}, </if>
    </set>
    where cinema_id = #{cinemaId}
</update>

删除

  • 单个删除
xml
<!-- 删除影院 -->
<delete id="deleteCinemaById" parameterType="Long">
    delete from cinema where cinema_id = #{cinema_id}
</delete>
<!-- 删除影院 -->
<delete id="deleteCinemaById" parameterType="Long">
    delete from cinema where cinema_id = #{cinema_id}
</delete>
  • 批量删除
xml
<delete id="deleteCinemaByIds" parameterType="String">
    delete from cinema where cinema_id in
    <foreach item="cinemaId" collection="array" open="(" separator="," close=")">
        #{cinemaId}
    </foreach>
</delete>
<delete id="deleteCinemaByIds" parameterType="String">
    delete from cinema where cinema_id in
    <foreach item="cinemaId" collection="array" open="(" separator="," close=")">
        #{cinemaId}
    </foreach>
</delete>

查询

xml
<!-- 查询所有影院 -->
<select id="queryAllCinema" resultMap="CinemaResult">
    select * from cinema;
</select>
<!-- 查询所有影院 -->
<select id="queryAllCinema" resultMap="CinemaResult">
    select * from cinema;
</select>
xml
<!-- 根据条件查询影院 -->
<select id="queryCinemaByCondition" resultMap="CinemaResult">
    select * from cinema
    <where>
        <if test="cinemaName != null and cinemaName != ''">
            and cinema_name like concat('%', #{cinemaName}, '%')
        </if>
        <if test="cinemaAddress != null and cinemaAddress != ''">
            and cinema_address like concat('%', #{cinemaAddress}, '%')
        </if>
    </where>
</select>
<!-- 根据条件查询影院 -->
<select id="queryCinemaByCondition" resultMap="CinemaResult">
    select * from cinema
    <where>
        <if test="cinemaName != null and cinemaName != ''">
            and cinema_name like concat('%', #{cinemaName}, '%')
        </if>
        <if test="cinemaAddress != null and cinemaAddress != ''">
            and cinema_address like concat('%', #{cinemaAddress}, '%')
        </if>
    </where>
</select>

联表查询

java
@Data
public class Movie {
    private Long movieId = 0L;  //电影id
    private Long cinemaId = 0L;  //影院id
    private String movieName = null;  //电影名
    private String moviePerformer = null;  //演员
    private String movieLength = null;  //时长
    private String movieType = null;  //类型
    private String movieTime = null;  //上映时间
    private int movieScore = 0;  //评分
    private String movieInfo = null;  //简介
    // 联表查询必须要加这个
    private Cinema cinema = null;  // 影院(表示该电影属于哪个影院)
}

// 接收前端传来的值
@Data
public class CinemaMovieVo {
    private Long cinemaId = 0L; // 影院id - 前端传来的值有id,必须传,不然接收不到
    private String cinemaName = null;  // 影院名
    private String movieName = null;  // 电影名
}
@Data
public class Movie {
    private Long movieId = 0L;  //电影id
    private Long cinemaId = 0L;  //影院id
    private String movieName = null;  //电影名
    private String moviePerformer = null;  //演员
    private String movieLength = null;  //时长
    private String movieType = null;  //类型
    private String movieTime = null;  //上映时间
    private int movieScore = 0;  //评分
    private String movieInfo = null;  //简介
    // 联表查询必须要加这个
    private Cinema cinema = null;  // 影院(表示该电影属于哪个影院)
}

// 接收前端传来的值
@Data
public class CinemaMovieVo {
    private Long cinemaId = 0L; // 影院id - 前端传来的值有id,必须传,不然接收不到
    private String cinemaName = null;  // 影院名
    private String movieName = null;  // 电影名
}
xml
<mapper namespace="com.ruoyi.test.mapper.MovieMapper">
    <!-- movie结果集, 修改之后可以不用 -->
    <resultMap id="MovieResult" type="Movie" autoMapping="true">
        <id     property="movieId"        column="movie_id"      />
        <id     property="cinemaId"        column="cinema_id"      />
        <result property="movieName"      column="movie_name"        />
        <result property="moviePerformer"   column="movie_performer"       />
        <result property="movieLength"      column="movie_length"   />
        <result property="movieType"      column="movie_type"   />
        <result property="movieTime"      column="movie_time"   />
        <result property="movieScore"      column="movie_score"   />
        <result property="movieInfo"      column="movie_info"   />
        <!-- cinema -->
        <!--
            property中的cinema,是Movie类中Cinema的属性名
            javaType中的Cinema,表示com.ruoyi.test.domain.Cinema实体类
            一对多的多表查询,需要使用association包装
            这里面可以使用property="cinema"是因为在Movie类中,加了private Cinema cinema = null;  // 影院(表示该电影属于哪个影院)
            javaType表示连表查询中的子表的实体类
        -->
        <association property="cinema" javaType="Cinema">
            <id     property="cinemaId"        column="cinema_id"      />
            <result property="cinemaName"      column="cinema_name"        />
            <result property="cinemaAddress"   column="cinema_address"       />
            <result property="cinemaCity"      column="cinema_city"   />
            <result property="createTime"      column="create_time"   />
        </association>
    </resultMap>

    <!-- resultType和resultMap功能类似,都表示返回的结果,不能同时使用,一般用resultMap -->
    <!-- parameterType表示要前端传过来的数据类型,可以使用vo类来自定义 -->
    <select id="queryMoviePageByCinemaId" parameterType="CinemaMovieVo" resultMap="MovieResult">
        select *
        from movie m
        left join cinema c on m.cinema_id = c.cinema_id
        <where>
            <if test="cinemaId != null and cinemaId != ''">
                and m.cinema_id like concat('%', #{cinemaId}, '%')
            </if>
            <if test="movieName != null and movieName != ''">
                and movie_name like concat('%', #{movieName}, '%')
            </if>
            <if test="cinemaName != null and cinemaName != ''">
                and cinema_name like concat('%', #{cinemaName}, '%')
            </if>
        </where>
    </select>
</mapper>
<mapper namespace="com.ruoyi.test.mapper.MovieMapper">
    <!-- movie结果集, 修改之后可以不用 -->
    <resultMap id="MovieResult" type="Movie" autoMapping="true">
        <id     property="movieId"        column="movie_id"      />
        <id     property="cinemaId"        column="cinema_id"      />
        <result property="movieName"      column="movie_name"        />
        <result property="moviePerformer"   column="movie_performer"       />
        <result property="movieLength"      column="movie_length"   />
        <result property="movieType"      column="movie_type"   />
        <result property="movieTime"      column="movie_time"   />
        <result property="movieScore"      column="movie_score"   />
        <result property="movieInfo"      column="movie_info"   />
        <!-- cinema -->
        <!--
            property中的cinema,是Movie类中Cinema的属性名
            javaType中的Cinema,表示com.ruoyi.test.domain.Cinema实体类
            一对多的多表查询,需要使用association包装
            这里面可以使用property="cinema"是因为在Movie类中,加了private Cinema cinema = null;  // 影院(表示该电影属于哪个影院)
            javaType表示连表查询中的子表的实体类
        -->
        <association property="cinema" javaType="Cinema">
            <id     property="cinemaId"        column="cinema_id"      />
            <result property="cinemaName"      column="cinema_name"        />
            <result property="cinemaAddress"   column="cinema_address"       />
            <result property="cinemaCity"      column="cinema_city"   />
            <result property="createTime"      column="create_time"   />
        </association>
    </resultMap>

    <!-- resultType和resultMap功能类似,都表示返回的结果,不能同时使用,一般用resultMap -->
    <!-- parameterType表示要前端传过来的数据类型,可以使用vo类来自定义 -->
    <select id="queryMoviePageByCinemaId" parameterType="CinemaMovieVo" resultMap="MovieResult">
        select *
        from movie m
        left join cinema c on m.cinema_id = c.cinema_id
        <where>
            <if test="cinemaId != null and cinemaId != ''">
                and m.cinema_id like concat('%', #{cinemaId}, '%')
            </if>
            <if test="movieName != null and movieName != ''">
                and movie_name like concat('%', #{movieName}, '%')
            </if>
            <if test="cinemaName != null and cinemaName != ''">
                and cinema_name like concat('%', #{cinemaName}, '%')
            </if>
        </where>
    </select>
</mapper>

排序,空白放前面或者后面

sql
<if test="sortContent == 'lastHandleTime' and order == 'descending'" >
    order by
    CASE
    WHEN b.last_handle_time IS NULL THEN 0
    ELSE 1
    END,
    b.last_handle_time DESC
</if>
<if test="sortContent == 'lastHandleTime' and order == 'ascending'" >
    order by
    CASE
    WHEN b.last_handle_time IS NULL THEN 1
    ELSE 0
    END,
    b.last_handle_time ASC
</if>
<if test="sortContent == 'lastHandleTime' and order == 'descending'" >
    order by
    CASE
    WHEN b.last_handle_time IS NULL THEN 0
    ELSE 1
    END,
    b.last_handle_time DESC
</if>
<if test="sortContent == 'lastHandleTime' and order == 'ascending'" >
    order by
    CASE
    WHEN b.last_handle_time IS NULL THEN 1
    ELSE 0
    END,
    b.last_handle_time ASC
</if>