精华内容
下载资源
问答
  • 转载请注明出处http://blog.csdn.net/evankaka一、查询所有数据,返回List查询出列表,也就是返回list, 在我们这个例子中也就是 List , 这种方式返回数据,需要在Employeer.xml 里面配置返回的类型 resultMap, 注意...

    林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

                 本文要实现Mybatis多参数查询与列表查询不同方式实现,以一个实例来说明。

    本文示例工程下载

    一、查询所有数据,返回List

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

     <!-- 定义数据库字段与实体对象的映射关系 -->
     <resultMap type="Employeer" id="resultMap">
        <id property="employeer_id" column="employeer_id"/> 
        <result property="employeer_name" column="employeer_name"/>
        <result property="employeer_age" column="employeer_age"/>
        <result property="employeer_department" column="employeer_department"/>
        <result property="employeer_worktype" column="employeer_worktype"/>
     </resultMap>
    id、result是最简单的映射,id为主键映射;result其他基本数据库表字段到实体类属性的映射。

    查询列表的语句在 Employeer.xml

    <!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
        <select id="findEmployeerByName" parameterType="string" resultMap="resultMap">
            select * from `t_employeer` where employeer_name like #{employeer_name}
        </select>
    在EmployeerMapper 接口中增加方法:public List<Employeer> findEmployeerByName(String employeer_name);  
    	/**
    	 * 注意要和Employeer.xml的方法名对应
    	 */
    	public List<Employeer> findEmployeerByName(String employeer_name);   

    测试:

    	/**
    	 * 查询列表
    	 */
    	public static List<Employeer> getEmployeerList(String employeer_name){
    		SqlSession session = null;
    		 List<Employeer> employeers=null;
    		try {
    			session = sqlSessionFactory.openSession(); 
    			EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
    			 employeers = employeerMapper.findEmployeerByName(employeer_name);	
                session.commit() ;  		
    		} finally {
    			session.close();
    		}
    		return employeers;
       
        }
    	public static void main(String[] args) {							
    		List<Employeer> employeers=getEmployeerList("张三");
    		 for(Employeer employeer:employeers){
                 System.out.println(employeer);
             }
    
    	}

    结果:


    其中的数据的之前插入的,现在要查找张三的列表全部都列出来了。

    二、多参数查询

    (1)方法一


    EmployeerMapper中定义

    	/**
    	 * 多参数查询,注意要和Employeer.xml的方法名对应
    	 */
    	public List<Employeer> findEmployeerByNameandDep(String employeer_name,String employeer_department);
    Employeer.xml中定义

     <!-- 定义数据库字段与实体对象的映射关系 -->
     <resultMap type="Employeer" id="resultMap">
        <id property="employeer_id" column="employeer_id"/> 
        <result property="employeer_name" column="employeer_name"/>
        <result property="employeer_age" column="employeer_age"/>
        <result property="employeer_department" column="employeer_department"/>
        <result property="employeer_worktype" column="employeer_worktype"/>
     </resultMap>
    <!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
         <select id="findEmployeerByNameandDep"  resultMap="resultMap">
         select* from `t_employeer` where employeer_name=#{0} and employeer_department=#{1}
         </select> 
    由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始


    测试代码:

    	/**
    	 * 多参数查询列表
    	 */
    	public static List<Employeer> getEmployeerList(String employeer_name,String employeer_department){
    		SqlSession session = null;
    		 List<Employeer> employeers=null;
    		try {
    			session = sqlSessionFactory.openSession(); 
    			EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
    			 employeers = employeerMapper.findEmployeerByNameandDep(employeer_name, employeer_department);
                session.commit() ;  		
    		} finally {
    			session.close();
    		}
    		return employeers;
       
        }

        public static void main(String[] args) {   
             System.out.println("=========================使用多单参数查询===========================");
             List<Employeer> employeers1=getEmployeerList("张三","产品二部");
             for(Employeer employeer1:employeers1){
                 System.out.println(employeer1);
             }
    

    结果:


    方法二:

    将 resultMap="resultMap" 改成 resultType="Employeer"

    <!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
         <select id="findEmployeerByNameandDep"  resultType="Employeer">
         select* from `t_employeer` where employeer_name=#{0} and employeer_department=#{1}
         </select> 
    方法三:Map封装多参数
    EmployeerMapper.java中添加
    	/**
    	 * 多参数查询,注意要和Employeer.xml的方法名对应
    	 */
    	public List<Employeer> findEmployeerByNameandDep1(Map<String,String> map);
    Employeer.xml中添加:

         <!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的,注意key1和key2为传入的map的键值 -->
         <select id="findEmployeerByNameandDep1" parameterType="map" resultType="Employeer">
         select* from `t_employeer` where employeer_name=#{key1} and employeer_department=#{key2}
         </select> 

    其中map是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个。

    测试使用:

    	/**
    	 * 多参数查询列表,使用map
    	 */
    	public static List<Employeer> getEmployeerList(Map<String, String> map){
    		SqlSession session = null;
    		 List<Employeer> employeers=null;
    		try {
    			session = sqlSessionFactory.openSession(); 
    			EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
    			 employeers = employeerMapper.findEmployeerByNameandDep1(map);
                session.commit() ;  		
    		} finally {
    			session.close();
    		}
    		return employeers;
       
        }

    		 System.out.println("=========================使用多单参数map方式查询===========================");
    		 Map<String, String> map = new HashMap<String, String>(); 
    		 map.put("key1", "明明"); 
    		 map.put("key2", "财会部");
    		 List<Employeer> employeers2=getEmployeerList(map);
    		 for(Employeer employeer2:employeers2){
                 System.out.println(employeer2);
             }

    一定要注意key:

    结果:


    本文示例工程下载

    林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

    展开全文
  • MyBatis批量操作和多参数查询

    千次阅读 2016-09-01 15:31:14
    MyBatis多参数查询 (一)单个参数 public List<XXBean> getXXBeanList(String xxCode); select 字段... from XXX where code = #{xxCode}  其中方法名和ID一致,#{}中的参数名与...

    批量操作


    1、批量添加元素session.insert(String string,Object o)

    [plain]  view plain  copy
    1. public void batchInsertStudent(){  
    2.     List<Student> ls = new ArrayList<Student>();  
    3.     for(int i = 5;i < 8;i++){  
    4.         Student student = new Student();  
    5.         student.setId(i);  
    6.         student.setName("maoyuanjun" + i);  
    7.         student.setSex("man" + i);  
    8.         student.setTel("tel" + i);  
    9.         student.setAddress("浙江省" + i);  
    10.         ls.add(student);  
    11.     }  
    12.     SqlSession session = SessionFactoryUtil.getSqlSessionFactory().openSession();  
    13.     session.insert("mybatisdemo.domain.Student.batchInsertStudent", ls);  
    14.     session.commit();  
    15.     session.close();  
    16. }  
    17.   
    18. <insert id="batchInsertStudent" parameterType="java.util.List">  
    19.     INSERT INTO STUDENT (id,name,sex,tel,address)  
    20.     VALUES   
    21.     <foreach collection="list" item="item" index="index" separator="," >  
    22.         (#{item.id},#{item.name},#{item.sex},#{item.tel},#{item.address})  
    23.     </foreach>  
    24. </insert>  

    2、批量修改session. insert (String string,Object o)
    [plain]  view plain  copy
    1. 实例1:  
    2. public void batchUpdateStudent(){  
    3.     List<Integer> ls = new ArrayList<Integer>();  
    4.     for(int i = 2;i < 8;i++){  
    5.         ls.add(i);  
    6.     }  
    7.     SqlSession session = SessionFactoryUtil.getSqlSessionFactory().openSession();  
    8.     session.insert("mybatisdemo.domain.Student.batchUpdateStudent",ls);  
    9.     session.commit();  
    10.     session.close();  
    11. }  
    12. <update id="batchUpdateStudent" parameterType="java.util.List">  
    13.     UPDATE STUDENT SET name = "5566" WHERE id IN  
    14.     <foreach collection="list" item="item" index="index" open="(" separator="," close=")" >  
    15.         #{item}  
    16.     </foreach>  
    17. </update>  
    18.   
    19. 实例2:  
    20. public void batchUpdateStudentWithMap(){  
    21.     List<Integer> ls = new ArrayList<Integer>();  
    22.     for(int i = 2;i < 8;i++){  
    23.         ls.add(i);  
    24.     }  
    25.     Map<String,Object> map = new HashMap<String,Object>();  
    26.     map.put("idList", ls);  
    27.     map.put("name", "mmao789");  
    28.     SqlSession session = SessionFactoryUtil.getSqlSessionFactory().openSession();  
    29.     session.insert("mybatisdemo.domain.Student.batchUpdateStudentWithMap",map);  
    30.     session.commit();  
    31.     session.close();  
    32. }  
    33. <update id="batchUpdateStudentWithMap" parameterType="java.util.Map" >  
    34.     UPDATE STUDENT SET name = #{name} WHERE id IN   
    35.     <foreach collection="idList" index="index" item="item" open="(" separator="," close=")">   
    36.         #{item}   
    37.     </foreach>  
    38. </update>  

    3、批量删除session.delete(String string,Object o)
    [plain]  view plain  copy
    1. public void batchDeleteStudent(){  
    2.     List<Integer> ls = new ArrayList<Integer>();  
    3.     for(int i = 4;i < 8;i++){  
    4.         ls.add(i);  
    5.     }  
    6.     SqlSession session = SessionFactoryUtil.getSqlSessionFactory().openSession();  
    7.     session.delete("mybatisdemo.domain.Student.batchDeleteStudent",ls);  
    8.     session.commit();  
    9.     session.close();  
    10. }  
    11. <delete id="batchDeleteStudent" parameterType="java.util.List">  
    12.     DELETE FROM STUDENT WHERE id IN  
    13.     <foreach collection="list" index="index" item="item" open="(" separator="," close=")">   
    14.         #{item}   
    15.     </foreach>  
    16. </delete>  


    MyBatis多参数查询


    (一)单个参数
    public List<XXBean> getXXBeanList(String xxCode);

    <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">
    select 字段... from XXX where code = #{xxCode} 
    </select>

    其中方法名和ID一致,#{}中的参数名与方法中的参数名一直, 我这里采用的是XXXBean是采用的短名字, select 后的字段列表要和bean中的属性名一致, 如果不一致的可以用 as 来补充。


    (二)多参数
    public List<XXXBean> getXXXBeanList(String xxId, String xxCode);

    <select id="getXXXBeanList" resultType="XXBean">
    select 字段... from XXX where id=#{0} code = #{1} 
    </select>

    由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始

    (三)Map封装多参数

    public List<XXXBean> getXXXBeanList(HashMap map);

    <select id="getXXXBeanList" parameterType="hashmap" resultType="XXBean">
    select 字段... from XXX where id=#{xxId} code = #{xxCode} 
    </select>

    其中hashmap是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个,map如何封装就不用了我说了吧。

    (四)List封装IN
    public List<XXXBean> getXXXBeanList(List<String> list);

    <select id="getXXXBeanList" resultType="XXBean">
    select 字段... from XXX where id in
    <foreach item="item" index="index" collection="list"
    open="(" separator="," close=")"> 
    #{item} 
    </foreach> 
    </select>

    foreach 最后的效果是select 字段... from XXX where id in ('1','2','3','4')


    展开全文
  • 最近在使用spring 的 jdbctemplate 查询,在 Spring 的 IoC 容器中配置一个 JdbcTemplate 的 bean,将 DataSource 注入进来,然后再把JdbcTemplate 注入到自定义DAO 中。  进入正题,用原生的jdbc就会存在sql拼接...

             最近在使用spring 的 jdbctemplate 查询,在 Spring 的 IoC 容器中配置一个 JdbcTemplate 的 bean,将 DataSource 注入进来,然后再把JdbcTemplate 注入到自定义DAO 中。

            进入正题,用原生的jdbc就会存在sql拼接问题,拼接的话就自然而然的会出现sql注入漏洞的问题,我们要避免sql注入漏洞,无非就是使用预处理的方式,sql出现注入漏洞的根本原因就是直接拼接参数,所以项目中的sql拒绝拼接sql的参数。

          (一):处理多参数的处理方式

            直接看例子:

    public List
       
         getAllOperator(int toPage, int pageSize,
    			String login, String name, String oper_group_id, int state) {
    		String sql = "select p.id, p.login,p.password,p.name,p.email,p.tel,g.name,p.create_time,p.state,p.withdraw_time from oper_person_info as p "
    				+ "left join oper_group_info as g on p.oper_group_id = g.id   where 1 = 1 ";
    		List 
         queryList=new  ArrayList();
    		if (!name.equals("")) {
    			sql += " and p.name = ? ";
    			queryList.add(name);
    		}
    		if (!oper_group_id.equals("")) {
    			sql += " and p.oper_group_id = ? ";
    			queryList.add(oper_group_id);
    		}
    		if (state == 1 || state == 0) {
    			sql += " and p.state = ? ";
    		    queryList.add(state);
    		}
            
    		return super.getJdbcTemplate().query(sql, queryList.toArray(),
    				new OperatorSimpleMapper());
    	}
    

          这个例子是随便加的,这里要说的就是最好定义sql的时候使用StringBuffer ,这个比较灵活。

          (二):使用like的参数请求方式

    public List<OperatorSimple> getAllOperator(int toPage, int pageSize,
                String login, String name, String oper_group_id, int state) {
            String sql = "select p.id, p.login,p.password,p.name,p.email,p.tel,g.name,p.create_time,p.state,p.withdraw_time from oper_person_info as p "
                    + "left join oper_group_info as g on p.oper_group_id = g.id   where 1 = 1 ";
            List <Object> queryList=new  ArrayList<Object>();
            if (!name.equals("")) {
                           sql += " and p.name like ? ";
                queryList.add("%" + name + "%");
            }
            if (!oper_group_id.equals("")) {
                sql += " and p.oper_group_id = ? ";
                queryList.add(oper_group_id);
            }
            if (state == 1 || state == 0) {
                sql += " and p.state = ? ";
                queryList.add(state);
            }
            
            return super.getJdbcTemplate().query(sql, queryList.toArray(),
                    new OperatorSimpleMapper());
        }



    这个地方的like测试过很多方式,有的地方说是 sql += " and p.name = ? ";queryList.add("%" + name + "%") ;这样不行; 还有自己的想法的sql += " and p.name = ‘%?%’ ";queryList.add(name"),这样处理,直接就不识别’?‘,应该是被转义了。经过测试上面的方法是可行的。希望可以帮到你们!

    展开全文
  • 需求:项目中想实现无限下拉子菜单功能,后台就需要返回包括子节点的所有数据 数据库表结构如下: 上次是通过在java程序中递归不断通过父级id查询子节点...mybatis可以在数据库内部实现递归查询被自动装填...

    需求:项目中想实现无限下拉子菜单功能,后台就需要返回包括子节点的所有数据 

     

    数据库表结构如下:

    上次是通过在java程序中递归不断通过父级id查询子节点实现的:

    https://blog.csdn.net/lianzhang861/article/details/83783796

    但这样需要不断连接和断开数据库,比较费时

    mybatis可以在数据库内部实现递归查询被自动装填,由于省去了数据库连接步骤,访问速度会更快,但会增加数据库服务器压力,使用时根据实际情况定使用程序递归还是数据库递归

    方式是使用 resultMap中的collection,此标签可以一对多级联

    
      <resultMap>
            <constructor> //适用于不存在没有参数的构造方法
                <idArg></idArg>
                <arg></arg>
            </constructor>
            <id/>//这个对象的主键
            <association/>//一对一级联
            <collection/>//一对多级联
            <discriminator>//鉴别器
                <case/>
            </discriminator>
        </resultMap>
    

    实现方法:

    1.首先添加该表的实体类ArticleCategory

    public class ArticleCategory {
    
        private String categoryId;
    
        private String categoryName;
    
        private String categoryParentId;
        //存放子节点
        private List<ArticleCategory> subList;
    
        public String getCategoryId() {
            return categoryId;
        }
    
        public void setCategoryId(String categoryId) {
            this.categoryId = categoryId;
        }
    
        public String getCategoryName() {
            return categoryName;
        }
    
        public void setCategoryName(String categoryName) {
            this.categoryName = categoryName;
        }
    
        public List<ArticleCategory> getSubList() {
            return subList;
        }
    
        public void setSubList(List<ArticleCategory> subList) {
            this.subList = subList;
        }
    
        public String getCategoryParentId() {
            return categoryParentId;
        }
    
        public void setCategoryParentId(String categoryParentId) {
            this.categoryParentId = categoryParentId;
        }
    }

    2.controller调用

    @ResponseBody
    @RequestMapping(value = "getArticleCategoryTree2", produces = "text/plain;charset=UTF-8")
    public String getArticleCategory2(@RequestParam Map<String,String> params) {
        RetBase ret=new RetBase();
        params.put("categoryId","0");
        //List<Map<String,Object>> list=this.getSubCategory(params);
        List<ArticleCategory> list=articleService.getArticleCategory1(params);
        ret.setData(list);
        ret.setSuccess(true);
        return JSON.toJSONString(ret);
    }

    3.dao

    public List<Map<String,Object>> getArticleCategory(Map<String,String> params);

     4.xml

    <resultMap id="Category" type="com.zhuhuixin.common.entity.ArticleCategory">
        <id column="category_id" property="categoryId"/>
        <result column="category_name" property="categoryName"></result>
        <result column="category_parent_id" property="categoryParentId"></result>
        <collection column="category_id" property="subList"
                    ofType="com.zhuhuixin.common.entity.ArticleCategory"
                    select="getArticleCategory"></collection>
    </resultMap>
    
    <select id="getArticleCategory" resultMap="Category">
        select
        *
        from article_category t
        where  t.category_status='YES'
        and t.category_parent_id = #{categoryId}
        order by t.category_name
    </select>

    5.查出的数据格式

    注意:

    1.collection 的column与id的column相同,property为实体类中子集合的名字,select与查询方法名字相同

    2.查询时一定要将id和parentId都查出来,否则mybaits无法完成递归,我用*查就更没问题了。实体类中也要有父id那个属性

    3.我从controller调用的时候已经传入了一个父id参数,然后mybatis递归时又自动将父id传给查询。但这个参数的名字可以和resultMap中的id名字不相同,也就是说如果我controller里面传的父id名字为 cc,select中改为

    and t.category_parent_id = #{cc}

    mybatis照样能查出子集合,所以这个参数名可以随便写

    不过前台js解读数据的时候也得用递归方法解析数据,有点麻烦~~~

     

    ========== 华丽分割线 ==============

    时间来到了2019.12.19

    最近搞springboot项目中的菜单管理中又用到了这个,不过菜单由于有权限限制啥的,传入的参数比较多,查询就会出现问题,要不查不出来,要不就是子查询参数不生效,因为先前只用到一个父id参数,而且网上能找到的大部分例子都是一个参数例子,这次经过试验总结到collection多参数传入的方法

    <resultMap>
            <id/>//这个对象的主键
            <collection column=" 
            {menuParent=MENU_ID,menuType=MENU_TYPE,menuStatus=MENU_STATUS,userId=USER_ID}" 
             property="subList"
                    ofType="com.bomc.enterprise.entry.SysMenu"
                    select="getMenuList">
        </collection>
        </resultMap>
    

    首先collection是用来递归查询一对多的,其次是参数传入的问题,column是用来传参数的,如果只有一个参数,直接写一个用来关联的字段名就行了,不管你传的参数叫啥,它都会把上次查出的结果的这个字段自动放到下一次查询 这个参数的位置,所以就会发现如果只有一个参数,你参数传啥名字都没事。

    <resultMap id="Category" type="com.zhuhuixin.common.entity.ArticleCategory">
        <id column="category_id" property="categoryId"/>
        <result column="category_name" property="categoryName"></result>
        <result column="category_parent_id" property="categoryParentId"></result>
        <collection column="category_id" property="subList"
                    ofType="com.zhuhuixin.common.entity.ArticleCategory"
                    select="getArticleCategory"></collection>
    </resultMap>
    
    <select id="getArticleCategory" resultMap="Category">
        select
        *
        from article_category t
        where  t.category_status='YES'
        and t.category_parent_id = #{categoryId}
        order by t.category_name
    </select>

    但如果你的查询有多个参数就不一样了,需要用这种写法了,前面是传入参数名,等号 后面是字段名字

    <collection column=" 
            {menuParent=MENU_ID,menuType=MENU_TYPE,menuStatus=MENU_STATUS,userId=USER_ID}" 

    例子:

    1.传入的参数

    params.put("menuParent", "0");
    params.put("menuType", "menu");
    params.put("userId", USER.getUserId());
    List<SysMenu> menuList = menuService.getMenuList(params);

    2.xml

    <resultMap id="SysMenu" type="com.bomc.enterprise.entry.SysMenu" >
        <id column="MENU_ID" property="menuId"/>
        <!--<result column="MENU_ID" property="menuId" jdbcType="VARCHAR" />-->
        <result column="MENU_PARENT" property="menuParent" jdbcType="VARCHAR" />
        <result column="MENU_CODE" property="menuCode" jdbcType="VARCHAR" />
        <result column="MENU_NAME" property="menuName" jdbcType="VARCHAR" />
        <result column="MENU_TYPE" property="menuType" jdbcType="VARCHAR" />
        <result column="MENU_LEAF" property="menuLeaf" jdbcType="VARCHAR" />
        <result column="MENU_METHOD" property="menuMethod" jdbcType="VARCHAR" />
        <result column="MENU_ICON" property="menuIcon" jdbcType="VARCHAR" />
        <result column="MENU_URL" property="menuUrl" jdbcType="VARCHAR" />
        <result column="MENU_DESC" property="menuDesc" jdbcType="VARCHAR" />
        <result column="MENU_STATUS" property="menuStatus" jdbcType="VARCHAR" />
        <result column="MENU_SORT" property="menuSort" jdbcType="DECIMAL" />
        <result column="CREATE_TIME" property="createTime" jdbcType="DATE" />
        <result column="MODIFY_TIME" property="modifyTime" jdbcType="DATE" />
        <result column="AVAILABLE_START_TIME" property="availableStartTime" jdbcType="DATE" />
        <result column="AVAILABLE_END_TIME" property="availableEndTime" jdbcType="DATE" />
    
        <collection column="{menuParent=MENU_ID,menuType=MENU_TYPE,userId=USER_ID}" property="subList"
                    ofType="com.bomc.enterprise.entry.SysMenu"
                    select="getMenuList">
        </collection>
    </resultMap>
    
    
    <select id="getMenuList" resultMap="SysMenu">
        select
        t.*,case t.menu_type when 'menu' then '按钮' when 'href' then '链接' else '菜单' end as menu_type1,
        case t.menu_status when 'YES' then '是' else '否' end as menu_status1,
        #{userId,jdbcType=VARCHAR} USER_ID
        from sys_menu t
        where
        1=1
        <if test="menuParent!=null and menuParent!=''">
            and t.menu_parent =#{menuParent,jdbcType=VARCHAR}
        </if>
        <choose>
            <when test="menuStatus!=null and menuStatus!=''">
                and t.menu_status=#{menuStatus,jdbcType=VARCHAR}
            </when>
            <otherwise>
                and t.menu_status='1'
            </otherwise>
        </choose>
        <if test="menuType!=null and menuType!=''">
            and t.menu_type = #{menuType,jdbcType=VARCHAR}
    
        </if>
        <if test="menuName!=null and menuName!=''">
            and t.menu_name like '%'||#{menuName,jdbcType=VARCHAR}||'%'
    
        </if>
        <if test="roleId!=null and roleId!=''">
            and t.menu_Id in (
              select t1.menu_Id from sys_role_menu t1
              where t1.role_id = #{roleId,jdbcType=VARCHAR}
            )
        </if>
        <if test="userId!=null and userId!=''">
            and t.menu_Id in (
                select t1.menu_Id from sys_role_menu t1
                where t1.role_id in(
                  select t2.role_id from sys_user_role t2
                  where t2.user_id = #{userId,jdbcType=VARCHAR}
                )
            )
        </if>
        order by t.menu_sort
    
    </select>

    上面例子我传入了三个参数,想要正常查询,就得在column中配置三个参数,虽然我的sql中还判断其他的参数,但实际没有用到的话就不必在column中配

    每次查询到父级后就会把查到结果中对应的字段值 匹配 配置的 参数名,一一对应的设置为下一次查询的参数值。

    这也就意味着你的参数必须存在于上一次的查询结果集中,但是对于菜单管理,需要传入userId 去查询菜单权限这种情况,菜单表中肯定没有userId这个字段,这就需要你在查询第一次的时候就手动加上这个字段:

    按理说应该在实体类和resultMap映射也添加这个字段才对,但我测试的是即使 实体类和resultMap映射中没有这个字段也可以正常使用。

    如果参数是常量似乎可以直接写,但是不能直接把#{参数}放到column中:

    column="{menuParent=MENU_ID,menuType=MENU_TYPE,userId='111'}" 

    总之多参数传入这么可以解决,暂时还没发现有啥正统的解决方法,其次关于是否分页有问题还没有测试,暂时先这样

    展开全文
  • 一、根据日期范围查询 如果数据库里的日期字段属性是date或者是datetime那么maper.xml中应该这样写: 其中<![CDATA[ ]]>:这是XML语法。在CDATA内部的所有内容都会被解析器忽略。如果文本包含了很的"<...
  • Mybatis多参数条件查询

    千次阅读 2019-01-03 20:42:34
    mybatis的多参数条件查询 我个人测试的有两种比较好用的方法,第一种是使用占位符标志,这种方式无脑通俗易懂,推荐使用,第二种是使用map集合来充当参数,使用Map集合的K作为参数传递在mapper.xml映射文件中。  ...
  • 解释:where条件比较时最好写在一行 否则查询失败 2、 条件查询 @Select(" <script> SELECT id," "p_t pT," + " WHERE " + "1+1"+ " and s = #{pa.s}"+ " != null\">and uid = #{pa.d} </if> ...
  • JPA 支持写sql语句查询 ...2这样获取查询方法里第一个参数、第二个参数,以此类推;或者是使用@Param(“name”)标识参数,然后使用 :name 获取。 mysql 的if函数,类似三目运算 if(sex=1, ‘男’ ...
  • 其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。 第二种方案 此方法采用Map传多参数. Dao层的函数方法 public User selectUser(Map paramMap); 对应的...
  • mysql where in 中参数查询

    千次阅读 2020-02-28 20:03:27
    mysql查询语句where条件in 正常情况需要查询的语句: select *from temp where id in ('1','2','3','4','5') 在实际过程中发现一直查不出数据,实际上能够查出数据,弄得一直很郁闷,找不出原因。 通过各终尝试...
  • Mybatis-plus带查询参数表关联

    千次阅读 2020-05-08 08:34:03
    Mybatis-plus带查询参数表关联 Mybatis-Plus缺省是不带表关联功能,表关联需要作用mapper.xml写SQL语句,或都在domain的mapper对象下使用@select注解写SQL语句,用后种方法根据自己的需要,花了一天时间学习...
  • mysql数据库各项参数查询

    千次阅读 2020-02-03 11:15:45
    queries per seconds 每秒钟查询数量 show global status like 'Question%'; Queries/seconds 2.TPS Tranaction per seconds TPS=(Com_commit+Com_rollback)/seconds show global status like 'Com_commit'; s...
  • sql sever 查询条件 where in 多参数

    千次阅读 2019-07-23 17:15:29
    select * from tb where charindex(s1 , ? ) 这样就可以传递个变量进入条件语句 ? 为你传递的变量,sql sever 是单引号。
  • 想用ParameterType=Map传入参数构造SQL进行查询 select bs.bus_id as bus_id,bs.arrive_time as up_time,b.start_station as start_station_id, b.end_station as end_station_id from bus b , bus_...
  • mybatis 关联查询 含有集合的嵌套查询 并传参数
  • mybatis collection 关联查询多参数

    千次阅读 2020-04-18 09:13:02
    mybatis collection 关联查询多参数 column="{evtId=id,businessType=businessType1}" 描述:evtId是关联查询参数,businessType也是。 id是resultMap的id,businessType1也是如此 <resultMap id=...
  • Solr专题(二)详解Solr查询参数

    千次阅读 2020-04-08 13:32:07
    进入Solr的admin界面,会有许多的查询参数供你使用,那我们一起来了解一下各个参数的具体使用方式。 二、参数一览 Solr查询参数 参数名 描述 示例 q 主要查询参数,以冒号分割,左边是字段...
  • 1、mapper文件中: List<Object> getXXXXX(@Param("taskId")String taskId,@Param("taskType...注意:在这里省略了很不必要的东西,不必介意,只需要看重点就好,如果有什么问题,可留言,我回及时回答的  
  • 错误如下: 这个是由于在执行sql的时候无法匹配sql语句的通配符造成的,有两种方式可以解决 第一种:在sql语句中通配符这样写,用0,1...第二种:在dao接口的方法中的参数前面加param注解: 两种方法选一就可以了。
  • 结论: restful风格的接口不支持参数 注:本文指的是通过json序列化参数的情况前置 解决方法: 1.封装对象 2.使用@PathVariable 3.改变序列化格式,不使用json,使用form
  • //最多有几个参数就写大 int index = 0; if (!login.equals("")) { sql += " and p.login like ? "; params[index] = login; index++; } if (!name.equals("")) { sql += " and p.name like ? "; ...
  • demo:新闻首页的不同分类的新闻列表描述:只有最新新闻不需要根据分类去查询,其他的分类下的新闻都需要添加查询条件cid,所以cid是一个可选参数,如何处理?1.定义一个空列表存放查询条件filter = []2.对参数做判断...
  • 在Mybatis中使用注解@参数查询

    千次阅读 2014-08-20 23:48:16
    最后一行,通过传入两个参数查询:对应下面的Map键值对。  @Select("SELECT COUNT(DISTINCT f.user_id) FROM wc_homework_log_see ws INNER JOIN \n" +  "(SELECT wu.user_id, wf.`family_user_id` FROM wc_...
  • 有时候我们在查询数据库时,需要以查询结果为查询条件进行关联查询。在mybatis 中通过 association 标签(一对一查询,collection 一对 查询) 实现延迟加载子查询 <association property="destName"
  • 判断存储过程查询条件参数为空

    千次阅读 2017-08-05 18:19:27
    假设列名为column_name,参数是param: (param is null or column_name = param)即可。 一开始我写了大篇的 if param is null then  ...... else ......  搞笑了,哈哈。
  • MySql中 where IN 中参数查询

    万次阅读 2018-10-11 13:44:44
    mysql查询语句where条件in 正常情况需要查询的语句: select *from temp where id in ('1','2','3','4','5') 在实际过程中发现一直查不出数据,实际上能够查出数据,弄得一直很郁闷,找不出原因。 通过各终...
  • Mybatis怎么在mapper中用参数

    千次阅读 2016-09-25 15:21:57
    原文地址:... How do I use multiple parameters in a mapper? Java reflection does not provide a way to know the name of a method parameter so MyBatis names th
  • mysql查询缓存参数配置

    千次阅读 2021-01-18 23:02:49
    使用mysql对数据检索时,为了提升查询性能,引入了缓存的配置,通过设置缓存相关参数,在一定范围内可以大大提升查询效率 举例来说,当同一条查询语句打到mysql服务器,如果配置了查询缓存,就会将这个结果集存放在...
  • SpringBoot jpa条件查询参数可能为空)语句

    万次阅读 多人点赞 2018-07-25 19:48:41
    工作的时候需求有搜索功能,有三个参数,但是网上找了很关于jpa条件查询的代码要么在调dao的时候用了大量if判断,那么需要写很多查询方法,要么说的不知所云,我结合jpa和mysql原语句研究了半天才弄出了这个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,316,081
精华内容 526,432
关键字:

多参数查询