mapper.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">

<!-- namespace为命名空间,应该是mapper接口的全称-->
<mapper namespace="com.quinnnorris.mybatis.mapper.UserMapper">

    <!--  定义resultMap 将id id_ username username_ 做映射
        type表示resultMap最终映射的java对象类型
        id表示resultMap的一个唯一标识,即主键的映射
        result表示resultMap对查询结果其他列的映射
        column表示查询出来的列名
        property表示type指定的bean类型属性名
        association 表示用于映射关联查询的单个对象的信息
        collection对关联查询到多条信息映射到集合对象中
        collection与association中的property表示对应的mapper.java中哪一个属性
        ofType表示映射到list集合属性的bean类型
        javaType表示association该属性的集合类型
        extends表示继承,不用重复配置,继承中内容是其他resultMap的id
        -->
    <resultMap id="userResultMap" type="user" extends="">
        <id column="id_" property="id"/>
        <result column="username_" property="username"/>
        <!-- <association property="user" javaType="com.quinnnorris.mybatis.bean.User">
            <id column="" property="" />
            <result column="" property="" />
        </association> -->
        <!--<collection property="orderdetails" ofType="com.quinnnorris.mybatis.bean.Orderdetail">
            <id column="" property=""/>
            <result column="" property=""/>
        </collection>-->
    </resultMap>

    <!-- 定义sql片段
        id是唯一表示sql片段
        习惯上,我们基于单表定义sql片段,这样重用性高
        习惯上,在sql片段中不使用where-->
    <sql id="queryUserWhere">
        <if test="userCustom!=null">
            <if test="userCustom.sex!=null and userCustom.sex!=' '">
                user.sex = #{userCustom.sex}
            </if>
            <if test="userCustom.username!=null and userCustom.username!=' '">
                user.username LIKE '%${UserCustom.username}%'
            </if>
            <if test="ids!=null">
                <!-- 使用foreach遍历传入的ids
                    collection指定输入对象中集合的属性
                    item表示每个便利生成对象
                    open表示开始遍历时拼接的字符串
                    close表示结束遍历时拼接的字符串
                    separator遍历的两个对象中间需要拼接的字符串
                    -->
                <foreach collection="ids" item="item_id" open="AND (" close=")" separator="OR">
                    id=#{item_id}
                </foreach>
            </if>
        </if>
    </sql>

    <!-- 用户信息综合查询-->
    <select id="findUserList" parameterType="UserQueryVo" resultType="UserCustom">
        SELECT * FROM USER
        <!--  where会自动去掉第一个条件的and
            refid是指定的sql片段id,如果不再此xml中需要namespace-->
        <where>
            <include refid="queryUserWhere"></include>
        </where>
    </select>

    <!-- 用户信息综合查询总数目-->
    <select id="findUserCount" parameterType="UserQueryVo" resultType="int">
        SELECT count(*) FROM USER
        <where>
            <include refid="queryUserWhere"></include>
        </where>
    </select>

    <!-- 在映射文件中配置sql语句,并配置输入对象类型,输出对象类型,id
        其中使用#{}表示占位符,其中填写参数,例如:#{id}。
        如果占位符中的类型是简单类型则参数名可以任意填写。
        resultType指定sql输出结果的所映射的java对象类型
        select指定resultType表示将单条记录映射成的java对象。
    -->

    <!-- 如果将select中的属性改名,那么结果将不能正确的映射!-->

    <select id="findUserById" parameterType="int" resultType="com.quinnnorris.mybatis.bean.User">
        SELECT * FROM USER WHERE id = #{id}
    </select>


    <!-- 如果这个resultMap在其他的mapper.xml文件中,那么需要加上namespace前缀-->
    <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
        SELECT id id_,username username_ FROM USER WHERE id = #{id}
    </select>

    <!-- ${}表示拼接sql串,将接收到的参数不加任何修改的传入sql语句中
        会存在注入攻击的问题。
        如果传入简单类型,只能使用value作为参数接受输入参数的内容,即${value}
    -->

    <select id="findUserByName" parameterType="java.lang.String" resultType="com.quinnnorris.mybatis.bean.User">
        SELECT * FROM USER WHERE NAME LIKE '%${value}%'
    </select>

    <!-- #{}中指定bean的属性名,通过属性名接收到bean对象的属性值。
        selectKey是将插入数据insert的主键返回到parameterType对象的keyProperty属性(也就是id)中
        order表示执行顺序,selectKey的执行在insert后。
        SELECT last_insert_id()表示得到刚执行的insert语句的自增id,
        这句sql执行成功的必要条件:1.id是自增的 2.在insert后紧跟执行此语句
        resultType指定selectKey的结果类型
    -->

    <insert id="insertUser" parameterType="com.quinnnorris.mybatis.bean.User">
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            SELECT last_insert_id()
        </selectKey>
        INSERT INTO USER (username,birthday,sex,address) value (#{username},#{birthday},#{sex},#{address})
        <!-- 使用mysql的uuid非自增的生成主键,先用selectKey的BEFORE生成主键,填充到user的id中,
            注意uuid生成的主键需要为String类型。
            在insert语句中需要填写id属性,此时id属性是uuid已经填充好的情况。

        <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
            SELECT uuid()
        </selectKey>
        INSERT INTO USER (id,username,birthday,sex,address) value (#{id},#{username},#{birthday},#{sex},#{address})
        -->
    </insert>

    <delete id="deleteUser" parameterType="int">
        DELETE FROM USER WHERE id = #{id}
    </delete>

    <update id="updateUser" parameterType="com.quinnnorris.mybatis.bean.User">
        UPDATE USER SET sex=#{sex},username=#{username},birthday=#{birthday} WHERE id = #{id}
    </update>

</mapper>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

〆`杨陆原じ₯㎕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值