首先,我应该说我是使用MyBatis的新手。
我在运行任何SQL语句时使用MyBatis时遇到问题。 SQL语句正在发送到数据库,但表名不能在数据库中识别。
出于调试目的,我有一个非常简单的表定义为' clients'。 数据库是PostgreSQL。 相同的JDBC用户可以使用psql登录,并查看和查询数据库中的表,因此我认为该问题不应与权限相关。
对于我的简单测试,我运行的是一个非常简单的非参数化查询,但它失败了:
select * from clients
我打开Postgresql登录并看到以下内容。查询语句正在访问数据库,但它似乎无法识别表名。我在Java代码中也看到了基本相同的错误。
DEBUG: StartTransaction
STATEMENT: select * from clients
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
STATEMENT: select * from clients
ERROR: relation "clients" does not exist at character 15
对我来说,这似乎是一个问题,无论是权限还是没有正确使用dataSource。我认为,因为发送了正确的查询语句,大多数“映射器”都会被发送出去。 myBatis的接线没问题。
我的环境定义如下:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5433/testdb" />
<property name="username" value="topuser" />
<property name="password" value="resupot" />
</dataSource>
</environment>
</environments>
&#39; TESTDB&#39;是桌子的位置。它似乎正在进入数据库(因为条目写入postgres日志)正确但它没有查看testdb数据库。我认为这是因为当我没有连接到正确的数据库时,我在psql中发出这个查询语句时出现了类似的错误。
我还尝试更改查询以使用架构名称&#39; public&#39;,这是表的位置,但它以类似的方式失败:
select * from public.clients
Java代码就像:
sqlSessionTemplate.selectList(SELECT_ENTRY);
在Java中,我尝试在sqlSessionTemplate中获取dataSource以查看它是否在启动查询之前已正确配置,但是诸如url和username之类的信息不能从javax.sql.DataSource对象中检查。
尝试将其类型转换为org.apache.commons.dbcp.BasicDataSource以获取url配置,如在线某处建议的那样,但我只是遇到了类型错误。
添加了Mapper信息
<mapper namespace="testClient">
<resultMap id="result_Client" type="clientData">
<result property="id" column="id" jdbcType="BIGINT" javaType="long"/>
<result property="clientName" column="clientName" jdbcType="VARCHAR" javaType="java.lang.String"/>
</resultMap>
<select id="selectEntries" resultMap="result_Client">
select * from clients
</select>
</mapper>
添加了MyBatis Debug
2014-06-13 12:37:36,801 DEBUG [java.sql.Connection] [http-bio-8080-exec-25] ooo Connection Opened
2014-06-13 12:37:36,801 DEBUG [java.sql.PreparedStatement] [http-bio-8080-exec-25] ==> Executing: select * from clients
2014-06-13 12:37:36,801 DEBUG [java.sql.PreparedStatement] [http-bio-8080-exec-25] ==> Parameters:
添加了在Java中看到的错误
### Error querying database. Cause: org.postgresql.util.PSQLException: ERROR: relation "clients" does not exist
Position: 15
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### Cause: org.postgresql.util.PSQLException: ERROR: relation "clients" does not exist
Position: 15
; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: ERROR: relation "clients" does not exist
Position: 15