前言
MyBatis常用标签及标签使用技巧
MyBatis的常用标签有很多,比如
1、统一的增删改
通过我暂时的开发经验来说,我认为对一张表增删改操作,起码包括:增加一条记录、删除一条记录、修改一条记录。所以一张表的操作起码包括:增删改。
增加一条是主键id自增,删除一条记录是根据主键id删除,修改一条记录是根据主键id修改,返回值都是Integer类型的成功增删改的记录条数。以User对象为例:
UserMapper.java:
@Mapper @Repository public interface UserMapper { /** * 增加一条记录 * @param user 用户对象 * @return 增加成功的记录数 */ Integer insertOne(User user); /** * 删除一条记录 * @param user 用户对象 * @return 删除成功的记录数 */ Integer deleteOne(User user); /** * 修改用户 * @param user 用户对象 * @return 修改成功的记录数 */ Integer updateOne(User user); }
则对应的UserMapper.xml:
uuid = #{uuid}, username = #{username}, password = #{password}, INSERT INTO user (uuid,username,password) VALUES (#{uuid},#{username},#{password}) DELETE FROM user WHERE id = #{id} UPDATE user WHERE id = #{id}
由于一般修改语句是根据id,所以在
2、统一的查询
通过我暂时的开发经验来说,我认为对一张表查询操作,起码包括:查询多条记录(可分页可条件)、查询一条记录(可条件),查询该表的总记录数。所以一张表的操作起码包括:三个查询。
查询列表、单个查询、查询该表的总记录数,同样是以User对象为例:
UserMapper.java:
@Mapper @Repository public interface UserMapper { /** * 查询所有user集合(可分页,可多条件,可单条件) * @param user 用户对象 * @return user集合 */ ListselectList(User user); /** * 查询一条user记录(可多条件,可单条件) * @param user * @return 一条用户对象 */ User selectOne(User user); /** * 查询记录数(可条件查询) * @param user 用户对象 * @return 记录数 */ Long count(User user); }
分别返回User集合、单个User对象以及记录数。
对应的UserMapper.xml:
AND u.id = #{id} AND u.uuid = #{uuid} AND u.username = #{username} AND u.password = #{password} #{offset},#{rows} u.id AS uId, u.uuid AS uUuid, u.username AS uUsername, u.password AS uPassword
根据三个需求:查询全表、查询单个两个都可以用到条件查询,所以都可以用到同样的sql,所以就可以使用同样的
- 查询全表:查询字段、可全条件、可分页
- 查询单个:查询字段、可全条件
- 查询记录数:可全条件
得益于
条件查询的
分页的
注意
SQL语句中各关键字的顺序
3、统一的增删改查
最后将增删改和查询总结合并起来就是:
UserMapper.java:
@Mapper @Repository public interface UserMapper { /** * 增加一条记录 * @param user 用户对象 * @return 增加成功的记录数 */ Integer insertOne(User user); /** * 删除一条记录 * @param user 用户对象 * @return 删除成功的记录数 */ Integer deleteOne(User user); /** * 修改用户 * @param user 用户对象 * @return 修改成功的记录数 */ Integer updateOne(User user); /** * 查询所有user集合(可分页,可多条件,可单条件) * @param user 用户对象 * @return user集合 */ ListselectList(User user); /** * 查询一条user记录(可多条件,可单条件) * @param user * @return 一条用户对象 */ User selectOne(User user); /** * 查询记录数(可条件查询) * @param user 用户对象 * @return 记录数 */ Long count(User user); }
UserMapper.xml:
AND u.id = #{id} AND u.uuid = #{uuid} AND u.username = #{username} AND u.password = #{password} uuid = #{uuid}, username = #{username}, password = #{password}, #{offset},#{rows} u.id AS uId, u.uuid AS uUuid, u.username AS uUsername, u.password AS uPassword INSERT INTO user (uuid,username,password) VALUES (#{uuid},#{username},#{password}) DELETE FROM user WHERE id = #{id} UPDATE user WHERE id = #{id}
对一张表的操作最起码就应该包括以上:增加一条记录、删除一条记录、修改一条记录、查询列表(可条件、可分页)、查询一条(可条件)、查询记录数(可条件)。
4、利用IDEA的Code Templates自动生成
总结后观察到,每张表都有这6个操作,并且代码基本上都大致相同,差别只是对象的名字和表中字段不一样,那我每次创建Mapper文件都需要手敲吗?NoNoNo,可以利用IDEA的Code Templates功能,预先定义好Mapper Java和Mapper Xml的大致结构,然后利用传参传入对象名就可以了,这样每次就能自动生成大量代码,然后只需要修改极少部分代码就可以了。
Code Templates文件的创建:
打开IDEA,左上角依次点击:File->搜索template->找到File and Code Templates,在右侧创建新文件,输入文件名,扩展名Java:
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "") package ${PACKAGE_NAME};#end import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; import java.util.List; #parse("File Header.java") @Mapper @Repository public interface ${NAME} { /** * 增加一条记录 * @param ${pojo} ${name}对象 * @return 增加成功的记录数 */ Integer insertOne(${Pojo} ${pojo}); /** * 删除一条记录 * @param ${pojo} ${name}对象 * @return 删除成功的记录数 */ Integer deleteOne(${Pojo} ${pojo}); /** * 修改一条记录 * @param ${pojo} ${name}对象 * @return 修改成功的记录数 */ Integer updateOne(${Pojo} ${pojo}); /** * 查询所有集合(可分页,可多条件,可单条件) * @param ${pojo} ${name}对象 * @return ${pojo}集合 */ List<${Pojo}> selectList(${Pojo} ${pojo}); /** * 查询一条${pojo}记录(可多条件,可单条件) * @param ${pojo} ${name}对象 * @return 一条${name}对象 */ ${Pojo} selectOne(${Pojo} ${pojo}); /** * 查询记录数(可条件查询) * @param ${pojo} ${name}对象 * @return 记录数 */ Long count(${Pojo} ${pojo}); }
${Pojo}:Pojo对象的类名
${pojo}:Pojo对象的变量名
这样下次在新建Mapper.java文件的时候直接利用该template创建就可以了。
同样的,Mapper.xml:
AND arg = #{arg} arg = #{arg}, #{offset},#{rows} INSERT INTO ${TABLE_NAME} () VALUES () DELETE FROM ${TABLE_NAME} WHERE id = #{id} UPDATE ${TABLE_NAME} WHERE id = #{id}
${PRE}:包的前缀
${Pojo}:对象的类名
${TABLE_NAME}:表名
即可以非常快速地生成Mapper.java和Mapper.xml了
5、连接关系表
因为Mybatis的特性,它可以连表查询。同样的,我们利用上述的方法创建好RoleMapper,如果想要在UserMapper中使用RoleMapper中定义好的sql,那么直接使用
那么,这样就实现了user表和role的联合查询,并且roleMapper.xml中的
总结
到此这篇关于MyBatis常用标签以及使用技巧总结的文章就介绍到这了,更多相关MyBatis常用标签使用技巧内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!