我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MyBatis—利用MyBatis查询(查询所有,查询一行,条件查询)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MyBatis—利用MyBatis查询(查询所有,查询一行,条件查询)

文章目录

1、查询所有

基本步骤

定义mapper接口,编写接口方法
在这里插入图片描述
2.定义sql映射文件
创建一个和mapper接口相同的xml文件,放在相同包目录下面,然后编写sql语句
在这里插入图片描述
我是查询所有,所以sql语句和mysql查询所有一样,如果你想要查询特定字段,也可以自行定义。
在这里插入图片描述
3.编写MyBaits代码
编写代码的步骤(参考另一篇)

package com.mybatis.demo;import com.mybatis.mapper.StuMapper;import com.mybatis.pojo.Stu;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;import java.util.List;public class MyBatis003 {    public static void main(String[] args) throws Exception {        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        SqlSession sqlSession = sqlSessionFactory.openSession();        StuMapper stuMapper = sqlSession.getMapper(StuMapper.class);        List<Stu> stus = stuMapper.selectAll();        for (Stu stu:stus) {            System.out.println(stu);        }        sqlSession.close();    }}

查询结果,将数据库表stu里面所有信息都查询出来了
在这里插入图片描述

注意信息
当你的数据库字段名和你的定义的实体类属性名不同时,不能查询出不同的字段对应数据信息。假如我数据库名称是username,实体类属是userName,下面是解决三种方法。
方法一:在定义sql语句时起别名
在这里插入图片描述
方法二:定义sql片段,直接用sql标签引入sql语句,直接用include标签加上sql片段的ID名就可以找到对用的SQL语句。
在这里插入图片描述
方法三:使用resultMap标签,映射数据库字段名和属性名(最常用)
resultMap里面最常用的两个子标签,一个是result,它是映射普通字段名和属性名,还有一个是id子标签,它是映射主键和属性名。里面的column属性时数据库表的字段名,property是实体类的属性名。
在这里插入图片描述

2、查询详情(通过特定属性查询)

定义mapper接口,编写接口方法,这里的参数列表就是你想要查询的属性对应的全部信息。可以通过name属性查询该学生全部信息。
在这里插入图片描述
2.编写sql映射文件
创建一个和mapper接口相同的xml文件,放在相同包目录下面,然后编写sql语句
在这里插入图片描述
3.编写MyBaits代码

package com.mybatis.demo;import com.mybatis.mapper.StuMapper;import com.mybatis.pojo.Stu;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.InputStream;public class MyBatis004 {    public static void main(String[] args) throws IOException {        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        SqlSession sqlSession = sqlSessionFactory.openSession();        StuMapper stuMapper = sqlSession.getMapper(StuMapper.class);        Stu stu = stuMapper.selectByName("小赵");        System.out.println(stu);    }}

查询结果
在这里插入图片描述

注意细节
1.参数占位符的使用
参数占位符就是我上面的 name=#{name},一般有两种。一种就是#{},这个参数占位附可以防止sql注入,相当于name=?,还有一种是${},这个就不能防止sql注入了,因为它是直接把参数拼到后面,相当于name=name。
2.特殊字符处理
特殊字符就是=,>,<等,在xml中有的特殊字符会被xml文件识别,这时候就需要对特殊字符进行处理。一种方法就是使用转义字符,还有一种就是使用CDATA区
比如我要查询id小于18 的同学信息
在这里插入图片描述

3、多条件查询

以下案例都以在stu表查询小字开头的,住在上海,并且性别为男的同学

(1)接口参数列表三种表达方式

  1. 散装参数:散装参数需要用@Param把sql里面的占位符表示出来,好让对应的参数找到对应占位符。

    List selectByCondition(@Param("name")String name,@Param("adr")String adr,@Param("gender")String gender);
  2. 类封装参数:类封装参数需要在MyBatis程序中定义对应的参数内容,再传入方法。

    List selectByCondition(Stu stu);
  3. Map集合封装参数:要保证sql里面的参数名和Map集合中的键名保持一致。

    List selectByCondition(Map map);

下面不同实例我会用不同的参数列表类型。

(2)多条件查询

实现步骤‘
1.定义Mapper接口,编写对应方法
在这里插入图片描述

编写sql映射文件
在这里插入图片描述

编写MyBatis代码

package com.mybatis.demo;import com.mybatis.mapper.StuMapper;import com.mybatis.pojo.Stu;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.InputStream;import java.util.List;public class MyBatis005 {    public static void main(String[] args) throws IOException {        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        SqlSession sqlSession = sqlSessionFactory.openSession();        StuMapper stuMapper = sqlSession.getMapper(StuMapper.class);        List<Stu> stus = stuMapper.selectByCondition("小%", "上海", "男");        for (Stu stu:stus) {            System.out.println(stu);        }        sqlSession.close();    }}

运行结果
在这里插入图片描述

(3)动态Sql

什么是动态sql:动态sql就是sql语句随着用户输入的条件不同,对应生成的sql语句也会不同。比如在查询用户的时候,你可能只知道用户的姓名,也可能知道用户姓名,性别等。不同的输入对应sql语句是不同的。动态sql就可以解决这个问题。MyBatis提供了一些动态sql方法以及介绍,这里我就不一一介绍了。你可以去官网看对应语句以及用法。
在这里插入图片描述

(4)多条件动态查询

实现步骤
1.定义mapper接口,编写方法。(这里用类封装参数列表) 在这里插入图片描述
2.编写sql映射文件,这里用到了动态sql if语句,就是先判断有没有传入这个参数,如果有那就执行对应where条件,如果没有就不添加where条件到sql语句。
在这里插入图片描述
3.编写MyBatis代码
在编写代码时我用到的是类封装参数列表,所以在执行sql语句之前要封装好实体类。
在这里插入图片描述

package com.mybatis.demo;import com.mybatis.mapper.StuMapper;import com.mybatis.pojo.Stu;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.InputStream;import java.util.List;public class MyBatis006 {    public static void main(String[] args) throws IOException {        Stu stu = new Stu();        String name = "小%";        String adr = "上海";        String gender = "男";        stu.setName(name);        stu.setAdr(adr);        stu.setGender(gender);        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        SqlSession sqlSession = sqlSessionFactory.openSession();        StuMapper stuMapper = sqlSession.getMapper(StuMapper.class);        List<Stu> stus = stuMapper.selectByCondition(stu);        for (Stu s:stus             ) {            System.out.println(s);        }        sqlSession.close();    }}

运行结果
在这里插入图片描述
5.注意点
由于if条件里面的sql语句是直接拼接在总的sql语句上的,所以如果第一个if里面的text为空,那里面的sql语句是不会加上去的。以我写的为例,如果参数列表name为空,那总的sql语句就变成了select * from stu whereand adr in adr and gender = gender;显然不符合sql语句语法,会报错。
在这里插入图片描述
MyBatis提供了解决这个问题的方法,就是在if标签外面将where关键字替换成为一个where标签,然后里面每个sql语句都加一个and就好了。
在这里插入图片描述

(5)单条件动态查询

实现步骤
1.定义一个mapper接口,定义对应方法(这里使用的是map集合封装参数)
在这里插入图片描述
2.定义sql映射文件,单条件动态查询用到的是choose:when,otherwise,相当于java里面的Switch:case,default。当满足第一个when标签的test条件,就执行当前语句,不会再往下执行。when里面都不满足就执行otherwise里面的。
在这里插入图片描述
3.编写MyBatis代码
这里使用的是map集合封装参数,所以在执行sql之前要把参数列表封装到map集合里面。

在这里插入图片描述

package com.mybatis.demo;import com.mybatis.mapper.StuMapper;import com.mybatis.pojo.Stu;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.List;import java.util.Map;public class MyBatis007 {    public static void main(String[] args) throws IOException {        Map map = new HashMap<>();        String name = "小%";        String adr = "上海";        String gender = "男";        map.put("name",name);        map.put("adr",adr);        map.put("gender",gender);        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        SqlSession sqlSession = sqlSessionFactory.openSession();        StuMapper stuMapper = sqlSession.getMapper(StuMapper.class);        List<Stu> stus = stuMapper.selectByCondition(map);        for (Stu s:stus             ) {            System.out.println(s);        }        sqlSession.close();    }}

执行结果
看到这个执行结果你可能有点质疑,不是有限定地址在上海,性别为男的吗。其实第三步已经解释了,当满足一个when标签的条件后,后面的条件不会被传到sql语句。所以这里相当于只查找了小字开头的同学,这正是单条件的解释。
在这里插入图片描述

来源地址:https://blog.csdn.net/chenxingxingxing/article/details/123534864

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MyBatis—利用MyBatis查询(查询所有,查询一行,条件查询)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mybatis in 查询使用String做条件

在使用 mybaits 进行 in 查询时如果传入参数是List或者Array,则直接用foreach如果参数是String类型的使用in (${xxxx}),不进行编译,直接放进查询条件例如 String param = “1,2,3”;使用 in  (#{
mybatis in 查询使用String做条件
2021-11-17

mybatis 的 like 查询

mybatis 自动生成的 like 查询,需要自己给参数添加 %,因为 mybatis 不会自动添加%号的,这是 mybatis 为了提供最大的灵活性决定的,因为 mybatis 并不知道我是要在哪一个位置添加 %。从此我们可以举一反三,凡是类似这类的问题,
mybatis 的 like 查询
2021-03-18

MyBatis中怎么实现一对多查询和多对一查询

这篇“MyBatis中怎么实现一对多查询和多对一查询”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MyBatis中怎么实现一
2023-06-29

编程热搜

目录