博客
关于我
mysql 批量插入
阅读量:794 次
发布时间:2023-02-10

本文共 1889 字,大约阅读时间需要 6 分钟。

@Servicepublic class UserService extends ServiceImpl implements IUserService {    private static final Logger logger = LoggerFactory.getLogger(UserService.class);    @Autowired    private UserMapper userMapper;    @Autowired    private SqlSessionFactory sqlSessionFactory;    @Transactional(rollbackFor = Exception.class)    public void addUserOneByOne(List
users) { SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH); UserMapper um = session.getMapper(UserMapper.class); long startTime = System.currentTimeMillis(); for (User user : users) { um.addUserOneByOne(user); } session.commit(); long endTime = System.currentTimeMillis(); logger.info("批量插入用户 SQL 操作耗时 {} ms", endTime - startTime); }}

上述代码片段展示了一个基于Spring框架和MyBatis的用户服务类,主要负责批量添加用户到数据库。以下是对该代码的详细解读和优化说明:

  • 类注解与继承关系

    UserService标注了@Service,表明这是一个服务类,通常用于业务逻辑处理。该类继承自ServiceImpl,是Spring框架中常见的继承模式,简化了代码结构。同时,该类实现了IUserService接口,定义了用户业务的核心操作接口。

  • 日志记录

    类中定义了一个静态的日志记录器logger,使用了Logback框架作为日志工具,用于记录应用程序运行期间的日志信息。在批量添加用户后,会记录操作耗时,以便进行性能监控和分析。

  • 依赖注入

    通过@Autowired注解,类注入了UserMapperSqlSessionFactory两个依赖。UserMapper是MyBatis框架中与数据库交互的映射接口,负责转换数据对象和SQL命令。SqlSessionFactory是MyBatis的核心配置类,用于创建数据库会话和执行SQL命令。

  • 事务管理

    使用@Transactional注解启用事务管理,确保数据库操作在提交前进行回滚(默认回滚方式为rollbackFor = Exception.class)。在批量添加用户的方法中,通过SqlSession管理数据库事务,保证数据一致性。

  • 批量用户添加逻辑

    方法addUserOneByOne接收一个List<User>参数,表示需要批量添加的用户数据。通过SqlSession获取UserMapper实例,调用其addUserOneByOne方法进行批量插入操作。由于使用了ExecutorType.BATCH,可以显著提升数据库写操作的性能。

  • 性能监控

    在批量添加用户操作前后,记录开始和结束时间,计算耗时,并通过日志记录器输出耗时信息。这种做法有助于监控和优化数据库性能,确保高效运行。

  • 异常处理

    由于@Transactional注解默认的回滚方式为rollbackFor = Exception.class,该类未显式声明需要回滚的异常类型,默认情况下所有异常都会触发回滚,确保数据一致性。

  • 扩展性

    类设计较为简洁,通过接口IUserService定义了扩展的契约,方便以后扩展和维护。同时,使用MyBatis框架,简化了数据库交互代码,提高了代码的可读性和维护性。

  • 总结来看,该代码片段是一个典型的Spring-MyBatis框架下实现的用户服务类,具有良好的可读性和可维护性,适合用于批量添加用户的场景,能够有效地进行数据库操作并进行性能监控和异常处理。

    转载地址:http://mubfk.baihongyu.com/

    你可能感兴趣的文章
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询数据库所有表的字段信息
    查看>>
    【Java基础】什么是面向对象?
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 添加列,修改列,删除列
    查看>>
    mysql 添加索引
    查看>>
    MySQL 添加索引,删除索引及其用法
    查看>>
    mysql 状态检查,备份,修复
    查看>>
    MySQL 用 limit 为什么会影响性能?
    查看>>
    MySQL 用 limit 为什么会影响性能?有什么优化方案?
    查看>>
    MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
    查看>>
    mysql 用户管理和权限设置
    查看>>