文章目录
写在前面
记录在spring boot项目开发过程中,常用的工具方法
1、字段与字符串
1.1、判断对象是否为空
spring提供的,可判断字符串、数组、Optional、list、set、map
import org.springframework.util.ObjectUtils;
if(ObjectUtils.isEmpty(obj)){
...
}
1.2、字段名转换 ( 驼峰命名转大写下划线命名)
userName ⇒ USER_NAME
public static String camelToHyphen(String name) {
return name.replaceAll("([a-z\\d])([A-Z]+)", "$1_$2").toUpperCase();
}
1.3、获取某个实体的字段列表
public static <T> List<String> parseFields(T t) {
List<String> fieldsResult = new ArrayList<>();
Class<?> aClass = t.getClass();
Field[] fields = aClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName();
fieldsResult.add(name);
}
return fieldsResult;
}
2、sql 、 mybatis 、jdbc
2.1、获取随机数据
利用sql随机取5条数据
select * from tableName order by RAND() LIMIT 5
利用java代码取随机n条
public static <T> List<T> randomList(List<T> list, int n) {
Collections.shuffle(list); // 打乱list的顺序
return list.subList(0, n); // 取 0 - n 条
}
2.2、sqlSessionFactory 批量插入、更新
@Component
public class MybatisBatchUtils {
/**
* 每次处理1000条
*/
private static final int BATCH_SIZE = 2000;
@Resource
private SqlSessionFactory sqlSessionFactory;
/**
* 批量处理修改或者插入
*
* @param data 需要被处理的数据
* @param mapperClass Mybatis的Mapper类
* @param function 自定义处理逻辑
* @return int 影响的总行数
*/
public <T,U,R> int saveBatch(List<T> data, Class<U> mapperClass, BiFunction<T,U,R> function) {
int i = 1;
SqlSession batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
try {
U mapper = batchSqlSession.getMapper(mapperClass);
int size = data.size();
for (T element : data) {
function.apply(element,mapper);
if ((i % BATCH_SIZE == 0) || i == size) {
batchSqlSession.flushStatements();
}
i++;
}
// 非事务环境下强制commit,事务情况下该commit相当于无效
batchSqlSession.commit(!TransactionSynchronizationManager.isSynchronizationActive());
} catch (Exception e) {
batchSqlSession.rollback();
e.printStackTrace();
throw new BusinessException(TIPS.code, "保存异常!");
} finally {
batchSqlSession.close();
}
return i - 1;
}
}
----------------------------------------
// 使用示例
int i = saveBatch(userList, UserMapper.class, (one, userMapper) -> userMapper.insert(one));
// UserMapper.insert 的 sql 示例
insert into USER (ID,NAME) values (#{id},#{name})
2.3、mybatis xml中if与单字符判等
<select id="getUser">
select * from USER
<where>
<if test="age == '5'.toString()">
age = '5'
</if>
</where>
</select>