问答详情
源自:4-2 动态 SQL 拼接(下)

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

我看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就可以了

提问者:未卜先知 2016-12-22 15:00

个回答

  • 后会无期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

    我和你差不多求答案。。

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

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

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

  • 未卜先知
    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>


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

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

    传入对象不行

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

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

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