听风辄碎的孤魂。

0%

Mybatis配置的一些问题

服务时区错误

错误代码

1
2
org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. Cause: java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.

解决方法:找到Mybatis配置文件SqlMapConfig.xml下的数据库连接池,在其中数据库urlvalue后加上?characterEncoding=utf-8&serverTimezone=UTC其中前半部分是以防万一为了解决中文乱码的问题 ,后半部分中的UTC是统一标准世界时间,能够解决上述问题

但是实际操作中又发现以下错误

1
2
3
org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 112; 对实体 "serverTimezone" 的引用必须以 ';' 分隔符结尾。

这是因为在xml中&符号是作为实体字符形式存在的

因此只需将&符号改成&即可,最后的数据库连接池中的urlvalue值为

1
jdbc:mysql://localhost:3306/mybatistest?characterEncoding=utf-8&serverTimezone=UTC

#{}解析错误

错误代码

1
2
org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. Cause: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='id', mode=IN, javaType=class java.lang.Integer, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).

解决办法:首先如果占位符#{}内部没有内容则会报这个错误,但我的问题不在这。我们先找到测试方法所用的sql查询关系映射文件,我的工程里为user.xml查看运行程序时所执行的sq语句部分

1
2
3
4
5
6
7
8
9
10
11
<!--根据ID查找用户-->
<select id="getUserById" parameterType="int" resultType="pojo.User">
SELECT
`id`,
`username`,
`birthday`,
`sex`,
`address`
FROM `user`
WHERE id = #{id} /*这里#{id}表示占位符*/
</select>

注意在select标签内的最后一行,注释内不能存在占位符#{},测试时发现注释中去掉该占位符就正常运行了。其原理尚不清楚。

这个问题的解决的过程实在是匪夷所思,Google了一个小时,各种各样的解决方法都行不通,最后万万没想到问题出在注释里,第一次遇到因为注释里的内容出问题的error,真是绝了。

去除查询关系映射文件xml中SQL语句黄线提示

问题详情:配置过程中,发现查询关系映射文件user.xml中的SQL语句部分始终有黄线提示鼠标移入IDEA提示SQL dialect is not congigured

3E8OSJ.png

解决方法:在IDEA中进行设置找到Settings-Languages&Frameworks-SQLDialect,在右侧的选项面板中的Global SQL DialectProject SQL Dialect的属性均设为Generic并应用。

更新:IDEA更新到2020后,新建的一个maven工程中,黄线仍旧去除不了,setting-editor-inspections-SQL-no data source configured。

3EJ34O.png