![](/img/trans.png)
[英]How can I protect my Java Spring Boot API with my own Custom Token System?
[英]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.