jdbc后接?useUnicode=true&characterEncoding=UTF-8为何还是查询不到?另外我发现不是文中的问题,英文也一样

来源:4-2 动态 SQL 拼接(下)

未卜先知

2016-12-22 15:00

我看log4打印出来的是?

数据库的连接 我用的是JDBC的同一套,所以编码什么的没问题

在Dao层中我打印了下传入Dao的参数

message.setCommand(command);
System.out.println("DAO接受的参数:"+message.getCommand());

打印的结果就是我输入的

接下来就是传入Mybatis了

接收参数部分的xml,指定参数类型为com.imooc.servlet.Message

<select id="queryMessageList" parameterType="com.imooc.servlet.Message" resultMap="UserResult">
  select ID,COMMAND,DESCRIPTION,CONTENT from message where 1=1
    <if test="command != null">
        and COMMAND = #{command}
    </if>
    <if test="description != null">
        and DESCRIPTION like '%' #{description} '%'
    </if>

执行后的结果:

通过表单传入的参数为:查看

DAO接受的参数:查看

==>  Preparing: select ID,COMMAND,DESCRIPTION,CONTENT from message where 1=1 and COMMAND = ? 

==> Parameters: (String)

这里为什么显示的是?  看参数收到的是个不能解析的,或者就是个空?

(后面看了下直接传也是问号,但是Parameters: (String)这里有值,通过对象就没有)

如果我直接指定String参数

<select id="queryMessageList" parameterType="String" resultMap="UserResult">
  select ID,COMMAND,DESCRIPTION,CONTENT from message where 1=1 and COMMAND=#{_parameter}
</select>
messageList = sqlSession.selectList("Message.queryMessageList","查看");

查看是没问题的

为什么传入一个对象的时候出错了?

已经找到问题了,commad被初始化了,一般查不到的加?useUnicode=true&amp;characterEncoding=UTF-8就可以了

写回答 关注

7回答

  • 后会无期28
    2017-06-15 15:08:45

    加了?useUnicode=true&amp;characterEncoding=UTF-8还是不行啊



  • 后会无期28
    2017-06-15 15:02:24

    哪个地方写错了啊

    求指出啊

  • qq_画个圈圈诅咒你_03164602
    2016-12-29 00:15:01

    我和你差不多求答案。。

    未卜先知

    我有一个地方写错了,command被初始化了

    2016-12-29 14:38:40

    共 1 条回复 >

  • 保龙
    2016-12-22 17:28:21

    “com.imooc.servlet.Message”Message是实体类中的Message吧

    不是servlet的,改成com.imooc.bean.Message

    未卜先知

    我换了,也是一样,这个只是包位置的区别吧,除非他有一套看起来像是注册的机制

    2016-12-22 17:43:44

    共 1 条回复 >

  • 未卜先知
    2016-12-22 17:20:18
    Map<String,Object> params = new HashMap<String,Object>();
    params.put("command",command);
    params.put("description",description);

    xml中除了parameterType外,我什么都没改,但是就可以了

    <select id="queryMessageList" parameterType="java.util.Map" resultMap="UserResult">
      select ID,COMMAND,DESCRIPTION,CONTENT from message where 1=1
        <if test="command != null">
            and COMMAND = #{command}
        </if>
        <if test="description != null">
            and DESCRIPTION like '%' #{description} '%'
        </if>
    </select>


    未卜先知

    <if test="command != null and command.length()>0"> and COMMAND = #{command} </if> <if test="description != null and description.length()>0"> and DESCRIPTION like '%' #{description} '%' </if>

    2016-12-23 00:55:24

    共 2 条回复 >

  • 未卜先知
    2016-12-22 17:17:40

    换了另一种方式,传入一个Map是可以的

    传入对象不行

    但是这个parameterType="com.imooc.servlet.Message" 确实是我创建的地址啊

  • 保龙
    2016-12-22 17:12:16

    你把where 1=1去掉,然后在if标签外包着where标签  试试

    未卜先知

    只有2种可能,1、mybatis没有理解我传入的对象,从打印和其他看,他读到的是个空。 2、我的parameterType="com.imooc.servlet.Message" 写错了 但是我在<resultMap id="UserResult" type="com.imooc.servlet.Message"> 用的也是这个

    2016-12-22 17:25:12

    共 1 条回复 >

通过自动回复机器人学Mybatis---基础版

微信公众号自动回复功能学习Mybatis,基础教程加案例实战方式学习

107413 学习 · 831 问题

查看课程

相似问题