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

boyanx2周前技术教程5

概要

通常在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);

荣培数据基础运行平台: 荣培数据基础运行平台是一个快速开发平台,也是二次开发模块集成入荣培数据企业版的开发框架。该开源项目作为企业级快速开发解决方案,后端基于经典三层架构SSH(Spring、SpringMVC、Hibernate)等,前端采用LayUI、jQuery、原生js等,这套组合,虽不是最新的技术栈,也不是前后分离,核心框架用的版本均是jdk1.8内最新版本,其稳定性高,分层设计:使用分层设计,

标签: jquery select

相关文章

jQuery事件绑定的最佳实践

如果你经常使用jQuery,那么你也许很熟悉事件绑定。这是很基本的东西,但是深入一点,你就能够找到机会让你事件驱动的代码变得不太零碎,并且更容易管理。更好的选择器策略让我们从基础的例子开始。下面的HT...

Layui 框架实战:动态加载 Select 与二级联动全解析

在现代 Web 开发中,下拉选择框(Select)是用户输入数据时不可或缺的组件。很多时候,我们需要的选项并非静态写死在 HTML 中,而是需要根据业务逻辑从后端动态获取。更有甚者,我们可能需要实现“...

Spring Boot集成jsoup实现html解析

1.什么是jsoupjsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuer...

基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构(附源码)

前言zheng项目不仅仅是一个开发架构,而是努力打造一套从 前端模板 - 基础框架 - 分布式架构 - 开源项目 - 持续集成 - 自动化部署 - 系统监测 - 无缝升级 的全方位J2EE企业级开发解...

全栈工程师的成长之路:从菜鸟到大神的蜕变之旅

前言:全栈工程师——IT界的“瑞士军刀” 在编程江湖里,全栈工程师就像武侠小说里的“全能高手”——既能舞刀(前端),又能弄剑(后端),还能玩暗器(数据库),甚至偶尔客串一下炼金术士(DevOps)。...

HTML5入门

什么是HTML5官方概念:HTML5草案的前身名为Web Applications 1.0,是作为下一代互联网标准,用于取代html4与xhtml1 的新一代标准版本,所以叫html5。它增加了新的标...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。