4.28

170 阅读2分钟

这两天做项目,用到了BeanUtils.copyProperties()这个方法,而在两个不同的类中使用到这个方法,但不知怎么的,就是有一个对象服务发copy另外个对象,最后排查终于找到原因。 因为两个类引入了两个不同的BeanUtils类,

一个为org.springframework.beans.BeanUtils,

另一个是org.apache.commons.beanutils.BeanUtils,

这两个类在不同的包下面,而这两个类的copyProperties()方法里面传递的参数赋值是相反的。

例如: a,b为对象 BeanUtils.copyProperties(a, b); BeanUtils是org.springframework.beans.BeanUtils, a拷贝到b BeanUtils是org.apache.commons.beanutils.BeanUtils,b拷贝到a 我一般用spring的

Mybatis Plus删除

@RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper;

/**
 * 根据id删除
 */
@Test
public void deleteById() {
    int rows = userInfoMapper.deleteById(123455);
    System.out.println("影响记录数:"+rows);
}

/**
 * 根据条件删除
 */
@Test
public void deleteBy() {
    Map<String,Object> coumnMap = new HashMap<>();
    coumnMap.put("username","肖娟");
    coumnMap.put("age",22);
    int rows = userInfoMapper.deleteByMap(coumnMap);
    System.out.println("影响记录数:"+rows);
}

/**
 * 批量删除
 */
@Test
public void deleteBatchIds() {
    int rows = userInfoMapper.deleteBatchIds(Arrays.asList(123,335,54656));
    System.out.println("影响记录数:"+rows);
}


/**
 * 根据条件删除,使用lambda
 */
@Test
public void deleteByWrapper() {
    LambdaUpdateWrapper<UserInfo> lambdaUpdateWrapper = Wrappers.<UserInfo> lambdaUpdate();
    lambdaUpdateWrapper.eq(UserInfo::getUsername,"肖姐").eq(UserInfo::getAge,30).set(UserInfo::getAge,11);
    int rows = userInfoMapper.delete(lambdaUpdateWrapper);
    System.out.println("影响记录数:"+rows);
}

}

Arrays.asList(ids.split(","));

MyBatis一次执行多条SQL语句

有个常见的场景:删除用户的时候需要先删除用户的外键关联数据,否则会触发规则报错。

解决办法不外乎有三个:1、多条sql分批执行;2、存储过程或函数调用;3、sql批量执行。

今天我要说的是MyBatis中如何一次执行多条语句(使用mysql数据库)。

1、修改数据库连接参数加上allowMultiQueries=true,如:

hikariConfig.security.jdbcUrl=jdbc:mysql://xx.xx.xx:3306/xxxxx?characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true

2、直接写多条语句,用“;”隔开即可

delete from sec_user_role where userId=#{id}; delete from sec_user where id=#{id};

js中字符串转数字的方法

1.当字符串中是纯数字

例如:var s = '234';

   /********** 字符串在运算操作中会被当做数字类型来处理 ***************/ 

   s *= 1;

   /******* string的两个转换函数,只对string有效 ********/

    parseInt(s); // 234

    parseFloat(s); //234

   /************ 强制类型转换 *********************/

    Number(s); // 234

2.当字符串是数字加字母等非数字

例如: var s = '234string';

   parseInt(s); //234

   parseFloat(s); //234.0