mybatis一些总结

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper.dtd-->
<mapper namespace="test">
    <select id="findUserById" parameterType="int" resultType="com.lzq.mybat.User">
        SELECT *
        FROM user
        WHERE id = #{id}
    </select>
    <!--中间是sql语句#{}表示展位副,其中的值可任意,parametertypetype和展位副类型一样-->
    <!--虽然这个模糊查询查询出多条记录,看似返回值是list,but,resulttype结果类型是单条result所映射的java类型-->
    <select id="findUserByName" parameterType="java.lang.String" resultType="com.lzq.mybat.User">
        SELECT *
        FROM user
        WHERE username LIKE '%${value}%'
    </select>


    <!--得到主键,因为表间的关联关系,主表主键作为子表关联外键-->

    <!--添加用户-->
    <!--得到insert进去的主键值,仅适用于auto_increment主键-->
    <!--keyproperty 值为将结果映射为parameterType中的id属性值,order相对于insert 语句执行之后-->
    <insert id="insertUser" parameterType="com.lzq.mybat.User">
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            SELECT last_insert_id()
        </selectKey>
        INSERT INTO user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
    </insert>

    <!--适用于非自增主键,before,先通过uuid的到主键,在通过insert into 插入进去,所以是before-->
    <!--<insert id="insertUser" parameterType="com.lzq.mybat.User">-->
        <!--<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Integer">-->
            <!--SELECT uuid()-->
        <!--</selectKey>-->
        <!--INSERT INTO user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})-->
    <!--</insert>-->
    
    <!--删除用户-->
    <delete id="deleteUser" parameterType="java.lang.Integer" >
        DELETE FROM user WHERE id=#{id}
    </delete>

    <!--根据id更新用户,-->
    <update id="updateUser" parameterType="com.lzq.mybat.User">
        UPDATE user SET username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}
    </update>






<xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper.dtd-->
<!--namespace在开发mapper代理时有重要作用,就是写成mapper接口的地址-->
<!--采用mapper代理开发,省去很多重复代码-->
<mapper namespace="com.lzq.mapper.UserMapper">

    <!--定义sql片段-->
    <sql id="query_user_where">
        <if test="userExpand!=null">
            <if test="userExpand.sex!=null and userExpand.sex!='' ">
                and user.sex=#{userExpand.sex}
            </if>
            <if test="userExpand.username!=null and userExpand.username!=''">
                and user.username=#{userExpand.username}
            </if>
        </if>
        <if test="ids!=null">
#             使用foreach遍历传入ids,collection遍历的集合,item遍历的每一个的名称自己赋值,
#             open 开始遍历拼接的sql语句开头,close=“” 结束遍历所拼接的串,separator遍历的两个对象
#             中间所需要拼接的字符串
#             sql语句为 AND (id=1 or id=10 or id=16)
            <foreach collection="ids" item="user_id" open="AND (" close=")" separator="or">
#                 每次遍历需要拼接的串
                id=#{user_id}
            </foreach>
# sql 语句 and id in (1,10,16)
            <foreach collection="ids" item="user_id" open="AND id in (" close=")" separator=",">
                #{user_id}
            </foreach>
        </if>
    </sql>


    <!--定义 resultmap,type是最终映射的java对象,id唯一标识-->
    <resultMap id="userResultMap" type="user">
        <!--id 映射唯一主键,colum查询出的列,propertytype中的属性-->
        <!--result 普通映射-->
        <id column="id_" property="id"/>
        <result column="username_" property="username"/>
    </resultMap>
    <!--resultMap 为创建的resultMapid号,如果,resultmap在其他的xml文件中,前面需加上namespace-->
    <!--查询的出来的字段与pojo中的字段不一样,即 select id id_ 下面的这种查询语句,需要通过,resultMap映射-->
    <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
        SELECT
            id       id_,
            username username_
        FROM user
        WHERE id = #{value}
    </select>


    <select id="findUserById" parameterType="int" resultType="com.lzq.mybat.User">
        SELECT *
        FROM user
        WHERE id = #{id}
    </select>

    <!--输入参数,输出参数多元化-->
    <select id="findUserList" parameterType="com.lzq.dao.UserQueryVo" resultType="com.lzq.dao.UserExpand">
        SELECT *
        FROM user
        # where可以自动的去掉第一个and
        <where>
            # 如果不在此mapp.xml中,再别处加namespace
            <include refid="query_user_where"/>
        </where>
        # WHERE user.id = #{userExpand.sex} AND user.username LIKE '%${userExpand.username}%'
    </select>
    <!--userExpand.sex取出包装类型 的参数值,parametertype类型中包含userExpand-->

    <!--中间是模模糊查询查询出多条记ql语句#{}表示展位副,其中的值可任意,parametertypetype和展位副类型一样-->
    <!--虽然这个模糊查询查询出多条记录,看似返回值是list,but,resulttype结果类型是单条result所映射的java类型-->
    <select id="findUserByName" parameterType="java.lang.String" resultType="com.lzq.mybat.User">
        SELECT *
        FROM user
        WHERE username LIKE '%${value}%'
    </select>
    <!--模糊查询用拼接符${}并用引号引起来,#{}不用用引号括起来-->

    <!--得到主键,因为表间的关联关系,主表主键作为子表关联外键-->

    <!--添加用户-->
    <!--得到insert进去的主键值,仅适用于auto_increment主键-->
    <!--keyproperty 值为将结果映射为parameterType中的id属性值,order相对于insert 语句执行之后-->
    <insert id="insertUser" parameterType="com.lzq.mybat.User">
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            SELECT last_insert_id()
        </selectKey>
        INSERT INTO user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
    </insert>

    <!--适用于非自增主键,before,先通过uuid的到主键,在通过insert into 插入进去,所以是before-->
    <!--<insert id="insertUser" parameterType="com.lzq.mybat.User">-->
    <!--<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Integer">-->
    <!--SELECT uuid()-->
    <!--</selectKey>-->
    <!--INSERT INTO user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})-->
    <!--</insert>-->

    <!--删除用户-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        DELETE FROM user
        WHERE id = #{id}
    </delete>

    <!--根据id更新用户,-->
    <update id="updateUser" parameterType="com.lzq.mybat.User">
        UPDATE user
        SET username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address}
        WHERE id = #{id}
    </update>
</mapper>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值