MyBatis 动态sql问题

藍調↘ヅ孤獨 发布于 2012/08/02 21:13
阅读 1K+
收藏 0

我的原生sql是:

select * from t_product where proid in(1,2,3,4,5,6,7,8,9,10) and pro_name like '%男裤%' limit 0,10

其中t_product 表对应的是Product 类

这条sql应该怎么构建

如果我要做一个所有的分页都执行一个sql怎么做

类是这种的

select * from (select * from t_product where proid in(1,2,3,4,5,6,7,8,9,10) and pro_name like '%男裤%' ) limit 0,10 但里面的参数(in(1,2,3,4,5,6,7,8,9,10) and pro_name like '%男裤%' )也是动态的传进去

以下是问题补充:

@藍調↘ヅ孤獨:in里面的条件是不一定连续的 (2012/08/02 22:05)
加载中
0
功夫panda
功夫panda

proid in(1,2,3,4,5,6,7,8,9,10)若是这里面的数字是连续的话没必要这样写吧。

select * from (

      select * from (

        select * from t_product where proid<'$10$' and proid>'$1$' 

      ) where pro_name like '%男裤%'

) limit 0,10 

不知道是不是你想要的结果!

0
藍調↘ヅ孤獨

引用来自“monkey~”的答案

proid in(1,2,3,4,5,6,7,8,9,10)若是这里面的数字是连续的话没必要这样写吧。

select * from (

      select * from (

        select * from t_product where proid<'$10$' and proid>'$1$' 

      ) where pro_name like '%男裤%'

) limit 0,10 

不知道是不是你想要的结果!

不连续的
0
atearsan
atearsan
MYBAITS的mapper里可以写for循环标签.dao里传list进来.注意直接传拼接好的是不行的。
atearsan
atearsan
list不能为空.具体的for循环写法可以搜下
0
功夫panda
功夫panda

一个字段里有多个值那只能循环了,在程序里写个循环:如

private Integer ids[];

Connection conn = null;
  try {
      conn = this.daoHelper.getDataSource().getConnection();//连接数据库,这个你自己写。
   conn.setAutoCommit(false);
   PreparedStatement pstm = conn.prepareStatement("delete from d_book where id=?");
   for (int i = 0; i < ids.length; i++) {
    pstm.setInt(1, ids[i]);
    pstm.addBatch();
   }
   pstm.executeBatch();
   conn.commit();
   
  } catch (SQLException e1) {
   e1.printStackTrace();
    try{
    conn.rollback();
    }catch(Exception ex){
     
   }
  你参考一下这个,差不多。希望对你有帮助。

0
藍調↘ヅ孤獨

引用来自“monkey~”的答案

一个字段里有多个值那只能循环了,在程序里写个循环:如

private Integer ids[];

Connection conn = null;
  try {
      conn = this.daoHelper.getDataSource().getConnection();//连接数据库,这个你自己写。
   conn.setAutoCommit(false);
   PreparedStatement pstm = conn.prepareStatement("delete from d_book where id=?");
   for (int i = 0; i < ids.length; i++) {
    pstm.setInt(1, ids[i]);
    pstm.addBatch();
   }
   pstm.executeBatch();
   conn.commit();
   
  } catch (SQLException e1) {
   e1.printStackTrace();
    try{
    conn.rollback();
    }catch(Exception ex){
     
   }
  你参考一下这个,差不多。希望对你有帮助。

用纯sql是可以写的出来,现在的主要问题是,mybatis分页,还有动态sql的问题,参数应该怎么传,我现在用的也是jdbc,
0
wartskcaj
wartskcaj

1,2,3,4,5,6,7,8,9,10是一个数组,mybatis现在貌似不能直接传数组的

还有,你这个数组是一个字段的值吗?什么类型的?用的什么数据库呢?

藍調↘ヅ孤獨
其实想来想去,还是用了继承,在父类上把分页信息,传递列表(List)都写好了,最后传实体类传进去,开始的时候就是觉得太麻烦,后面实在想不出有什么更好的办法
返回顶部
顶部