mybatis动态表名遇见There is no getter for property named 'tableName' in 'class java.lang.String'
2017-08-14 17:00
585 查看
(1)首先mybatis实现动态表名的sql语句
mvc控制器中传入sql的表名,从而实现查询不同表里的数据。
(2)却不想,半路掉链子了
There is no getter for property named ‘tableName’ in ‘class java.lang.String’,意思就是String类没有名为’tableName’的属性
(3)原因:
Mybatis默认采用ONGL解析参数,所以会自动采用对象树的形式取string.tableName值,引起报错。
(4)解决办法:
再dao层接口中给相应的方法加上参数说明,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/172511babcf04f08d765ed17323ea66a)
mybatis映射文件的sql语句,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/2fbb5b5f9dbd7e4c4d3f7ea81e9cc303)
注意:mybatis中加载sql语句可以分为预编译和非预编译,默认预编译,而 statementType=”STATEMENT”为非预编译,同时也必须使用${}来获取传入的参数值。
参考博客:mybtis动态表名之STATEMENT属性
Mybatis动态传入tableName–非预编译(STATEMENT)
控制台结果:
<select id="getData" resultType="java.util.HashMap" parameterType="String"> select * from ${tableName} order by Data_Index Desc limit 0,1 </select>
mvc控制器中传入sql的表名,从而实现查询不同表里的数据。
(2)却不想,半路掉链子了
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'tableName' in 'class java.lang.String' at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) at com.sun.proxy.$Proxy15.selectOne(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:166) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:82) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53) at com.sun.proxy.$Proxy16.getData(Unknown Source) at TestCase.test.test(test.java:37)
There is no getter for property named ‘tableName’ in ‘class java.lang.String’,意思就是String类没有名为’tableName’的属性
(3)原因:
Mybatis默认采用ONGL解析参数,所以会自动采用对象树的形式取string.tableName值,引起报错。
(4)解决办法:
再dao层接口中给相应的方法加上参数说明,如下:
mybatis映射文件的sql语句,如下:
注意:mybatis中加载sql语句可以分为预编译和非预编译,默认预编译,而 statementType=”STATEMENT”为非预编译,同时也必须使用${}来获取传入的参数值。
参考博客:mybtis动态表名之STATEMENT属性
Mybatis动态传入tableName–非预编译(STATEMENT)
(4)执行结果,如下: 测试程序: package TestCase; import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import dao.UserMapper; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations ="classpath:spring/ApplicationContext.xml")//,"classpath:mapper/mapper.xml public class test { @Autowired UserMapper userMapper; @Test public void test(){ try { Map<String, Object> paraMap = userMapper.getParametersByModelId(1); for(Object key:paraMap.keySet()){ System.out.println(key+":::"+paraMap.get(key)); } String tableName = (String)paraMap.get("para_url"); System.out.println("**************"+tableName+"**************************"); Map<String, Object> dataMap = userMapper.getData(tableName); for(Object key:dataMap.keySet()){ System.out.println("key="+key+",value="+dataMap.get(key)); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
控制台结果:
相关文章推荐
- Mybaits注解方式 There is no getter for property named 'name' in 'class java.lang.String'
- Mybatis报There is no getter for property named 'name' in 'class java.lang.String'错误
- There is no getter for property named 'fieldName' in 'class java.lang.String'
- There is no getter for property named 'username' in 'class java.lang.String错误!
- mybatis错误:There is no getter for property named 'xxx' in 'class java.lang.String'
- mybatis中出现There is no getter for property named 'depIds' in 'class java.lang.String'的错误
- Mybatis error,There is no getter for property named 'xx' in 'class java.lang.String',解决办法
- mybatis String的if条件判断问题 There is no getter for property named 'xxx' in 'class Java.lang.Integer'
- Mybatis-There is no getter for property named 'id' in 'class java.lang.String'
- 【Mybatis】There is no getter for property named 'type' in 'class java.lang.String'
- MyBatis There is no getter for property named 'xxx' in 'class java.lang.String'
- There is no getter for property named 'email' in 'class java.lang.String
- There is no getter for property named 'XXX' in 'class java.lang.String'
- MyBatis There is no getter for property named 'xxx' in 'class java.lang.String'
- MyBatis错误:There is no getter for property named 'paramSql' in 'class java.lang.String'
- mybatis报错 There is no getter for property named 'xx' in 'class java.lang.String
- There is no getter for property named 'userIds' in 'class java.lang.String'
- There is no getter for property named 'xxx' in 'class java.lang.String'。
- There is no getter for property named 'XXX' in 'class java.lang.String'
- There is no getter for property named 'num' in 'class java.lang.String'。