写点什么

MyBatis 条件查询

作者:猫九
  • 2023-07-11
    中国香港
  • 本文字数:3040 字

    阅读完需:约 10 分钟

MyBatis条件查询

什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

1.安装

如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:


<dependency>  <groupId>org.mybatis</groupId>  <artifactId>mybatis</artifactId>  <version>x.x.x</version></dependency>
复制代码

2.从 XML 中构建 SqlSessionFactory

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例


String resource = "org/mybatis/example/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
复制代码

3.从 SqlSessionFactory 中获取 SqlSession

既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如:


try (SqlSession session = sqlSessionFactory.openSession()) {  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);}
复制代码

查询

1.多条件查询

1.编写接口方法:Mapper 接口 2.编写 SQL 语句:SQL 映射文件 3.编写测试用例

1.散装参数:如果有多个参数,需要用 @Param("SQl 参数占位符名称")

/***条件查询


  • 参数接收

  • 1.散装参数:如果有多个参数,需要用 @Param("SQl 参数占位符名称")

  • 2.对象参数:对象的属性名称要和占位符的名称一致

  • 3.map 集合参数:SQL 参数名和 map 集合的参数名称对应上


*/


1.编写接口方法


/***条件查询* * 参数接收*   散装参数:如果有多个参数,需要用@Param("SQl参数占位符名称")*   对象参数*   map集合参数**/List<Brand> selectBycondition(@Param(status)int status,@Param("companyName")String companyName,@Param("brandName")String brandName);
复制代码


2.编写 SQL 语句


id:唯一标识type:映射的类型,支持别名--><resultMap id="brandResultMap" type="brand"><result column="brand_name" property="brandName"/>//column:表的别名<result column="company_name" property="companyName"/>//property:实体类的属性名</resultMap><select id="selectByCondition" resultMap="brandResultMap">select * from where     status=#{status}    and company_name like#{companyName}    and brand_name like #{brandName};</select>id:完成主键字段的映射result:完成一般字段的映射
复制代码


3.编写测试用例


@Test public void testselectBycondition(){//接收参数int status = 1;String companyName = "华为"String brandName = "华为"//处理参数companyName = "%" + companyName+"%";brandName = "%" + brandName+"%";//1.获取SqlSessionFactoryString resource = "org/mybatis/example/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//3.获取Mapper接口的代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法List<Brand> brands = brandMapper.selectByCondition(status,compantName,brandName)system.out.println(brands);//5.释放资源sqlSession.close();}
复制代码

2.对象参数

1.编写接口方法


List<Brand> selectByCondition(Brand brand);
复制代码


2.编写 SQL 语句


id:唯一标识type:映射的类型,支持别名--><resultMap id="brandResultMap" type="brand"><result column="brand_name" property="brandName"/>//column:表的别名<result column="company_name" property="companyName"/>//property:实体类的属性名</resultMap><select id="selectByCondition" resultMap="brandResultMap">select * from where     status=#{status}    and company_name like#{companyName}    and brand_name like #{brandName};</select>id:完成主键字段的映射result:完成一般字段的映射
复制代码


3.编写测试用例


@Test public void testselectBycondition(){//接收参数int status = 1;String companyName = "华为"String brandName = "华为"//处理参数companyName = "%" + companyName+"%";brandName = "%" + brandName+"%";//封装对象Brand brand = new Brand();brand.setStatus(status);brand.setCompanyName(companyName);brand.setBrandName(brandName);//1.获取SqlSessionFactoryString resource = "org/mybatis/example/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//3.获取Mapper接口的代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法List<Brand> brands = brandMapper.selectByCondition(brand)system.out.println(brands);//5.释放资源sqlSession.close();}
复制代码

3.map 集合参数

1.编写接口方法


List<Brand> selectByCondition(Map map);
复制代码


2.编写 SQL 语句


id:唯一标识type:映射的类型,支持别名--><resultMap id="brandResultMap" type="brand"><result column="brand_name" property="brandName"/>//column:表的别名<result column="company_name" property="companyName"/>//property:实体类的属性名</resultMap><select id="selectByCondition" resultMap="brandResultMap">select * from where     status=#{status}    and company_name like#{companyName}    and brand_name like #{brandName};</select>id:完成主键字段的映射result:完成一般字段的映射
复制代码


3.编写测试用例


@Test public void testselectBycondition(){//接收参数int status = 1;String companyName = "华为"String brandName = "华为"//处理参数companyName = "%" + companyName+"%";brandName = "%" + brandName+"%";//HashMapMap map = new HashMap();map.put("status",status);map.put("companyName",companyName)map.put("brandName",brandName)brand.setBrandName(brandName);//1.获取SqlSessionFactoryString resource = "org/mybatis/example/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//3.获取Mapper接口的代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法List<Brand> brands = brandMapper.selectByCondition(map)system.out.println(brands);//5.释放资源sqlSession.close();}
复制代码


用户头像

猫九

关注

还未添加个人签名 2023-07-05 加入

还未添加个人简介

评论

发布
暂无评论
MyBatis条件查询_猫九_InfoQ写作社区