个人日常总结

日常总结

1、使用MyBatisPlus时遇到的问题及解决方法

当使用MyBatisPlus的时候实体类主键使用@TableID,所有字段使用驼峰命名,如果按照使用下划线与数据库中表的字段一致的时候会导致主键索引失效,这时候使用selectById和selectOne进行查询的时候结果为null,修改驼峰命名即可。

2、使用@JasksonXmlProperty注解

此注解使用在字段上面用于起别名,当使用别名的时候,字段名不能与别名一致,否则导致框架解析的时候形成大小写两层节点。使用此注解的同时,类上使用@JsonreProperties(true)注解,否则会序列化错误。配合使用

在标签中使用type的时候,使用注解@JasksonXmlProperty(localName=type ,isAttribute=true),这个标签会加到使用这个类的标签中。

例如:

3、报文双层标签处理的问题

报文是list的时候会默认出现两层,为了不要两层使用注解@JacksonXmlElementWrapper(useWrappeng=false)外层就会消失

注解的使用@XmlRootElement(“ENTITY”)=@JasksonXMlRootElement

4、实体类以字符串的形式去输出

这个问题是在拼接报文安全头的时候去改造的,示例如下

原始的toString方法
@Override
public String toString() {
    return "Person{" +
            "name='" + name + '\'' +
            ", sex='" + sex + '\'' +
            ", age='" + age + '\'' +
            ", occupation='" + occupation + '\'' +
            '}';
}

更改后

@Override
public String toString() {
    String geshi="/r/n";
    StringBuilder stringBuilder=new StringBuilder();
    stringBuilder.append("NAME");
    stringBuilder.append(this.name);
    stringBuilder.append(geshi);
    ......

5、Mybatisplus注解:@TableField

此注解加载实体类属性上即代表不与数据库字段匹配@TableField(exist=false)

1)  @TableField("user_name") 指定映射关系
实体类的属性名和数据库的字段名自动映射:
	 *  名称一样
	 *  数据库字段使用_分割,实体类属性名使用驼峰名称
   否则需要使用 @TableField("user_name") 指定映射关系
2)  忽略某个字段的查询和 插入
	  @TableField(exist = false) 
3)  设置id生成策略:AUTO 数据库自增
    @TableId(type = IdType.AUTO)

为什么在接收参数前加@requestBody因为数据从请求过来不是通过url传过来的而是通过页面数据传到的,所以要加此注解(异步请求参数的传递)

 QueryWrapper<User> wrapper = new QueryWrapper<>();
        //2.设置条件
        wrapper.eq("user_name","lisi")
      注: user_name是数据库中表的字段
        

6、事务超时问题

如过在一个for循环中需要插入大量的数据,使用myBatisplus的时候,避免事务超时需要在mybatisplus插入之前包裹一个方法,加注解@Transactional(propagation=Propagation.REQUIRED)

示例:

此方法在for循环中使用,解决事务超时的问题
@Transactional(propagation=Propagation.REQUIRED)
public int insertAll(User user){
  return UserMapper.insert(user)
}
这样之后每一条都是一个事务

版权声明:本文为weixin_55821046原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。