一套代码适配多数据库的实用办法

3周前发布 gsjqwyl
15 0 0

概要

一般在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的使用
// User.java (使用JPA注解的实体类)
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "username", nullable = false, unique = true)
    private String username;
    // ...
}

// DAO层 UserRepository.java (继承JpaRepository)
public interface UserRepository extends JpaRepository<User, Long> {
    // 可以自定义查询方法,例如:
    User findByUsername(String username);
}

// UserService.java (使用Spring Data JPA的Service层)
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public User getUserByUsername(String username) {
        return userRepository.findByUsername(username);
    }
}
  • Mybatis – plus的使用
// User.java (实体类)
@Data
@TableName("users")
public class User {
    private Long id;
    private String username;
    // ...
}

// DAO层 UserMapper.java (继承BaseMapper)
public interface UserMapper extends BaseMapper<User> {
    // 可以自定义方法,如果需要的话
}

// UserService.java (使用MyBatis-plus的Service层)
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User getUserById(Long id) {
        return userMapper.selectById(id);
    }
}

小结

JPA更适用于事务性系统,MyBatisPlus更适用于分析型系统。

附:

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

© 版权声明

相关文章

暂无评论

暂无评论...