<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"/>
通过设定不同的日志等级,实现了打印某个包下的日志,并过滤掉不需要的一部分。