这个让我头疼了很长时间,网上说是字符集问题。
其实最主要的问题为传入的参数与数据库类型对应不上。
我遇到的是我的实体中定义了属性为对象,而mybatis中传入的维对象类型。导致错误的发生。#{userid.id},
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.thinkgem.jeesite.modules.kaoqin.dailysale.dao.TscDailysaleDao">
<sql id="tscDailysaleColumns">
a.id AS "id",
a.userid AS "userid",
a.recorddate AS "recorddate",
a.product AS "product",
a.sale AS "sale",
u.name AS "userName"
</sql>
<sql id="tscDailysaleJoins">
LEFT JOIN SYS_USER u ON u.id = a.userid
</sql>
<select id="get" resultType="TscDailysale">
SELECT
<include refid="tscDailysaleColumns"/>
FROM tsc_dailysale a
<include refid="tscDailysaleJoins"/>
WHERE a.id = #{id}
</select>
<select id="findList" resultType="TscDailysale">
SELECT
<include refid="tscDailysaleColumns"/>
FROM tsc_dailysale a
<include refid="tscDailysaleJoins"/>
<where>
<if test="userid != null and userid != ''">
AND a.userId = #{userid}
</if>
<if test="recorddate != null and recorddate != ''">
AND a.recorddate = #{recorddate}
</if>
<if test="product != null and product != ''">
AND a.product = #{product}
</if>
</where>
<choose>
<when test="page !=null and page.orderBy != null and page.orderBy != ''">
ORDER BY ${page.orderBy}
</when>
<otherwise>
</otherwise>
</choose>
</select>
<select id="findAllList" resultType="TscDailysale">
SELECT
<include refid="tscDailysaleColumns"/>
FROM tsc_dailysale a
<include refid="tscDailysaleJoins"/>
<where>
</where>
<choose>
<when test="page !=null and page.orderBy != null and page.orderBy != ''">
ORDER BY ${page.orderBy}
</when>
<otherwise>
</otherwise>
</choose>
</select>
<insert id="insert">
INSERT INTO tsc_dailysale(
id,
userId,
recordDate,
product,
sale
) VALUES (
#{id},
#{userid.id},
#{recorddate},
#{product},
#{sale}
)
</insert>
<update id="update">
UPDATE tsc_dailysale SET
userId = #{userid.id},
recorddate = #{recorddate},
product = #{product},
sale = #{sale}
WHERE id = #{id}
</update>
<update id="delete">
DELETE FROM tsc_dailysale
WHERE id = #{id}
</update>
</mapper>
下面是抄的为别人归纳的字符集解决的方案
1.在mysql的安装目录下找到my.ini,作如下修改:
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
修改后重启Mysql
2. 将已经建好的表也转换成utf8mb4
命令:
更改数据库编码:ALTER DATABASE caitu99 CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci
;
alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin; (将TABLE_NAME替换成你的表名)
然后就OK了。网上流传的一个版本增加了一个步骤,就是把mysql环境变量将character_set_client,character_set_connection,character_set_database,character_set_results,character_set_server 都修改成utf8mb4,不过我没有做这一步,也正常,所以可能是这一步是多余的,如果需要改,则按照下面介绍做修改。
3修改mysql配置文件my.cnf(windows为my.ini)
my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'