在Spring Boot 中 使用MyBatis和Plus的一些常用操作

废话

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值