1、insert写成select
在通常的情况下,此写法是可以正常运行的。不过在有一些公司自定义的MyBatis时(像我们公司为了支持分库分表)开发了一套自定义的mybatis组件,这个组件如果select标签里面写insert时就会报错。
所以大家标签和语句还是需要对应的好,否则有可能会出现不可预知的错误。
2、select中的resultMap属性不正确
一些Eclipse或idea有根据Mapper接口自动生成xml的功能,比如作者之前安装的一个插件就会把所有的mapper中的方法生成<select>的标签的的属性是resultType而不是resultMap,这样user_id属性的值就不能得到正确的映射了。
正确的方法是使用resultMap或者select语句中有_的字段都增加AS
3、#和$混用的问题
看官方文档如何描述的http://www.mybatis.org/mybatis-3/sqlmap-xml.html#select
可以看到官方的问题写的很清楚,使用#,MyBatis会使用PreparedStatement来进行SQL查询,可以防止SQL注入。而$更多的是用来访问配置文件中的属性的。所以大家在自己的SQL中还是应该经量使用#。
4、在使用resultMap的时候,要把ID写在第一行,否则的话,就会报错。
5、时间戳的使用
很多表一般会给一个create_time和update_time两个字段。很多小伙伴一般在Java中去手动设置两个字段的值。其实更好的办法是使用数据自带的时间戳函数
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(255) DEFAULT NULL COMMENT '姓名',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6、可以不用if choose等语句就经量少用
有一些开发,很多代码都是从别人的Mapper文件copy过来的,很多情况下也思考为什么。比如<if> <choose>这些条件语句的使用,如果你的参数是必传的话,那么就不要写<if>,这样可以减少不必要的运算和使代码清晰。比如你们公司的DBA看见这样的语句,知道你的索引使用的对吗?
比如此例中的userId如果已经是添加了索引,而且是必填的,那么就不要写<if>啦,直接最后写user_id = #{userId}就可以了。
看到这里,说明你喜欢本文,你的转发,是对我最大的鼓励!关注亦是支持↓
留言与评论(共有 0 条评论) |