- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个使用 JdbcTemplate
的 Spring 应用程序查询数据库,我对它到底是如何工作的有一些疑问。
因此,在服务类中,我有执行查询的方法定义:
//JDBC TEMPLATE SELECT EXAMPLE
public List<DBLog> queryAllLogs() {
System.out.println("JDBCExample: queryAllLogs() is called");
final String QUERY_SQL = "SELECT * FROM LOG ORDER BY IDLOG";
List<DBLog> dbLogList = this.jdbcTemplate.query(QUERY_SQL, new RowMapper<DBLog>() {
public DBLog mapRow(ResultSet resulSet, int rowNum) throws SQLException {
System.out.println("Getting log: "+ rowNum + " content: " + resulSet.getString("LOGSTRING"));
DBLog dbLog = new DBLog();
dbLog.setIDLOG(resulSet.getInt("IDLOG"));
dbLog.setLOGSTRING(resulSet.getString("LOGSTRING"));
return dbLog;
}
});
return dbLogList;
}
此方法只是执行一个查询,返回 LOG
内的所有记录。表按 IDLOG
排序字段值。这很容易理解。
阅读官方文档我发现这个实现是query()
方法需要 2 个对象:查询字符串和 RowMapper
对象并且:
Query using a prepared statement, mapping each row to a Java object via a RowMapper
所以我认为QUERY_SQL
查询字符串会自动转换为 PreparedStatment
通过query()
方法实现(这是正确的还是我遗漏了什么?)
对我来说绝对不清楚的是,在我看来,在前面的示例中,我定义了 RowMapper
实现作为查询方法的第二个参数。
所以这个特定的实现包含 mapRow(ResultSet resulSet, int rowNum)
据我所知,为 ResultSet
的每一行调用该方法实现查询执行返回的对象。所以这个方法会自动映射DBLog
上的特定行。它将自动添加到返回的 List<DBLog> dbLogList
中列表。
我的推理正确还是我遗漏了什么?
所有这些工作是谁做的?是这个具体的query()
注意调用 mapRow()
的方法实现(采用这 2 个特定输入参数的方法)通过的方法RowMapper
对象,然后添加返回的 DBLog
反对该名单?
最佳答案
你的推理完全正确。
首先,看一下this table in the documentation 。它列出了 Spring JDBC 自动执行的所有操作以及您需要执行的操作。基本上,使用 Spring JDBC 时您需要做的就是:
JDBCTemplate.query(String, RowMapper)
遵循相同的模式。首先,给它一个要执行的 SQL 语句:这是第一个参数(上面列表中的第 2 点)。其次,您给它一个对象,该对象将负责将每个结果转换为您的域对象(上面列表的第 4 点)。
此对象称为 RowMapper
,因为它将由 ResultSet
对象表示的数据库行映射到域对象中。
这是使用 Spring JDBC 相对于原始 JDBC 的主要优势之一:它将所有常见和重复的任务分解到其核心中。是的,它将在底层使用一个 PreparedStatement
,它将被执行并且 ResultSet
将被循环。在此循环的每次迭代中(由 Spring JDBC 进行),您的 RowMapper
将被调用。其结果将被 Spring JDBC 聚合成List
并最终返回。
关于java - Spring JdbcTemplate 的 query() 方法的实现到底是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33987429/
应用程序上下文中的一些bean的依赖关系形成一个循环:当我使用时@Autowired私有(private) JdbcTemplate jdbcTemplate;不同类(class) 错误提示: ***
我做一个查询: jdbcTemplate.query(sqlQueryForGetNodes, new Object[]{treeId, versionId}, rs -> { NodeTy
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 3 年前。 Improve this ques
根据 Spring documentation ,Spring JdbcTemplate的使用步骤如下:
我做了这个简单的应用程序来连接到 MySQL 数据库,我收到了这个错误: org.springframework.jdbc.core.JdbcTemplate 在我的配置中 (com.kubamadr
我遵循了SpringBoot框架中的示例,该框架从这里开始,当我尝试添加Spring Bean时得到下一个错误。Pom.xml。我尝试插入到BD中,BD没有改变,应用程序本身可以工作,但没有连接数据库
我遵循了SpringBoot框架中的示例,该框架从这里开始,当我尝试添加Spring Bean时得到下一个错误。Pom.xml。我尝试插入到BD中,BD没有改变,应用程序本身可以工作,但没有连接数据库
我正在学习 Spring Boot 和 jdbcTemplate 的组合以进行一些基本的 crud 操作,并试图更好地理解我应该选择哪种更新方法。 我理解以下两种类方法(改编自 this post)将
如何使用行映射器向表中插入数据? 我正在尝试: Employee user1 = jtemplate.queryForObject("INSERT INTO employee(id, name,sal
我最近切换到 Spring Framework 而不是手动处理 JDBC,这主要是一个很好的过渡。但是,一个程序开始出现奇怪的问题:如果数据库速度很慢,则在调用 getJdbcTemplate().u
命令(Command)模式是指将请求封装成为一个对象,使发出请求和执行请求的责任分割开,方便将命令对象进行存储、传递、调用、增加与管理。 也就是将发送者、接收者和调用命令封装成独立的对象,来供客户端调
我有一个 spring 应用程序,它的主页会触发多个 ajax 调用,这些调用又从数据库中获取数据并返回。数据库已配置连接池,minPoolSize 为 50,maxPoolSize 为 100。 现
有人可以指出我以下 Spring Jdbc 模板代码中的任何错误吗? 当我点击删除时,记录没有被删除,也没有显示错误。 public void delete(String id) { logg
我正在使用 spring JDBCTemplate。 我有一个场景,其中需要传递到查询函数中的参数是条件/可选的。例如,我有以下代码: List result = jdbcTemplate.query
在项目中我在Hibernate和Spring jdbctemplate中是混合使用的。我添加了乐观锁定。 Hibernate 非常适合版本控制,但现在我必须转换所有这些 jdbctemplate 代码
我已经为我的INSERT查询建立了一个DAO。码: DAO public class EmployeeDao { JdbcTemplate template; public void
我有一个sql查询。 String sql = "SELECT ? FROM Users WHERE Lastname=?"; 我使用 JDBCTemplate 中的 queryForList 方法
我正在尝试将嵌套查询与 JdbcTemplate 一起使用,但发现了问题,在我看来,它不支持嵌套查询..我是对的吗?或者我需要改变什么? 所以,我调用 getJdbcTemplate().query
这个问题是几年前提出的,但答案对我来说不起作用。我已将建议的注释添加到配置和 dao 中。我确信模板实际上正在连接到数据库,因为当我的列太小时,我收到了适当的错误。更新调用正在执行单行插入,并且毫无异
JdbcTemplate 对象和 SimpleJdbcTemplate 之间有什么区别? 最佳答案 截至Spring 3.1 SimpleJdbcTemplate已弃用,SimpleJdbcTempl
我是一名优秀的程序员,十分优秀!