JavaRESTfulWebService+DAO+JDBC最佳实践
我的目标是构建一个RESTfulWebService,将数据CRUD到Oracle和MySQL数据库中 您能提供一些RESTfulWebService到CRUD数据库的最佳实践吗 我需要在webservice类中直接使用DAO还是直接实现JDBC?如果能提供一些有用的链接和例子将是有益的 我使用连接池!还好还是 在何处/如何保存一些配置值,例如数据库连接字符串、数据库凭据等?对于所有这些,服务器是否可以使用config.properties文件?诸如此类: config.properties db_url=jdbc:mysql://localhost/ 数据库=测试 db\u user=我的用户 db\u password=我的密码 InputStream input=新文件InputStreamConfig.properties; 属性属性=新属性; prop.loadinput 为了对数据库进行CRUD,我计划使用PreparedStatement。推荐内容:要使用SQL语句,请选择*from…,更新。。。设置、删除。。。直接在java代码中或者构建一些存储过程来查询、插入、更新、删除数据 我希望该应用程序将能够与不同的数据库工作。我想从MySQL和Oracle开始。实施这种方法的最佳实践是什么?用刀?如何将配置保留到不同类型的数据库 以下是我开始编写的一些代码:JavaRESTfulWebService+DAO+JDBC最佳实践,java,web-services,Java,Web Services,我的目标是构建一个RESTfulWebService,将数据CRUD到Oracle和MySQL数据库中 您能提供一些RESTfulWebService到CRUD数据库的最佳实践吗 我需要在webservice类中直接使用DAO还是直接实现JDBC?如果能提供一些有用的链接和例子将是有益的 我使用连接池!还好还是 在何处/如何保存一些配置值,例如数据库连接字符串、数据库凭据等?对于所有这些,服务器是否可以使用config.properties文件?诸如此类: config.properties d
package com.crunchify.restjersey;
import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/testws")
public class TestWS {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String currentDate() {
Date dt = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss");
return df.format(dt);
}
@GET
@Path("/getTables")
@Produces(MediaType.TEXT_PLAIN)
public String getTables() {
return "Noroc";
}
@GET
@Path("/getConnection")
@Produces(MediaType.TEXT_PLAIN)
public String getConnection() {
String result = "";
Connection conn = null;
try {
Context initialContext = new InitialContext();
Context environmentContext = (Context) initialContext.lookup("java:comp/env");
String dataResourceName = "jdbc/MySQLDB_db";
DataSource dataSource = (DataSource) environmentContext.lookup(dataResourceName);
conn = dataSource.getConnection();
if (!conn.isClosed())
result += "Connection established!";
else
result += "Cannot establish connection!";
conn.close();
}
catch(Exception ex) {
result += ex.getMessage();
}
return result;
}
}
看起来您更喜欢在某种应用服务器上使用标准JEE技术,比如JAX-RS,因为您通过JNDI查找数据源 我建议使用DAOs访问数据库。DAO通常会减少样板代码,如获取DB连接、将查询结果映射到POJO等。此外,我建议使用某种O/R映射器来访问DB。JPA和普通Hibernate是JPA最常见的两种,使用应用服务器提供的实现或在Tomcat上休眠。 是的,您肯定应该使用连接池。 保存配置值的位置在某种程度上取决于环境。通常,配置不应该打包在您的工件WAR、JAR、EAR中,除非有某种机制覆盖您的配置值。常见的选项是Java系统属性和命令行参数。 如上所述,我建议使用一些O/R映射器。如果使用普通SQL,那么准备好的语句是一个好主意。准备好的语句确保您不易受到SQL注入攻击,如果您在SQL语句中将一些未替换的用户输入作为参数,则可能会发生SQL注入攻击。 我再次建议使用O/R映射器JPA或Hibernate。配置取决于您的环境。您将在Jboss/Glassfish/Websphere等应用服务器上配置数据源。其他环境将使用配置文件、java系统属性或环境变量。 对于你个人的任务,我会使用SpringBoot,因为它相对容易启动。有关指引包括: 休息服务 JPA 也就是说,在您选择的应用服务器或Dropwizard上使用JEE JAX-RS和JPA也是一个不错的选择
顺便说一句,后面要讨论的其他方面是验证、身份验证和授权、事务管理等。看起来您更喜欢在某种应用服务器上使用标准JEE技术,如JAX-RS,因为您通过JNDI查找数据源 我建议使用DAOs访问数据库。DAO通常会减少样板代码,如获取DB连接、将查询结果映射到POJO等。此外,我建议使用某种O/R映射器来访问DB。JPA和普通Hibernate是JPA最常见的两种,使用应用服务器提供的实现或在Tomcat上休眠。 是的,您肯定应该使用连接池。 保存配置值的位置在某种程度上取决于环境。通常,配置不应该打包在您的工件WAR、JAR、EAR中,除非有某种机制覆盖您的配置值。常见的选项是Java系统属性和命令行参数。 如上所述,我建议使用一些O/R映射器。如果使用普通SQL,那么准备好的语句是一个好主意。准备好的语句确保您不易受到SQL注入攻击,如果您在SQL语句中将一些未替换的用户输入作为参数,则可能会发生SQL注入攻击。 我再次建议使用O/R映射器JPA或Hibernate。配置取决于您的环境。您将在Jboss/Glassfish/Websphere等应用服务器上配置数据源。其他环境将使用配置文件、java系统属性或环境变量。 对于你个人的任务,我会使用SpringBoot,因为它相对容易启动。有关指引包括: 休息服务 JPA 也就是说,在您选择的应用服务器或Dropwizard上使用JEE JAX-RS和JPA也是一个不错的选择 顺便说一句,以后再看其他方面 主要包括验证、身份验证和授权、事务管理等