Java+MyBatis的后端学习

115 阅读3分钟

基于Java+MyBatis的后端学习实践

近期在学习Java后端开发时,我完成了一个小型项目,涉及用户管理、品牌信息CRUD以及验证码生成功能。以下是项目的核心实现与学习收获,记录在此供参考。


一、项目结构

项目采用分层架构,主要模块如下:

  • POJO层:实体类(BrandUser)封装数据库表字段。
  • Mapper层:数据访问接口(BrandMapperUserMapper),通过MyBatis注解实现SQL操作。
  • Service层:业务逻辑处理(UserService),调用Mapper完成功能。
  • 工具类CheckCodeUtil生成图形验证码,增强安全性。

二、核心功能实现

  1. 品牌管理(CRUD)

    • 查询所有品牌BrandMapper中通过@Select("select * from tb_brand")实现。
    • 增删改操作:使用@Insert@Delete@Update注解完成,参数通过Brand对象传递。
    • 注解结果映射@ResultMap("brandResultMap")解决数据库字段与实体类属性名不一致问题。
  2. 用户管理

    • 注册与登录
      • 注册时调用UserMapper.add插入用户名和密码。
      • 登录时通过UserMapper.selectList验证用户名和密码匹配性。
    • 用户名查重UserService.selectByUsername防止重复注册。
  3. 验证码生成

    • 使用CheckCodeUtil生成包含随机字符(数字+大写字母)的图片,添加干扰线、噪点和扭曲效果。
    • 核心方法outputVerifyImage返回验证码字符串,并将图片写入输出流(可用于Web响应)。

三、技术亮点

  1. MyBatis注解开发

    • 摒弃XML配置,直接在接口方法上使用@Select@Insert等注解,简化数据库交互。
    • 示例:BrandMapper中通过注解实现SQL映射,代码更简洁。
  2. 分层架构设计

    • Mapper层专注数据操作,Service层处理业务逻辑,代码职责清晰。
    • 例如:UserService中封装了用户登录的完整流程,包括会话管理(SqlSession的开启与关闭)。
  3. 验证码安全性

    • 随机字符+图形扭曲+干扰线设计,有效抵御机器暴力破解。
    • 工具类可灵活调整验证码长度和样式,复用性强。

四、遇到的问题与解决

  1. MyBatis字段映射问题

    • 问题:数据库字段名(如brand_name)与实体类属性名(brandName)不一致导致查询结果为空。
    • 解决:在BrandMapper中使用@ResultMap定义映射关系,或在SQL语句中通过AS重命名字段。
  2. 验证码图片扭曲异常

    • 问题:初始生成的验证码文字过于规整,容易被识别。
    • 优化:在CheckCodeUtil中引入AffineTransform实现字符旋转,增加随机性。
  3. SqlSession管理

    • 踩坑:未及时关闭SqlSession导致数据库连接泄漏。
    • 改进:在UserService中严格使用try-with-resourcesfinally块确保资源释放。

五、未来优化方向

  1. 引入Spring框架

    • 用Spring管理Bean(如SqlSessionFactory)和事务,替代手动管理依赖。
  2. 密码加密存储

    • 当前密码明文存储,存在安全风险。计划使用BCrypt或MD5加密。
  3. 扩展登录功能

    • 添加Session或JWT支持,实现用户状态保持。
  4. 前端页面联调

    • 目前仅有后端接口,后续可结合Thymeleaf或Vue实现完整前后端交互。

六、学习心得

通过本项目,我掌握了以下技能:

  • MyBatis注解开发的核心用法。
  • 分层架构的设计思想与实现。
  • 验证码生成工具的设计与安全性考量。
  • 数据库连接和资源管理的最佳实践。

过程中深刻体会到:代码结构清晰异常处理完善是后端开发的关键。下一步计划学习Spring Boot,进一步简化项目配置,提升开发效率。


源码地址:[github/yq12345678900/-.com]

希望通过这篇博客记录我的学习历程,也欢迎大家一起交流探讨!