初识MyBatis(二)之简单的查询、排序、模糊查询

5 篇文章 0 订阅
3 篇文章 0 订阅

上一篇我们介绍了怎么集成MyBatis,连接数据库、提供了一个简单的查询语句,进行了简单的单元测试。下面我们继续进行一些查询操作,例如:查询名字、排序、模糊查询等等。

查询名字:
首先需要在BlogMapper.xml中对应写上我们的查询语句:

 <!-- 查询 名字-->
    <select id="selectBlogName" parameterType="String" resultMap="blogResultMap">
      select * from blogtest where name = #{name}
</select>

然后在接口类BlogMapper中写上对应的接口:

 Blog selectBlogName(String name);

在我们的单元测试类中对应写一个测试方法:

/**
     * 查询名称
     */
    @Test
    public void testSelectBlogName(){
        SqlSession sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
        BlogMapper mapper = sqlSessionFactory.getMapper(BlogMapper.class);
        Blog blog = mapper.selectBlogName("阿妹");
        System.out.println("打印数据="+blog.toString());
        sqlSessionFactory.close();
    }

我们看一下运行结果:
在这里插入图片描述
下面是数据库中的数据:
在这里插入图片描述
模糊查询:
注意:这里说明一些,模糊查询的语句中我们可以使用#也可以使用$,但是他们有什么区别那,该怎么使用那。

 #和$的区别
  #是占位符?,$是字符串拼接,因此使用$的时候,如果参数是字符串类型,那么要使用引号‘’
   尽量使用#,不适用%
   当参数表示表明或列名的时候,只能使用$
   在使用中#的使用方式 #{},$的使用方式 ‘${value}’, #后面的空号中我们可以随便写,但是$括号中必须写value,这是强制的

BlogMapper.xml中对应语句

  <!-- 模糊查询1   #-->
    <select id="selectBlogNameLike" parameterType="String" resultMap="blogResultMap">
      select * from blogtest where name like #{title}
--       SELECT * FROM blogtest WHERE `name` LIKE '%f%'
</select>

接口中的对应方法:

List<Blog> selectBlogNameLike(String name);

测试类中的调用方法:

/**
     * 模糊查询 #的使用方式 #{}
     * 注意: 想要模糊查询的时候必须是两个百分号中间是变量,没有百分号是指定查询
     */
    @Test
    public void selectBlogNameLike(){
        SqlSession sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
        BlogMapper mapper = sqlSessionFactory.getMapper(BlogMapper.class);
        List<Blog> blogs = mapper.selectBlogNameLike("%f%");
        System.out.println("打印数据="+blogs.toString());
        sqlSessionFactory.close();
    }

另一个字符的只用BlogMapper.xml中对应语句:

<!-- 模糊查询1 $ 只能在括号中使用 value-->
    <select id="selectBlogNameLike2" parameterType="String" resultMap="blogResultMap">
      select * from blogtest where name like '${value}'
--       不区分大小写搜索
--       select * from blogtest where lower (name) like lower ('${value}')
   </select>

接口中的方法:

List<Blog> selectBlogNameLike2(String name);

测试类中的方法:

 /**
     * 模糊查询 $的使用方式 ‘${value}’
     * 注意: 想要模糊查询的时候必须是两个百分号中间是变量,没有百分号是指定查询
     *        $[]两边必须加单引号, 百分号也可以写在里面 ‘%${}%’
     *        $ 使用有风险,可能发生sql注入
     */
    @Test
    public void selectBlogNameLike2(){
        SqlSession sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
        BlogMapper mapper = sqlSessionFactory.getMapper(BlogMapper.class);
        List<Blog> blogs = mapper.selectBlogNameLike2("%f%");
        System.out.println("打印数据="+blogs.toString());
        sqlSessionFactory.close();
    }

结果我就不展示了。

排序
先来一个字母的排序BlogMapper.xml中对应语句:

<!-- 查询排序  排序必须使用 ${value} -->
    <select id="selectBlogNameOrderBy" parameterType="String" resultMap="blogResultMap">
      select * from blogtest order by ${value}
--       SELECT * FROM blogtest ORDER BY `name`
</select>

接口中的方法:

List<Blog> selectBlogNameOrderBy(String name);

测试类中的方法:

/**
     * 查询按名称排序 字母排序 排序必须使用 ${value}
     */
    @Test
    public void selectBlogNameOrderBy(){
        SqlSession sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
        BlogMapper mapper = sqlSessionFactory.getMapper(BlogMapper.class);
        List<Blog> blogs = mapper.selectBlogNameOrderBy("name");
        System.out.println("打印数据="+blogs.toString());
        sqlSessionFactory.close();
    }

中文测试应该怎么做:

 <!-- 查询中文排序  排序必须使用 ${value} -->
    <select id="selectBlogNameOrderByZH" parameterType="String" resultMap="blogResultMap">
      select * from blogtest order by convert (${value} using gbk)
</select>

接口中的方法:

List<Blog> selectBlogNameOrderByZH(String name);

测试类中的方法:

 /**
     * 查询按名称排序 中文排序 排序必须使用 ${value}
     */
    @Test
    public void selectBlogNameOrderByZH(){
        SqlSession sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
        BlogMapper mapper = sqlSessionFactory.getMapper(BlogMapper.class);
        List<Blog> blogs = mapper.selectBlogNameOrderByZH("name");
        System.out.println("打印数据="+blogs.toString());
        sqlSessionFactory.close();
    }

本章就到这里了,后续继续更新…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值