上一篇我们介绍了怎么集成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();
}
本章就到这里了,后续继续更新…