Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring进行数据库和网页集成_Java_Database_Spring_Dao_Dto - Fatal编程技术网

Java 使用Spring进行数据库和网页集成

Java 使用Spring进行数据库和网页集成,java,database,spring,dao,dto,Java,Database,Spring,Dao,Dto,我正在编写我的第一个java/DB/web应用程序。我是java/javascript/css/html新手,所以这个项目对我来说是一次学习经历。该应用程序将在网页中显示数据库的结果,还允许用户从网页编辑/向数据库添加信息 我使用的是spring,程序的一般流程如下: 网页->一些javascript->参考Rest服务->参考服务->DAO->DTO->数据库 问题是,应用程序当前对每个查询都有不同的DAO和DTO。我想简化程序,这样就有了一个可以处理所有查询的DAO和DTO 我正在尝试创建一

我正在编写我的第一个java/DB/web应用程序。我是java/javascript/css/html新手,所以这个项目对我来说是一次学习经历。该应用程序将在网页中显示数据库的结果,还允许用户从网页编辑/向数据库添加信息

我使用的是spring,程序的一般流程如下: 网页->一些javascript->参考Rest服务->参考服务->DAO->DTO->数据库

问题是,应用程序当前对每个查询都有不同的DAO和DTO。我想简化程序,这样就有了一个可以处理所有查询的DAO和DTO

我正在尝试创建一个DTO,它可以处理2到10个不同的插槽,我希望每个插槽都有一个名称,而不是与之关联的数字。我还认为插槽的名称应该由DB的返回设置。然后,我需要一种可靠的方法将数据映射到DAO中的行。我将发布一些简单的示例代码来展示我的工作

@Repository
public class DecisionLevelDaoImpl implements DecisionLevelDao {

private JdbcTemplate jdbcTemplate;

@Autowired
public DecisionLevelDaoImpl(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
}
private static String FIND_ACTIVE_DECISION_LEVEL = DaoHelper
        .loadResourceToString("queries/DecisionLevel_FindActive.sql");
@Override
public List<DecisionLevelDTO> findActiveDecisionLevel() {
    return jdbcTemplate.query(FIND_ACTIVE_DECISION_LEVEL, new DecisionLevelDTORowMapper());
}
private class DecisionLevelDTORowMapper implements RowMapper<DecisionLevelDTO> {
    @Override
    public DecisionLevelDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
        String levelCd = rs.getString("LevelCd");
        String levelName = rs.getString("LevelName");
        String levelInstruct = rs.getString("LevelInstruct");
        String active = (rs.getBoolean("active") ? "Y" : "N");
        String printOrder = Integer.toString(rs.getInt("PrintOrder"));
        String lastUpdUser = rs.getString("LastUpdUser");
        return new DecisionLevelDTO (levelCd, levelName,
                   levelInstruct, active, printOrder,lastUpdUser);
    }
}
目前大约有25个Dao和25个DTO。这似乎是可怕的重复,我想找到一个更易于维护的方法

我不是在找任何人来写我的代码,我这样做是为了学习,所以免费代码根本帮不了我。我看到的所有教程都有一个DAO和一个DTO,用于返回单个查询的结果


很抱歉,如果这是一个错误的论坛来回答这类问题。

我现在明白你的意思了。您可以为DML和DQL查询创建单独的通用方法。

这些方法将接受查询和一个结果集(对于DQL)或预处理语句(对于DML)。同样,您可以根据需要将DML划分为更新/删除/插入。

现在,当您得到一个查询时,您知道该查询的作用。相应地设置ResultSetPreparedStatement(如适用),并将查询与之一起传递并获得结果。

如果不清楚,请告诉我。

我现在明白你的意思了。您可以为DML和DQL查询创建单独的通用方法。

这些方法将接受查询和一个结果集(对于DQL)或预处理语句(对于DML)。同样,您可以根据需要将DML划分为更新/删除/插入。

现在,当您得到一个查询时,您知道该查询的作用。相应地设置ResultSetPreparedStatement(如适用),并将查询与之一起传递并获得结果。

如果不清楚,请告诉我。

对不起,我不理解您的要求。我们通常为一个查询编写一个方法。通常人们只为一个DB表创建一个DAO。现在我们为每个查询都有一个DAO,感觉不对,因为大多数代码都完全相同。变量名已从一个DAO更改为另一个DAO。我正在复制和粘贴,然后更改变量名并移动到下一个查询。我被教导从不在文件之间复制和粘贴代码。相反,只需找到一种方法,从一个地方粘贴到另一个地方的所有代码生成一个文件/函数。抱歉,我不理解您的要求。我们通常为一个查询编写一个方法。通常,人们只为一个DB表生成一个DAO。现在,我们为每个查询都有一个DAO,感觉不对,因为大多数代码都完全相同。变量名已从一个DAO更改为另一个DAO。我正在复制和粘贴,然后更改变量名并移动到下一个查询。我被教导从不在文件之间复制和粘贴代码。相反,只要找到一种方法,从一个地方粘贴到另一个地方的所有代码中生成一个文件/函数。
import org.codehaus.jackson.annotate.JsonProperty;

public class DecisionLevelDTO {

@JsonProperty("levelCd")
private String levelCd;
@JsonProperty("levelName")
private String levelName;
@JsonProperty("levelInstruct")
private String levelInstruct;
@JsonProperty("active")
private String active;
@JsonProperty("printOrder")
private String printOrder;
@JsonProperty("lastUpdUser")
private String lastUpdUser;

public DecisionLevelDTO () { }
public DecisionLevelDTO (String levelCd, String levelName,
        String levelInstruct, String active, String printOrder,
        String lastUpdUser) {
    super();
    this.levelCd = levelCd;
    this.levelName = levelName;
    this.levelInstruct = levelInstruct;
    this.active = active;
    this.printOrder = printOrder;
    this.lastUpdUser = lastUpdUser;
}