`

mybatis查询结果List<Map<String,Object>>应对动态改变字段类型导致转换结果乱码的问题

 
阅读更多

问题场景:

查询语句是select * from 某视图...(备注,此处我们为什么不select具体字段,因为我们是为了动态查询字段,方便实施根据不同客户需求增加、修改字段类型和值、删除字段等场景)。

视图中有属性field1,类型是varchar

结果

field1="字符串类型"

变更field1为number类型

结果

field1="◆~··◆"

乱码。

------------------

解决方案:
在select 标签上加上 statementType="STATEMENT",且在select 语句中不能出现#{...}占位符,如需实现动态SQL效果,可以使用${...}变量,它在运行期会转换为具体的变量值。
原理:
默认statementType是PREPARED,由于PREPARED是默认编译一次,所以你的类型也就固定了,STATEMENT则是每次都编译,另外STATEMENT不支持动态SQL,所以不能出现#{...}占位符。
缺点:
性能降低
后记:
其实这个问题主要是JDBC对SQL预编译知识的理解,其实跟MYBATIS关系不大。所以一般人遇到这个问题,可能首先想到的是如何从MYBATIS来解决,所以相对来说这个问题虽然不难,但较不常见,因为这个需求场景也确实比较变态。
分享到:
评论

相关推荐

    mybatis collection list string

    标题 "mybatis collection list string" 暗示了我们讨论的主题是关于MyBatis框架中与集合(List)和字符串(String)处理相关的问题。在MyBatis这个强大的持久层框架中,集合和字符串的使用非常常见,尤其是在进行数据库...

    MyBatis传入集合 list 数组 map参数的写法

    在MyBatis中,处理集合参数如list、array以及map是非常常见的操作。这些参数通常用于构建动态SQL,特别是当需要在`IN`语句中使用多个值时。下面将详细解释如何在MyBatis中使用这些参数类型。 1. **List参数**: 当...

    Spring Boot高级教程之Spring Boot连接MySql数据库

    List&lt;Map&lt;String, Object&gt;&gt; list = jdbcTemplate.queryForList(sql); for (Map&lt;String, Object&gt; map : list) { Set&lt;Entry&lt;String, Object&gt;&gt; entries = map.entrySet(); if(entries != null) { Iterator&lt;Entry...

    解决mybatis使用char类型字段查询oracle数据库时结果返回null问题

    "解决mybatis使用char类型字段查询oracle数据库时结果返回null问题" 在使用mybatis框架对Oracle数据库进行查询操作时,如果使用char类型字段作为查询条件,可能会出现结果返回null的问题。这种情况下,需要对char...

    SpringBoot+Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名

    在SpringBoot和Mybatis的集成应用中,我们经常需要处理数据映射,特别是从数据库查询结果转换成Java对象。在Java编程中,驼峰命名法(Camel Case)是常用的变量和方法命名规则,它使得代码更易读、更符合编程规范。...

    Map接收Mybatis的结果,字段1为Key,字段2为Val

    以上就是使用ResultHandler将MyBatis查询结果转换为Map,以字段1为Key,字段2为Value的具体实现步骤。这种方法允许我们更灵活地处理查询结果,尤其在需要快速查找特定字段对应值的情况下非常实用。

    mybatisIntercept.zip

    public List&lt;Map&lt;String, Object&gt;&gt; getConditionsPage(Page page, String condition , String recognitionresult, String starttime , String endtime) throws Exception { SqlSession sqlSession = sqlSession = ...

    Mybatis多表查询.docx

    在Dao层中,我们可以使用List&lt;Map&lt;String,Object&gt;&gt;来接收查询结果: ```java List&lt;Map&lt;String,Object&gt;&gt; userList = userDao.getUser(); ``` 每一行条目对应一个Map,Map的Key值对应列名或参数名,Map的value值对应...

    mybatis 对clob类型转换

    在使用MyBatis框架进行数据操作时,我们可能会遇到CLOB类型数据的读写问题,尤其是在转换和插入数据库时。本篇将详细探讨MyBatis中处理CLOB类型数据的转换以及解决可能出现的异常情况。 首先,MyBatis是Java中的一...

    第三章 MyBatis的核心配置.docx

    例如,新建一个db.properties配置文件,写上数据库信息,接着在Mybatis文件中配置&lt;properties&gt;属性,通过resource引用,最后修改数据库连接信息。 3.2.3 &lt;settings&gt;元素 &lt;settings&gt;元素用于配置MyBatis的全局参数...

    mybatis开发步骤

    -- 无条件查询,查询全部,返回值以键值对形式存在List&lt;Map&lt;String,Object&gt;&gt;中 --&gt; &lt;select id="findAll" resultType="java.util.HashMap" &gt; select id,studentId,studentName from t_student &lt;/select&gt; &lt;!-- ...

    mybatis拦截器实现通用权限字段添加的方法

    MyBatis拦截器实现通用权限字段添加的方法 MyBatis拦截器是一种非常实用的技术,可以用来实现各种复杂的数据库操作。本文将详细介绍如何使用MyBatis拦截器来实现通用权限字段添加,达到灵活、可靠、可维护的数据库...

    ojdbc6(此包解决mybatis_plus查询时分秒为0问题).7z

    ojdbc6(此包解决mybatis_plus查询时分秒为0问题),springboot项目+oracle11g就用这个jdbc就行,放在项目的resources目录下lib目录下就行,然后配置下pom文件即可 &lt;!-- maven oracle依赖包 --&gt; &lt;dependency&gt; ...

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    mybatis generator Java类方法生成

    List&lt;String&gt; warnings = new ArrayList&lt;String&gt;(); boolean overwrite = true; // 如果这里出现空指针,直接写绝对路径即可。 String genCfg = "D:\\workspace\\actity\\mybatis_generator\\src\\main\\...

    Mybatis多参数查询与列表查询不同方式实现

    Map&lt;String, Object&gt; params = new HashMap&lt;&gt;(); params.put("username", "evankaka"); params.put("age", 25); List&lt;User&gt; users = sqlSession.selectList("selectUser", params); ``` 2. **使用注解实现多...

    mybatis乱码的解决方法

    3. **结果集映射**:在处理查询结果时,如果实体类中的字段类型与数据库字段的字符集不匹配,也会引发乱码。 4. **日志打印**:MyBatis的日志打印中,如果日志配置的编码与实际数据编码不符,也会造成乱码显示。 5...

    mybatis generator使用方法

    &lt;artifactId&gt;mybatis&lt;/artifactId&gt; &lt;version&gt;3.4.2&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;/plugin&gt; ``` 上述配置首先指定了插件的组ID、artifactID和版本号,接着定义了一个执行阶段,当Maven执行到`...

    AppSystem.rar

    &lt;groupId&gt;org.mybatis&lt;/groupId&gt; &lt;artifactId&gt;mybatis&lt;/artifactId&gt; &lt;version&gt;3.2.2&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.mybatis&lt;/groupId&gt; &lt;artifactId&gt;mybatis-spring&lt;/artifactId...

    mybatis动态插入list传入List参数的实例代码

    MyBatis 动态插入 List 传入 List 参数的实例代码详解 MyBatis 是一款优秀的 ORM 工具,提供了许多实用的功能,其中之一便是动态插入 List,下面我们将通过实例代码详解 MyBatis 动态插入 List 传入 List 参数的...

Global site tag (gtag.js) - Google Analytics