找回密码
 立即注册
首页 业界区 业界 同一套代码适配多种数据库解决方案

同一套代码适配多种数据库解决方案

何书艺 前天 20:33
概要

通常在Java Web开发初期,技术选型搭框架时,往往都针对选定好的一个库类型进行开发,比如oracle、sqlserver、mysql等,传统的mybatis都有固化的sql,如果要换个库,不同库类型的语法不同,就要重新适配修改sql,因此,持久层框架可以选用Hibernate,结合spring-data-jpa,或Mybatis-plus,方便了CRUD的操作,无需配置xml写sql,在DAO层继承类,实现操作方法。当然,对于复杂的子查询再关联,也都有相应处理方法,也都可以写原生sql。
整体架构流程

spring+springMVC+hibernate+spring-data-jpa
开源的基础数据平台就是这个结构
或springboot+hibernate+spring-data-jpa
或springboot+mybatis-plus
开源的Jeecg就是这个结构
技术名词解释


  • spring-data-jpa
是Spring提供的一个用于简化数据访问层的框架。它是基于JPA规范实现的,并在Hibernate之上提供了更高层次的抽象,使得开发者可以更加方便地进行数据库操作。

  • Mybatis-plus
简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。它继承了MyBatis的所有特性并拥有MyBatis的所有解决方案。
技术细节


  • spring-data-jpa使用
  1. // User.java (使用JPA注解的实体类)
  2. @Entity
  3. @Table(name = "users")
  4. public class User {
  5.     @Id
  6.     @GeneratedValue(strategy = GenerationType.IDENTITY)
  7.     private Long id;
  8.     @Column(name = "username", nullable = false, unique = true)
  9.     private String username;
  10.     // ...
  11. }
  12. // DAO层 UserRepository.java (继承JpaRepository)
  13. public interface UserRepository extends JpaRepository<User, Long> {
  14.     // 可以自定义查询方法,例如:
  15.     User findByUsername(String username);
  16. }
  17. // UserService.java (使用Spring Data JPA的Service层)
  18. @Service
  19. public class UserService {
  20.     @Autowired
  21.     private UserRepository userRepository;
  22.     public User getUserById(Long id) {
  23.         return userRepository.findById(id).orElse(null);
  24.     }
  25.     public User getUserByUsername(String username) {
  26.         return userRepository.findByUsername(username);
  27.     }
  28. }
复制代码

  • Mybatis-plus使用
  1. // User.java (实体类)
  2. @Data
  3. @TableName("users")
  4. public class User {
  5.     private Long id;
  6.     private String username;
  7.     // ...
  8. }
  9. // DAO层 UserMapper.java (继承BaseMapper)
  10. public interface UserMapper extends BaseMapper<User> {
  11.     // 可以自定义方法,如果需要的话
  12. }
  13. // UserService.java (使用MyBatis-plus的Service层)
  14. @Service
  15. public class UserService {
  16.     @Autowired
  17.     private UserMapper userMapper;
  18.     public User getUserById(Long id) {
  19.         return userMapper.selectById(id);
  20.     }
  21. }
复制代码
小结

JPA更适合事务性系统,MyBatisPlus更适合做分析型系统。
附:

JPA支持接口规范方法名查询,一般查询方法以 find、findBy、read、readBy、get、getBy为前缀,JPA在进行方法解析的时候会把前缀取掉,然后对剩下部分进行解析。
各实体的属性均可拼接作为方法名,比如实体有code,name 两个属性,查询的方法就是
findByCodeAndName(code,name)

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册