废话
CSDN今天这个导航条可真喜庆啊,
大红条, 还有中国风的这个底纹 很好看!
以前用JPA用的风生水起, 于是想到隔壁的这个MyBatis 的大家庭看看!
不对两个阵营的做任何太多评价 直接上代码
表
有人看了会问, 怎么还有 Entity 这个注解
我只是懒得建表.. 用到JPA自动建表 大家可以忽略 还有下面 的JPA注解 都是建表用的 只有@TableId 是今天的主角
最后面的属性link 是不会再数据库中出现的字段 JPA中 使用 @Transient MyBatisPlus中 使用TableFiled(exist=false)
这里例子中然而并没有逻辑删除
@Entity
public class SysUserToken implements Serializable {
private static final long serialVersionUID = -638877678952488002L;
/**编号 */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@TableId(type = IdType.AUTO)
private Long id;
/**用户ID */
private String userId;
/**生成的token */
private String token;
/**过期时间 */
@Temporal(TemporalType.TIMESTAMP)
private Date expireTime;
/**更新时间 */
@Temporal(TemporalType.TIMESTAMP)
private Date updateTime;
@TableField(exist = false)
@Transient
private String link;
//省略 get set 方法
}
查询
1.在这个MyBatis中 如果使用xml 如果你要是没有代码生成的东西!
写个中大型系统我估计会被累死吧, 来看看我想要的结果吧 , 就先来这个最古老的xml 方式
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.avicsafety.webapp.base.mapper.UserTokenMapper">
<resultMap id="userMap" type="com.avicsafety.webapp.base.entity.SysUserToken" >
<id property="id" column="id" javaType="java.lang.Long"></id>
<result property="userId" column="user_id" javaType="java.lang.String"/>
<result property="token" column="token" javaType="java.lang.String"/>
</resultMap>
<select id="findListByUserId" resultMap="userMap" parameterType="java.lang.String">
select * from sys_user_token where user_id=#{id}
</select>
</mapper>
public interface UserTokenMapper extends BaseMapper<SysUserToken> {
List<SysUserToken> findListByUserId(String uuid);
}
List<SysUserToken> list = userTokenMapper.findListByUserId("9fd8b5ad663718060f77136e65329f4f");
其中错一个地方 运行的时候都会报错, 所以大家放心使用
最后还要在配置中加上扫描路径
mybatis-plus.mapper-locations: classpath:mapper/base/*.xml
2.再来看看 annocation实现的查询
@Select("SELECT id,user_id FROM sys_user_token WHERE token = #{token}")
@Results({@Result(property = "link", column = "user_id")})
List<SysUserToken> findListByToken(@Param("token") String token);
List<SysUserToken> list = userTokenMapper.findListByToken("9fd8b5ad663718060f77136e65329f4f");
list.forEach(sysUserToken -> System.out.println(sysUserToken.getId()+"::"+sysUserToken.getLink()));
他只需要在接口的上方加个注解, 瞬间感觉有点像JPA了 有没有
不用再配置这个xml 感觉舒服了点
然后再上边的基础上 来个分页查询
@Select("SELECT * FROM sys_user_token WHERE token = #{token} and user_id = #{user_id}")
List<SysUserToken> findPageByUserIdAndToken(Page<SysUserToken> page, @Param("token") String token, @Param("user_id") String user_id);
Page<SysUserToken> page = new Page<SysUserToken>(1,20);
List<SysUserToken> list = userTokenMapper.findPageByUserIdAndToken(page,"9fd8b5ad663718060f77136e65329f4f","9fd8b5ad663718060f77136e65329f4f");
list.forEach(sysUserToken -> System.out.println(sysUserToken.getId()+"::"+sysUserToken.getLink()));
不要忘记要加上MP的配置
/**
* 分页插件配置
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
3.最后看看MyBatisPlus推荐的实现方法, 这个Mp 心思细腻啊
QueryWrapper<SysUserToken> queryWrapper= new QueryWrapper<SysUserToken>().eq("user_id", "9fd8b5ad663718060f77136e65329f4f").eq("token", "9fd8b5ad663718060f77136e65329f4f");
userTokenMapper.selectObjs(queryWrapper);
其中的 QueryWrapper 是一个很强大的条件查询构造装置 有N多种方法 可以使用
使用很方便, 但是没有注解方式灵活啊! 但是已经能满足 60%以上的场景不用谢SQL了 忍者贱人 智者兼职 吧
和Page配置 翻页也是超级简单 和 JPA的Pageable 对象很相识 推荐
QueryWrapper<SysUserToken> queryWrapper= new QueryWrapper<SysUserToken>().eq("user_id", "9fd8b5ad663718060f77136e65329f4f").eq("token", "9fd8b5ad663718060f77136e65329f4f");
Page<SysUserToken> page = new Page<SysUserToken>(1,20);
IPage<SysUserToken> list = userTokenMapper.selectPage(page, queryWrapper);
list.getRecords().forEach(System.out::println);
逻辑删除配置
mybatis-plus.global-config..db-config.sql-injector=com.baomidou.mybatisplus.mapper.LogicSqlInjector
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
/**
* 逻辑删除配置
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
在实体中直接加上注解, 所有的方法都是逻辑删除了, 真逆天啊 当时我搞JPA的逻辑删除 确实改了许多东西
@TableLogic
private Boolean del = false;
显示SQL语句的配置
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl