java 开发笔记(2)

文章目录

  • 写在前面
    • 1、字段与字符串
      • 1.1、判断对象是否为空
      • 1.2、字段名转换 ( 驼峰命名转大写下划线命名)
      • 1.3、获取某个实体的字段列表
    • 2、sql 、 mybatis 、jdbc
      • 2.1、获取随机数据
      • 2.2、sqlSessionFactory 批量插入、更新
      • 2.3、mybatis xml中if与单字符判等

写在前面

记录在spring boot项目开发过程中,常用的工具方法

1、字段与字符串

1.1、判断对象是否为空

spring提供的,可判断字符串数组Optionallistsetmap

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>

你可能感兴趣的:(java系列,java,笔记,开发语言)