mybatis聚合查询和模糊查询

本文详细介绍了在MyBatis中如何使用聚合查询获取最大值、最小值和平均值,并通过实例展示了如何利用模糊查询匹配特定条件的数据。文中涵盖了使用数组、List和Map集合进行查询的方法,以及在Mapper文件中配置对应SQL语句的技巧。

聚合查询

测试类中的代码为:
使用map集合

//聚合查询
    @Test
    public void test4(){
        UsersDao dao=new UsersDaoImpl();
        Map m=dao.jisuan();
        System.out.println(m.get("MAX"));
    }

输出查询的结果 .get("")

实现类中的代码为:

//聚合查询
    public Map jisuan(){
        SqlSession session=su.getsession();
        Map m= (Map) session.selectOne("jisuan");
        return m;
    }

selectOne查询结果为一条

mapper文件中的代码为:

<select id="jisuan" resultType="Map">
        SELECT MAX(studentno) MAX,MIN(studentno) MIN,AVG(studentno) AVG FROM students;
    </select>

返回的结果集为map,
resultType属性决定返回类型,
聚合查询的结果去别名方便取出

模糊查询

三种存放数据的方式

  1. 数组
  2. list集合
  3. map集合

使用数组

测试类中代码

 //使用数组查询用户
    @Test
     public void test7() {
        sessionUtil s=new sessionUtil();
        SqlSession session=s.getsession();
        UsersDao dao=session.getMapper(UsersDao.class);
        int[] ids = {1, 2, 3, 4};
        List<Users> users = dao.findarray(ids);
        System.out.println(users);
    }

省略接口实现类中代码的方式
getMapper(类名.class)

mapper中文件的代码为:

<select id="findarray"  resultType="Users">
        SELECT * FROM students WHERE studentno IN (<foreach collection="array" item="id"  separator=",">#{id}</foreach>)
    </select>

用 foreach对数组或者集合中的数据进行遍历
foreach属性的介绍,以下链接

https://blog.youkuaiyun.com/czd3355/article/details/75340080

使用list集合
测试类中的代码为:

 //使用List集合查找指定的id用户
    @Test
    public void test5(){

        sessionUtil s=new sessionUtil();
        SqlSession session=s.getsession();
        System.out.println(session);
        UsersDao dao=session.getMapper(UsersDao.class);
        //list存储需要查找的ids
        List ids=new ArrayList();
        ids.add(1);
        ids.add(3);
        ids.add(4);
        ids.add(5);
        List<Users> list=dao.findbyids(ids);
        for (Users users:list){
            System.out.println(users);
        }
    }

mapper文件的代码为:

<select id="findbyids" resultType="Users">
        SELECT * FROM students WHERE studentno IN <foreach collection="list" item="id" open="(" close=")" separator=",">#{id}</foreach>
    </select>

使用mapper集合

测试类中的代码为:

 //使用map集合模糊查询
    @Test
    public  void test6(){
        sessionUtil s=new sessionUtil();
        SqlSession session=s.getsession();
        UsersDao dao=session.getMapper(UsersDao.class);
        //使用map集合存放数据
        Map m=new HashMap();
        m.put("studentname","张");
        List<Users> list=dao.findidmap(m);
        System.out.println(list);
    }

mapper文件的代码:

<select id="findidmap" resultType="Users" ><!--parameterType="map",属性可添加-->
        SELECT * FROM students WHERE 1=1
        <if test="studentname!=null and studentname!=''"><!--且语句用and  而不是&&-->
            and  studentname like '%${studentname}%'
        </if>
    </select>
MyBatis中,可以使用XML配置文件来实现模糊查询。在XML映射文件中,可以使用两种方式定义参数进行模糊查询。 第一种方式是使用#定义参数。首先,在持久层接口中添加一个根据名字内容模糊查询的方法,方法名为`findByNameLike`,参数类型为`String`,返回类型为`List<User>`。然后,在XML映射文件中添加一个`select`标签,设置`id`为`findByNameLike`,`parameterType`为`string`,`resultType`为`com.mybatisstudy.pojo.User`,并在`select`标签内编写SQL语句,使用`#{name}`来引用参数。具体代码如下所示: ```xml <!-- 使用#定义参数 --> <select id="findByNameLike" parameterType="string" resultType="com.mybatisstudy.pojo.User"> select * from user where username like #{name} </select> ``` 第二种方式是使用$定义参数。在XML映射文件中,将`select`标签内的SQL语句修改为使用`${value}`来引用参数,并在持久层接口中的方法参数前不加`%`。具体代码如下所示: ```xml <!-- 使用$定义参数 --> <select id="findByNameLike" resultType="com.mybatisstudy.pojo.User" parameterType="string"> select * from user where username like '%${value}%' </select> ``` 以上是在XML映射文件中实现模糊查询的两种方式。你可以根据具体需求选择其中一种方式来实现模糊查询。 #### 引用[.reference_title] - *1* *2* *3* [Mybatis模糊查询——三种定义参数方法聚合查询、主键回填](https://blog.youkuaiyun.com/qq_53317005/article/details/129762660)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值