mybatis_generate_demo

UserInfoMapper
 
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserInfoMapper {

    /**
     * 新增 1 条记录,若成功则返回 1,若因唯一键重复则抛 DuplicateKeyException
     *
     * @param userInfo
     * @return
     */
    Integer add(UserInfo userInfo);

    /**
     * 根据主键物理删除一条记录,若成功则返回 1;若删除的数据不存在则返回 0
     *
     * @param id
     * @return
     */
    Integer physicalDeleteById(Long id);

    /**
     * 根据主键逻辑删除一条记录,若成功则返回 1;若删除的数据不存在则返回 0
     *
     * @param id
     * @return
     */
    Integer logicalDeleteById(Long id);

    /**
     * 更新一条记录,若成功则返回 1;若更新的数据不存在则返回 0.(注意: 入参 createdTime 不需赋值)
     *
     * @param userInfo
     * @return
     */
    Integer updateById(UserInfo userInfo);

    /**
     * 根据主键查询一条记录
     *
     * @param id
     * @return
     */
    UserInfo queryOneById(Long id);

    /**
     * 查询 1 条记录,若有多条记录符合条件,也只返回 1 条记录(LIMIT 1)
     *
     * @param userInfo
     * @return
     */
    UserInfo queryOne(UserInfo userInfo);

    /**
     * 查询列表,若入参为 null,则返回所有记录
     *
     * @param ids
     * @return
     */
    List<UserInfo> queryListByIds(@Param("ids") List<Long> ids);

    /**
     * 查询列表,若入参为 null,则返回所有记录
     * time between start and end 等价于 time >= start and time <= end,包括首尾
     * <if test='null!=startTime and null!=endTime'>AND create_time BETWEEN #{startTime} AND #{endTime}</if>
     * <if test='null!=startTime'><![CDATA[AND create_time >= #{startTime}]]></if>
     * <if test='null!=endTime'><![CDATA[AND create_time <= #{endTime}]]></if>
     *
     * @param userInfo
     * @return
     */
    List<UserInfo> queryList(@Param("userInfo") UserInfo userInfo);

    /**
     * 分页查询
     *
     * @param userInfo
     * @param offset   = (pageNum - 1) * pageSize,pageNum 从 1 开始
     * @param rowCount = pageSize
     * @return
     */
    List<UserInfo> queryPage(@Param("userInfo") UserInfo userInfo,
                             @Param("offset") Integer offset,
                             @Param("rowCount") Integer rowCount);

    /**
     * 查询符合条件的记录总数
     *
     * @param userInfo
     * @return
     */
    Integer count(@Param("userInfo") UserInfo userInfo);

    /**
     * 批量新增,若成功则返回新增的记录条数,若因唯一键重复则抛 DuplicateKeyException
     *
     * @param userInfos
     * @return
     */
    Integer addBatch(List<UserInfo> userInfos);

    /**
     * 批量物理删除,若成功则返回删除的记录条数;若删除的记录其中有不存在的记录,则只返回成功删除的记录数;若删除的记录 1 条都不存在,则返回 0
     *
     * @param ids
     * @return
     */
    Integer physicalDeleteByIds(@Param("ids") List<Long> ids);

    /**
     * 批量逻辑删除,若成功则返回删除的记录条数;若删除的记录其中有不存在的记录,则只返回成功删除的记录数;若删除的记录 1 条都不存在,则返回 0
     *
     * @param ids
     * @return
     */
    Integer logicalDeleteByIds(@Param("ids") List<Long> ids);

    /**
     * 批量更新,若成功则返回更新的记录条数.(注意: 入参 createdTime 不需赋值;若属性为空则不更新对应的字段.)
     *
     * @param userInfos
     * @return
     */
    Integer updateBatch(List<UserInfo> userInfos);

}
DemoMapper.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="com.test.mapper.DemoMapper">
	
	<sql id="selectedFields">
		<![CDATA[
			id,
			name,
			age,
			height,
			create_time AS createTime
		]]>
	</sql>
	
	<sql id="whereClause">
		<where>
			<if test="null!=id">AND id = #{id}</if>
			<if test="null!=name and ''!=name">AND name = #{name}</if>
			<if test="null!=age">AND age = #{age}</if>
			<if test="null!=height">AND height = #{height}</if>
			AND is_deleted = 0
		</where>
	</sql>
	
	<sql id="listWhereClause">
		<where>
			<if test="null!=demo.id">AND id = #{demo.id}</if>
			<if test="null!=demo.name and ''!=demo.name">AND name = #{demo.name}</if>
			<if test="null!=demo.age">AND age = #{demo.age}</if>
			<if test="null!=demo.height">AND height = #{demo.height}</if>
			AND is_deleted = 0
		</where>
		ORDER BY create_time DESC
	</sql>
	
	<sql id="pageOrCountWhereClause">
		<where>
			<if test="null!=demo.id">AND id = #{demo.id}</if>
			<if test="null!=demo.name and ''!=demo.name">AND name = #{demo.name}</if>
			<if test="null!=demo.age">AND age = #{demo.age}</if>
			<if test="null!=demo.height">AND height = #{demo.height}</if>
			AND is_deleted = 0
		</where>
		ORDER BY create_time DESC
	</sql>
	
	<insert id="add" parameterType="com.test.entity.Demo" keyProperty="id">
		INSERT INTO demo
		<trim prefix="(" suffix=")" prefixOverrides=",">
			<if test="null!=id">,id</if>
			<if test="null!=name and ''!=name">,name</if>
			<if test="null!=age">,age</if>
			<if test="null!=height">,height</if>
			<if test="null!=createTime">,create_time</if>
		</trim>
		VALUES
		<trim prefix="(" suffix=")" prefixOverrides=",">
			<if test="null!=id">,#{id}</if>
			<if test="null!=name and ''!=name">,#{name}</if>
			<if test="null!=age">,#{age}</if>
			<if test="null!=height">,#{height}</if>
			<if test="null!=createTime">,#{createTime}</if>
		</trim>
	</insert>
	
	<!-- 物理删除 -->
	<delete id="physicalDeleteById" parameterType="long">
		DELETE FROM demo WHERE id = #{id}
	</delete>
	
	<!-- 逻辑删除 -->
	<update id="logicalDeleteById" parameterType="long">
		UPDATE demo SET is_deleted = 1,update_time = now()
		WHERE id = #{id}
	</update>
	
	<update id="updateById" parameterType="com.test.entity.Demo">
		UPDATE demo
		<trim prefix="SET" prefixOverrides=",">
			<if test="null!=name and ''!=name">,name = #{name}</if>
			<if test="null!=age">,age = #{age}</if>
			<if test="null!=height">,height = #{height}</if>
			<if test="null!=createTime">,create_time = #{createTime}</if>
		</trim>
		WHERE id = #{id}
	</update>

	<select id="queryOneById" parameterType="long" resultType="com.test.entity.Demo">
		SELECT <include refid="selectedFields"/> FROM demo WHERE id = #{id}
	</select>
	
	<select id="queryOne" parameterType="com.test.entity.Demo" resultType="com.test.entity.Demo">
		SELECT <include refid="selectedFields"/> FROM demo
		<include refid="whereClause" />
		LIMIT 1
	</select>
	
	<select id="queryListByIds" parameterType="java.util.List" resultType="com.test.entity.Demo">
		SELECT <include refid="selectedFields"/> FROM demo
		<where>
			<if test="ids!=null and ids.size()>0">
				AND id IN
				<foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
					#{item}
				</foreach>
			</if>
		</where>
	</select>

	<select id="queryList" parameterType="com.test.entity.Demo" resultType="com.test.entity.Demo">
		SELECT <include refid="selectedFields"/> FROM demo
		<include refid="listWhereClause" />
	</select>
	
	<select id="queryPage" resultType="com.test.entity.Demo">
		SELECT <include refid="selectedFields"/>
		FROM demo t
		INNER JOIN (SELECT id temp_id FROM demo) temp ON t.id = temp.temp_id
		<include refid="pageOrCountWhereClause" />
		<if test="null!=offset and null!=rowCount">
			LIMIT #{offset}, #{rowCount}
		</if>
	</select>
	
	<select id="count" resultType="int">
		SELECT COUNT(1) FROM demo <include refid="pageOrCountWhereClause" />
	</select>
	
	<insert id="addBatch" parameterType="java.util.List">
		INSERT INTO demo (
				id,
				name,
				age,
				height,
				create_time
		)
		VALUES 
		<foreach collection="list" item="item" index="index" separator=","> 
			<trim prefix="(" suffix=")" prefixOverrides=",">
				,#{item.id}
				,#{item.name}
				,#{item.age}
				,#{item.height}
				,#{item.createTime}
			</trim>
		</foreach>
	</insert>

	<!-- 物理删除 -->
	<delete id="physicalDeleteByIds" parameterType="java.util.List">
		DELETE FROM demo
		<where>
			<if test="ids!=null and ids.size()>0">
				AND id IN
				<foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
					#{item}
				</foreach>
			</if>
		</where>
	</delete>

	<!-- 批量逻辑删除 -->
	<update id="logicalDeleteByIds" parameterType="java.util.List">
		UPDATE demo SET is_deleted = 1,update_time = now()
		<where>
			<if test="ids!=null and ids.size()>0">
				AND id IN
				<foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
					#{item}
				</foreach>
			</if>
		</where>
	</update>

	<update id="updateBatch" parameterType="java.util.List">
		UPDATE demo
		<trim prefix="SET" suffixOverrides=",">
			<trim prefix="name=CASE" suffix="END,">
				<foreach collection="list" item="item" index="index">
					<if test="null==item.name or ''==item.name">
						WHEN id=#{item.id} THEN name
					</if>
					<if test="null!=item.name and ''!=item.name">
						WHEN id=#{item.id} THEN #{item.name}
					</if>
				</foreach>
			</trim>
			<trim prefix="age=CASE" suffix="END,">
				<foreach collection="list" item="item" index="index">
					<if test="null==item.age">
						WHEN id=#{item.id} THEN age
					</if>
					<if test="null!=item.age">
						WHEN id=#{item.id} THEN #{item.age}
					</if>
				</foreach>
			</trim>
			<trim prefix="height=CASE" suffix="END,">
				<foreach collection="list" item="item" index="index">
					<if test="null==item.height">
						WHEN id=#{item.id} THEN height
					</if>
					<if test="null!=item.height">
						WHEN id=#{item.id} THEN #{item.height}
					</if>
				</foreach>
			</trim>
			<trim prefix="create_time=CASE" suffix="END,">
				<foreach collection="list" item="item" index="index">
					<if test="null==item.createTime">
						WHEN id=#{item.id} THEN create_time
					</if>
					<if test="null!=item.createTime">
						WHEN id=#{item.id} THEN #{item.createTime}
					</if>
				</foreach>
			</trim>
		</trim>
		WHERE id IN
		<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
			#{item.id}
		</foreach>
	</update>

</mapper>
posted @ 2025-11-16 14:33  凛冬雪夜  阅读(4)  评论(0)    收藏  举报