在线等,大家帮帮忙啊?mybatis 分页是能不能传多个参数包括排序时用的关键字(asc或desc)
我以前是仅仅分页,排序是手动赋值的,没有问题:
接口
public List<FuZhuang> showalldescdesc1(@Param("offset") int offset, @Param("limit") int limit);
sql语句
<select id="showalldescdesc1" resultType="FuZhuang" >
SELECT * from fuzhuang order by price desc,yuexiaoliang desc LIMIT #{offset},#{limit};
</select
但是现在想先排序时传入参数(asc、desc):
接口
public List<FuZhuang> showalldescdesc1(@Param("offset") int offset, @Param("limit") int limit,@Param("str") String str);
sql语句
<select id="showalldescdesc1" resultType="FuZhuang" >
SELECT * from fuzhuang order by price #{str},yuexiaoliang desc LIMIT #{offset},#{limit};
</select>
结果报错了:
org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''desc',yuexiaoliang desc LIMIT 6,6' at line 1
### The error may exist in mybatis/mappers/FuZhuangMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT * from fuzhuang order by price ?,yuexiaoliang desc LIMIT ?,?;
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''desc',yuexiaoliang desc LIMIT 6,6' at line 1
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''desc',yuexiaoliang desc LIMIT 6,6' at line 1
org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:233)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:71)
org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:365)
$Proxy10.selectList(Unknown Source)
org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:195)
org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:124)
org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:90)
是什么原因啊?难道asc和desc不能以变量的形式传参吗?不会吧?该怎么解决啊!!!求助!!
[最优解释]
<select id="showalldescdesc1" resultType="FuZhuang" >
SELECT * FROM fuzhuang
<if test="ORDER == 'desc'">
ORDER BY price DESC
</if>
<if test="ORDER == 'asc'">
ORDER BY yuexiaoliang ASC
</if>
LIMIT #{offset},#{limit};
</select>
[其他解释]
<select id="sel_order_s_count" parameterClass="java.util.Map" resultClass="int"></select>
传入的参数要在select中写明,比如我这里传了一个Map,在sql中就可以引用Map中的数据了
[其他解释]
### SQL: SELECT * from fuzhuang order by price ?,yuexiaoliang desc LIMIT ?,?;
说明是预处理的,这样的话是不能赋值的;类似于sql注入预处理就可以防止,预处理原理我了解不多,不过真正执行的sql语句 SELECT * from fuzhuang order by price desc,yuexiaoliang desc LIMIT ?,?; 那里绝对不是单纯的desc 要么就是'desc' 或什么的 具有我也了解不多!
[其他解释]
SQL语句只有值的地方可以用?,其余地方一律不行,比如table,column,order by clause ,group by clause等。
ibatis 用#变量#实现预处理,用$变量$实现事前拼接,mybatis不熟,自己查手册吧。
[其他解释]
嗯 确实是这样 我一般写parameterType 我试过 有的不写也可以 但是我要是传多个类型的数据时 怎么写啊?比如说要穿两个参数一个是int类型,一个是String类型,parameterType或parameterClass该怎么写呀?如果非要这样的话当然可以把int和String 封装到一个类里面,但是类型多了该怎么办?你如说一个int,两个String,一个user之类的??????
[其他解释]
可能是我没说清楚,我很打算是同时按照price和xiaoliang排序的,你这样的话只是按照一个条件排序了啊,我想知道能否通过传参数,来决定是升序(asc),还是降序(desc)。。。。。求助
[其他解释]
<select id="showalldescdesc1" resultType="FuZhuang" >
SELECT * FROM fuzhuang
<if test="str== 'desc'">
ORDER BY price DESC,yuexiaoliang ASC
</if>
<if test="str== 'asc'">
ORDER BY price ASC,yuexiaoliang ASC
</if>
LIMIT #{offset},#{limit};
</select>
试试应该可以
[其他解释]
我试了下 没有报错了 应该可以 还需要测试下 小弟刚刚学mybatis 动态sql不怎么会用就指教 有没有什么好的视频或者书啊 讲的深一点的 还有mybatis要多传几个参数怎么办?parameterType或parameterClass该怎么写?比如5楼的情况????求指教!!!!
[其他解释]
还有mybatis的动态sql语句中的if能不能同时满足多个条件啊
比如说
<if test="(str== '1')&&(price=='desc')">
ORDER BY price DESC
</if>
我试过 好像只要写&&就会报错
如果想同时满足两个条件该怎么办呢?
求解!!!!!!
[其他解释]
多个参数时传Map类型,然后把要用的数据放到Map中(Map<key,value>),在sql中直接使用#key#就可以使用参数了
[其他解释]
<if test="str== '1' AND price =='desc' ">
ORDER BY price DESC
</if>