20170710@wedoctor

<b>一、mybatis</b>
今天改老代码BUG的时候碰到的一个mybatis相关的问题.
使用以下mapper.xml:

      <insert id="addUser" parameterType="userDo">
        INSERT INTO gl_user (
        id,
        gmt_created,
        gmt_modified,
        is_delete,
        login_id,
        nick_name,
        password,
        region,
        user_status,
        user_type,
        user_attribute,
        modify_user_id,
        created_user_id
        )
        VALUES
        (
        #{id},
        NOW(),
        NOW(),
        #{isDelete},
        #{loginId},
        #{nickName},
        #{password},
        #{region},
        #{userStatus},
        #{userType},
        #{userAttribute},
        #{modifiedUserId},
        #{createdUserId}
        )
        <selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER">
            SELECT LAST_INSERT_ID() AS id
        </selectKey>
    </insert>

对应接口:

    /**
     * 增加用户
     *
     * @param user
     */
    Long addUser(UserDO user);

调用:

   Long userId = userMapper.addUser(userDo);

<b> 原作者预期这个接口调用之后会返回一个long类型的id值,但事实是mapper接口返回值依然是成功插入的记录数,不同的是主键值已经赋值到领域模型实体的id中了,即参数user中的id值已经是新生成的id了。(selectKey操作会将操作查询结果赋值到insert元素的parameterType的入参实例下对应的属性中。并提供给insert语句使用)</b>
参见:http://www.jianshu.com/p/7721b115f716

正确的使用方法如下:
调用:

        userMapper.addUser(userDo);
        Long userId = userDo.getId();







<b>二、logback配置文件logback.xml</b>
打印指定包的日志至控制台:

    <logger name="com.wedoctor.health.card.cloud.user.biz.dal" level="DEBUG"/>
    <logger name="com.wedoctor.health.card.cloud.user.biz.dal.domain" level="ERROR"/>
    <logger name="com.wedoctor.health.card.cloud.user.biz.dal.ultralog" level="ERROR"/>
    <logger name="com.wedoctor.health.card.cloud.user.biz.dal.msg" level="ERROR"/>

通过设定不同的日志等级,实现了打印某个包下的日志,并过滤掉不需要的一部分。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容