首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用没有Spring、Hibernate的纯Java创建自己的Crud Repo

在不使用Spring、Hibernate等框架的情况下,可以使用纯Java来创建一个简单的CRUD(创建、读取、更新、删除)仓库。以下是一个基本的实现示例,包括实体类、数据访问对象(DAO)和简单的数据库连接。

1. 实体类

首先,定义一个简单的实体类,例如User

代码语言:txt
复制
public class User {
    private int id;
    private String name;
    private String email;

    // 构造函数、getter和setter方法
    public User(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    // Getters and Setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}

2. DAO接口

定义一个DAO接口,包含基本的CRUD操作。

代码语言:txt
复制
import java.util.List;

public interface UserDao {
    void createUser(User user);
    User getUserById(int id);
    List<User> getAllUsers();
    void updateUser(User user);
    void deleteUser(int id);
}

3. DAO实现类

实现上述接口,使用JDBC进行数据库操作。

代码语言:txt
复制
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class UserDaoImpl implements UserDao {
    private Connection getConnection() throws SQLException {
        // 这里应该使用连接池,为了简单起见直接使用DriverManager
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
    }

    @Override
    public void createUser(User user) {
        String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
        try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) {
            stmt.setString(1, user.getName());
            stmt.setString(2, user.getEmail());
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public User getUserById(int id) {
        String sql = "SELECT * FROM users WHERE id = ?";
        try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) {
            stmt.setInt(1, id);
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
                return new User(rs.getInt("id"), rs.getString("name"), rs.getString("email"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public List<User> getAllUsers() {
        List<User> users = new ArrayList<>();
        String sql = "SELECT * FROM users";
        try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) {
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                users.add(new User(rs.getInt("id"), rs.getString("name"), rs.getString("email")));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return users;
    }

    @Override
    public void updateUser(User user) {
        String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
        try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) {
            stmt.setString(1, user.getName());
            stmt.setString(2, user.getEmail());
            stmt.setInt(3, user.getId());
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void deleteUser(int id) {
        String sql = "DELETE FROM users WHERE id = ?";
        try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) {
            stmt.setInt(1, id);
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

4. 应用场景

这种纯Java实现的CRUD仓库适用于小型项目或者学习目的,特别是在不需要复杂事务管理和高级ORM功能的情况下。它也可以用于嵌入式系统或者对性能有极端要求的场景。

5. 可能遇到的问题及解决方法

  • 数据库连接问题:确保数据库服务器正在运行,并且URL、用户名和密码正确。
  • SQL注入:使用PreparedStatement可以有效防止SQL注入。
  • 性能问题:对于高并发场景,考虑使用连接池如HikariCP来管理数据库连接。

6. 优势

  • 简单易懂:代码直接反映了数据库操作,便于理解和维护。
  • 灵活性:可以根据具体需求定制SQL语句和业务逻辑。

7. 类型

  • 简单CRUD操作:适用于基本的增删改查功能。
  • 事务管理:需要手动编写事务控制代码。

通过这种方式,即使不依赖外部框架,也可以实现基本的数据库操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring:没有人比我更懂Java对象的创建!

如果我们设置了Aop的功能,他会帮我们自动的代理,实现切面功能! 我们从平常的使用中,至少可以得知以上的三点,如果让你自己去实现,必会如何实现呢?...首先他既然能够帮我们自己创建对象,那么他肯定是通过反射来创建的,通过反射来创建,就必定绕不过去要使用Class对象创建,那么我们如何获取Class对象呢?...三、Spring的生命周期流程 Spring作者希望,Spring在着手管理一个Bean的时候,它希望能够让Spring的使用者能够插手,Spring把一个类对象变成一个Java Object的每一步,...,你想挂一些壁画在墙上,但是图纸上却没有!...那么你自己创建对象可能某些使用用起来很麻烦,所以我们交给了Spring容器! 装修公司:代表着Spring容器! 图纸:代表预设步骤,Spring原本就存在的步骤! 工人:Spring提供的各种接口!

96120

Java知多少(53)使用Java创建自己的异常子类

尽管Java的内置异常处理大多数常见错误,你也许希望建立你自己的异常类型来处理你所应用的特殊情况。...这是非常简单的:只要定义Exception的一个子类就可以了(Exception当然是Throwable的一个子类)。你的子类不需要实际执行什么——它们在类型系统中的存在允许你把它们当成异常使用。...Exception类自己没有定义任何方法。当然,它继承了Throwable提供的一些方法。因此,所有异常,包括你创建的,都可以获得Throwable定义的方法。这些方法显示在表10-3中。...你还可以在你创建的异常类中覆盖一个或多个这样的方法。 方法 描述 Throwable fillInStackTrace( ) 返回一个包含完整堆栈轨迹的Throwable对象,该对象可能被再次引发。...下面是结果: Called compute(1) Normal exit Called compute(20) Caught MyException[20] 系列文章: Java知多少(上) Java

32020
  • 如何使用 Java 的 Spring Boot 创建一个 RESTful API?

    大家好,我是 V 哥,使用 Java 的 Spring Boot 创建 RESTful API 可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤其适合现代软件开发的需求,帮助你快速构建出高性能的后端服务...以下是使用 Java 的 Spring Boot 创建一个 RESTful API 的步骤:一、创建 Spring Boot 项目打开 IDE(如 IntelliJ IDEA 或 Eclipse)。...选择创建一个新的 Spring Boot 项目。在项目创建向导中,选择 Spring Web 依赖。这将包含创建 RESTful API 所需的基本依赖,如 Spring MVC 等。...二、创建控制器类(Controller Class)在 src/main/java 目录下创建一个新的 Java 类,例如 UserController.java。...通过上述步骤,你可以熟悉 Java 的 Spring Boot 创建一个基本的 RESTful API,你学肥了吗,关注威哥爱编程,全栈开发你就行。

    13320

    如何使用TerraGuard创建你自己的虚拟专用网络

    关于TerraGuard TerraGuard的主要目的是帮助广大研究人员轻松创建属于自己的虚拟专用网络,该工具基于WireGuard实现其功能。...选择我们自己的云服务提供商,AWS、DigialOcean或GCP之类的,然后打开项目目录。 我们可以在variable.tf中修改区域或键名称。...Terraform配置: terraform init sudo terraform plan sudo terraform apply 如果你使用的是DigitalOcean的话,你还需要在variable.tf...如果使用的是GCP,你则需要在variable.tf中声明你的project_id令牌: sudo terraform plan -var "project_id=value" sudo terraform...测试虚拟专用网络的连通性: curl ipinfo.io/ip 移动端客户端 如果你想要使用移动端客户端,你则需要修改variable.tf中的mobile变量值: sudo terraform

    2K10

    一次springboot和redis缓存的实践

    幸运的是,Spring Boot 透明地提供了缓存,这要归功于 Spring Boot 缓存抽象,这是一种允许一致使用各种缓存方法而对代码影响最小的机制。让我们看看开始处理它应该知道的一切。...首先,我们将介绍缓存的概念。然后,我们将研究最常见的 Spring Boot 缓存相关注解,了解最重要的注解是什么,在哪里以及如何使用它们。...如何在 Spring Boot 应用程序中实现 Redis 缓存? 为了使用 Spring Boot 实现 Redis 缓存,我们需要创建一个小型应用程序,该应用程序将具有 CRUD 操作。...我们将使用 REST 创建一个 CRUD 应用程序。在这里,假设我们的实体类是 Invoice.java。为了创建一个完整的 REST 应用程序,我们将根据行业最佳实践拥有控制器、服务和存储库层。...=**** spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto

    48550

    JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?给你个选择SpringDataJPA的理由!

    再往深入想一下: JAVA里面写的一段DB操作逻辑,是如何一步步被传递到DB中执行了的呢? 为什么JAVA里面可以去对接不同产商的DB产品?...,主要用于减少为各种持久层存储实现数据访问层所需的代码量),其底层使用的依旧是常规ORM框架(Hibernate)。...至此,到底如何在JPA与MyBatis之间抉择,就比较清晰了: 如果你的系统中对DB的操作没有太多额外的深度定制、对DB的执行性能也不是极度敏感、不需要基于SQL语句做一些深度的优化,大部分场景都是一些基础...CRUD操作,则无疑Spring Data JPA是比较理想的选择,它将大大降低开发人员在DB操作层面的投入精力。...通过本篇内容,对JAVA体系中DB操作相关的组件、规范等有了一定初步的了解,也大致了解了应该如何选择是使用JPA还是MyBatis选型。

    1.5K40

    springData Jpa 快速入门前言:一、简介:二、JPA核心概念:三、springboot集成jpa案例:总结:

    前言: 数据持久化的操作,一般都要由我们自己一步步的去编程实现,mybatis通过我们编写xml实现,hibernate也要配置对应的xml然后通过创建session执行crud操作。...jpa,全称为Java persistence api,是用来管理java ee 或Java se环境中的持久化、以及对象关系映射的api,hibernate就是它的一个实现。...=true spring.jpa.hibernate.ddl-auto=update 注意: 这里没有配置mysql,先演示H2数据库的用法; spring.jpa.hibernate.ddl-auto...且其无需安装任何服务或者客户端,要在项目中使用也不用怎么配置,直接添加其依赖即可。那么如何查看数据是否保存到了H2数据库中呢?...总结: springData Jpa十分强大,有了它,dao层几乎不需要自己写了。上面的案例只是演示了简单的crud,其他方法以及自定义方法老铁们也可以试一试。

    75020

    芋道 Spring Boot JPA 入门(一)之快速入门

    内置 CRUD、分页、排序等功能的操作。 根据约定好的方法名规则,自动生成对应的查询操作。 使用 @Query 注解,自定义 SQL 。...也因此,在我们使用的 Spring Data JPA 的项目中,如果想要替换底层使用的 JPA 实现框架,在未使用到相关 JPA 实现框架的特殊特性的情况下,可以透明替换。...本小节,我们会使用 spring-boot-starter-data-jpa 自动化配置 Spring Data JPA 。同时,演示 Spring Data JPA 的 CRUD 的操作。...create :每次加载 hibernate 时都会删除上一次的生成的表,然后根据你的 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。...因为实现了 CrudRepository 接口,Spring Data JPA 会自动生成对应的 CRUD 的代码。

    1.5K20

    Java3大框架学习,今年最受欢迎的后端框架

    当今最流行的Java后端框架是: Spring Framework Struts Hibernate Java后端框架的比较: 框架 优势 弱点 Spring Framework 1....比纯 JDBC 慢3. 调试和微调性能可能很困难 1.Spring Framework Spring框架是最健壮和通用的后端框架之一。它包含几个不同的模块,为程序员提供各种应用工具。...视图用于管理与用户的交互。 控制器用于实现依赖于用户输入的规则。 使用这种模式意味着在网页的呈现或视图中没有特定于业务的处理,使这个Java后端框架对初学者来说更容易。...3.Hibernate 另一个流行的Java后端框架是Hibernate框架,该框架提供了一个抽象层,用于与您的数据库进行交互,从建立连接到实现CRUD操作。...值得注意的是,Hibernate并不是要解决Java数据库连接(JDBC)的许多问题,也不是一个完全独立的框架。但是,它对对象级关系的支持及其抽象层使JDBC更易于使用。

    76020

    《Spring Boot极简教程》第8章 Spring Boot集成Groovy,Grails开发第8章 Spring Boot集成Groovy,Grails开发小结参考资料

    Grails简介 Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate等开源框架之上,是一个高生产力一站式框架。...一系列强大的特性,如基于sping的依赖注入和各式各样的插件,可以提供创建现代基于web的app的所有需要的东西。 我们使用Grails框架。...$DomainName :创建DomainName对应的包含CRUD的Controller grails generate-all $DomainName: 创建DomainName对应的包含CRUD...的Controller,以及对应的视图view模板代码 下面我们就使用grails generate-all来创建Project,Milestone的Controller,以及视图。...部署测试 完成上述步骤,我们就已经有了包含CRUD基本功能的Web应用了,使用 gradle bootRun 命令运行工程,使用浏览器访问:http://localhost:8008/ 你将看到如下页面

    2.5K30

    8.2 Spring Boot集成Groovy、Grails开发小结参考资料

    Grails简介 Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate等开源框架之上,是一个高生产力一站式框架。...一系列强大的特性,如基于sping的依赖注入和各式各样的插件,可以提供创建现代基于web的app的所有需要的东西。 我们使用Grails框架。...$DomainName :创建DomainName对应的包含CRUD的Controller grails generate-all $DomainName: 创建DomainName对应的包含CRUD...的Controller,以及对应的视图view模板代码 下面我们就使用grails generate-all来创建Project,Milestone的Controller,以及视图。...部署测试 完成上述步骤,我们就已经有了包含CRUD基本功能的Web应用了,使用 gradle bootRun 命令运行工程,使用浏览器访问:http://localhost:8008/ 你将看到如下页面

    2.3K30

    【快学springboot】7.使用Spring Boot Jpa

    它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术。值得注意的是,JPA只是一套规范,不是具体的实现。Java很喜欢自己去定义规范,然后让厂商自己去实现,比如JMS等。...InnoDBD show-sql 是否打印出自动生成的 SQL,方便调试的时候查看 spring.jpa.hibernate.ddl-auto参数的作用主要用于:自动创建更新验证数据库表结构,有五个值...create: 每次加载 hibernate 时都会删除上一次的生成的表,然后根据你的 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。...validate :每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。...userRepo.deleteById(1); User user = new User(); userRepo.save(user); 这里是基础的CRUD的使用方法了。

    19610

    【快学springboot】7.使用Spring Boot Jpa

    它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术。值得注意的是,JPA只是一套规范,不是具体的实现。Java很喜欢自己去定义规范,然后让厂商自己去实现,比如JMS等。...InnoDBD show-sql 是否打印出自动生成的 SQL,方便调试的时候查看 spring.jpa.hibernate.ddl-auto参数的作用主要用于:自动创建更新验证数据库表结构,有五个值...create: 每次加载 hibernate 时都会删除上一次的生成的表,然后根据你的 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。...validate :每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。...userRepo.deleteById(1); User user = new User(); userRepo.save(user); 复制代码 这里是基础的CRUD的使用方法了。

    3.4K40

    掌握Spring Boot数据库集成:用JPA和Hibernate构建高效数据交互与版本控制

    Spring Boot与JPA/Hibernate简介 JPA(Java Persistence API) 是Java的官方持久化规范,它定义了如何将Java对象与关系型数据库中的数据进行映射和交互。...Spring Boot中的CRUD操作 CRUD(创建、读取、更新、删除)是数据库操作中最基础的功能。在Spring Boot集成JPA的项目中,CRUD操作被大大简化。...为了演示如何进行基本的CRUD操作,我们可以在UserService中实现这些方法: @Service public class UserService { @Autowired private...使用JPQL与Native Query查询 除了基本的CRUD操作,Spring Data JPA还支持通过JPQL(Java Persistence Query Language)和Native Query...分页查询:对于查询大量数据的场景,建议使用分页查询避免一次性加载过多数据,防止内存溢出问题。 索引优化:在设计数据库表结构时,合理创建索引可以显著提升查询速度。 8.

    22710

    Java 新手如何使用Spring MVC RestAPI的加密

    使用Spring Boot创建RestAPI 使用HTTPS加密RestAPI 使用Spring Security增加安全性 使用JWT实现令牌身份验证 使用Postman测试加密的RestAPI 结论...欢迎来到Java学习路线专栏~Java 新手如何使用Spring MVC RestAPI的加密 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒 ✨博客主页:IT·陈寒的博客 该系列文章专栏:Java...本文将介绍如何使用Spring MVC和一些加密技术来保护您的RestAPI,以确保数据在传输过程中是安全的。 为什么需要加密RestAPI?...使用Spring Boot创建RestAPI 首先,让我们创建一个简单的Spring Boot应用程序,以便了解如何使用Spring MVC来创建RestAPI。...结论 在本文中,我们讨论了如何使用Spring MVC和一些加密技术来保护您的RestAPI。我们首先了解了为什么需要加密RestAPI以及如何使用HTTPS来加密通信。

    21510

    Spring Boot 快速入门系列(II)—— 数据操作篇之 Spring Data JPA

    属性配置篇),我们已经学习和了解如何通过 IDEA 完成一个简单化轻量级的后端服务项目搭建,以及如何使用 application.properties 文件和读取配置文件内容的几种方式等,今天我们就来演示一下通过...2 Spring Data JPA 简介 JPA(Java Persistence API)定义了一系列对象持久化的标准, 目前实现这一规范的产品有 Hibernate、TopLink 等。...通过 IDEA 软件的右侧数据库管理,查看刚刚 iTerm 终端通过mysql命令创建的 db_test 数据库了,如下图所示: ? 注:目前数据库没有新建自己的表。...7)下面我们开始使用 Spring Data JPA 来实现数据库的 CRUD 操作,视图层采用 Freemarker 模板实现。...包括数据库表自动创建和数据库表的基本 CRUD 操作。就是这么简单!开始你的Spring Boot 的 CRUD 之旅吧!

    1.3K40

    一起来学SpringBoot | 第六篇:整合SpringDataJpa

    其目的是为了简化现有 JAVA EE和 JAVA SE应用开发工作,以及整合现有的ORM技术实现规范统一 JPA的总体思想和现有 Hibernate、 TopLink、 JDO等ORM框架大体一致。...同时Hibernate3.2获得了Sun TCK的JPA(Java Persistence API) 兼容认证。...,故而数据会丢失 create-drop: 每次运行程序时会先创建表结构,然后待程序结束时清空表 upadte: 每次运行程序,没有表时会创建表,如果对象发生改变会更新表结构,原有数据不会清空,只会更新...(推荐使用) validate: 运行程序会校验数据与数据库的字段类型是否相同,字段不同会报错 具体编码 由于上面我们采用的是 spring.jpa.hibernate.ddl-auto=update方式...这个值要与generator一起使用,generator 指定生成主键使用的生成器(可能是orcale中自己编写的序列)。

    1.6K20

    SpringBoot图文教程12—SpringData Jpa的基本使用

    但是方便也好,强大也好,每个技术都有自己的使用场景,所以我不在文中讨论好坏,今天带来Jpa的使用教程,各个技术大家根据需要任选。...,hadoop等等 那么SpringData是如何简化访问操作的呢?...boot中可以先不建表,后续使用Jpa操作数据库的时候,如果发现没有表,Jpa会根据实体类帮你创建一张数据库表。...} 4.配置Jpa spring: jpa: hibernate: # 更新或者创建数据表结构 之前提到过,如果数据库中没做表,Jpa会我们创建 这个配置 #...就是在没有表的时候创建,实体类发生改变的话 会更新表结构 ddl-auto: update # 配置在日志中打印出执行的 SQL 语句信息 show-sql: true

    1.5K20
    领券