簡體   English   中英

如何在沒有 Spring、Hibernate 的情況下使用純 Java 制作我自己的 Crud Repo

[英]How can I make my own Crud Repo with Pure Java without Spring, Hibernate

我們有一個任何人都可以使用的框架的 CrudRepo:

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {

但是,我想用純 java(用 JDBC)創建我自己的 CrudRepository。

有人可以給我一些有關如何執行此操作的鏈接嗎? 我找不到任何。

也許有人有一些我可以效仿的例子?

我想要像我之前提到的那樣的東西,但我不知道我應該擴展哪個 Repos,我不明白如何配置對數據庫的查詢以及何時應該編寫 SQL(CREATE、READ、UPDATE、DELETE)查詢:

public interface MyOwnRepository<T, ID> {
   <S extends T> S save(S entity);
   <S extends T> Iterable<S> saveAll(Iterable<S> entities);
   Optional<T> findById(ID id);
   boolean existsById(ID id);
   Iterable<T> findAll();
   Iterable<T> findAllById(Iterable<ID> ids);
   long count();
   void deleteById(ID id);
   void delete(T entity);
   void deleteAllById(Iterable<? extends ID> ids);
   void deleteAll(Iterable<? extends T> entities);
   void deleteAll();
}

與 Hibernate 相同,但基於純 Java。

這是我為使用 MySQL 的聖經應用程序創建的 SQL 類的示例。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SQL {

    private int insertCount;

    private Connection connection;

    public boolean connect() {
        try {
            String[] params = createConnectionStrings();
            connection = DriverManager.getConnection(params[0], params[1], params[2]);
            this.insertCount = 0;
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
    
    private String[] createConnectionStrings() {
        String[] connection = new String[3];
        String host = "bible-database.caaitaoyrsgp.us-east-1.rds.amazonaws.com";
//      host = "localhost";
        String port = "3306";
        String user = "ggleblanc";
//      user = "root";
        String useSSL = "?verifyServerCertificate=true&useSSL=true&requireSSL=true";
        useSSL = "?useSSL=false";
        String schema = "";
        schema = "/bible";
        String password = "********";
        String driver = "jdbc:mysql://" + host + ":" + port;
        driver += schema + useSSL;
        connection[0] = driver;
        connection[1] = user;
        connection[2] = password;
        return connection;
    }

    public void close() {
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public boolean createBibleTables() {
        String[] sql = new String[7];
        
        StringBuilder builder = new StringBuilder();
        builder.append("CREATE SCHEMA IF NOT EXISTS `bible` ");
        builder.append("DEFAULT CHARACTER SET utf8 ; "); 
        sql[0] = builder.toString();
        
        builder = new StringBuilder();
        builder.append("USE `bible` ;");
        sql[1] = builder.toString();
        
        builder = new StringBuilder();
        builder.append("DROP TABLE IF EXISTS `bible`.`verse` ;");
        sql[2] = builder.toString();

        builder = new StringBuilder();
        builder.append("DROP TABLE IF EXISTS `bible`.`book` ;");
        sql[3] = builder.toString();

        builder = new StringBuilder();
        builder.append("CREATE TABLE IF NOT EXISTS `bible`.`book` ( ");
        builder.append("  `bookID` INT NOT NULL AUTO_INCREMENT, ");
        builder.append("  `bookShortName` VARCHAR(100) NOT NULL, ");
        builder.append("  `bookName` VARCHAR(250) NOT NULL, ");
        builder.append("  PRIMARY KEY (`bookID`)) ");
        builder.append("ENGINE = InnoDB ");
        builder.append("COMMENT = 'Book of the Bible'; ");
        sql[4] = builder.toString();

        builder = new StringBuilder();
        builder.append("CREATE TABLE IF NOT EXISTS `bible`.`verse` ( "); 
        builder.append("  `verseID` INT NOT NULL AUTO_INCREMENT, "); 
        builder.append("  `bookID` INT NOT NULL, "); 
        builder.append("  `chapter` INT NOT NULL, "); 
        builder.append("  `verse` INT NOT NULL, "); 
        builder.append("  `text` TEXT NOT NULL, "); 
        builder.append("  PRIMARY KEY (`verseID`), "); 
        builder.append("  UNIQUE KEY `BOOK` (`bookID`,`chapter`,`verse`)) "); 
        builder.append("ENGINE=InnoDB; "); 
        sql[5] = builder.toString();

        builder = new StringBuilder();
        builder.append("CREATE TABLE IF NOT EXISTS `bible`.`lastCreated` ( ");
        builder.append("    `timestamp` DATETIME NOT NULL) ");
        builder.append("ENGINE = InnoDB ");
        builder.append("COMMENT = 'The last time the bible database was created';");
        sql[6] = builder.toString();

        try {
            connection.setAutoCommit(false);
            Statement statement = connection.createStatement();
            for (int i = 0; i < sql.length; i++) {
                statement.executeUpdate(sql[i]);
            }
            connection.commit();
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    public int insertBook(String title, String text) {
        StringBuilder builder = new StringBuilder();
        builder.append("INSERT INTO `bible`.`book` ");
        builder.append("(`bookID`, `bookShortName`, `bookName`) ");
        builder.append("VALUES (DEFAULT, ?, ?);");
        String sql = builder.toString();

        builder = new StringBuilder();
        builder.append("SELECT LAST_INSERT_ID();");
        String sql2 = builder.toString();

        try {
            connection.setAutoCommit(false);
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setString(1, title);
            statement.setString(2, text);
            statement.executeUpdate();
            connection.commit();
            ResultSet rs = statement.executeQuery(sql2);
            rs.next();
            return rs.getInt(1);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public void insertVerse(int bookNumber, int chapter, int verse, String text) {
        StringBuilder builder = new StringBuilder();
        builder.append("INSERT INTO `bible`.`verse` ");
        builder.append("(`verseID`, `bookID`, `chapter`, `verse`, `text`) ");
        builder.append("VALUES (DEFAULT, ?, ?, ?, ?);");
        String sql = builder.toString();
        try {
            connection.setAutoCommit(false);
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setInt(1, bookNumber);
            statement.setInt(2, chapter);
            statement.setInt(3, verse);
            statement.setString(4, text);
            statement.executeUpdate();
            insertCount++;
            if (insertCount > 250) {
                connection.commit();
                insertCount = 0;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void insertTimestamp() {
        StringBuilder builder = new StringBuilder();
        builder.append("INSERT INTO `bible`.`lastCreated` ");
        builder.append("(`timestamp`) ");
        builder.append("VALUES (CURRENT_TIMESTAMP);");
        String sql = builder.toString();
        try {
            connection.setAutoCommit(false);
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.executeUpdate();
            connection.commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM