Mybatis学习第2节 -- 模糊查询之#和$的区别

先说结论, #是占位符,而$的行为是字符串拼接, 在参数是java的基本类型且只有一个参数的情况下,使用$时,只能用value作为参数传递

需求决定设计, 先在interface里面添加相应方法

public interface ShopMapper {

    Shop getShopById(Integer id);    Shop getShopByIdAlias(Integer id);

    Shop getShopByTitleContainDollar(String value);    Shop getShopByTitleContainSharp(String value);

然后编写mapper文件对应的查询语句

<select id="getShopByTitleContainSharp" resultMap="simpleResultMap" >    select * from tb_shop where `shop_name` LIKE #{value}</select>

<select id="getShopByTitleContainDollar"  resultMap="simpleResultMap" >    select * from tb_shop where `shop_name` LIKE "${value}"</select>

在测试类中进行测试

@Testpublic void testGetShopByTitleContainSharp() {    String template = "查询结果: %s";    SqlSession session = MyBatisUtil.getSqlSession();    ShopMapper mapper = session.getMapper(ShopMapper.class);    System.out.printf(template, mapper.getShopByTitleContainSharp("%ab%"));    session.close();}@Testpublic void testGetShopByTitleContainDollar() {    String template = "查询结果: %s";    SqlSession session = MyBatisUtil.getSqlSession();    ShopMapper mapper = session.getMapper(ShopMapper.class);    System.out.printf(template, mapper.getShopByTitleContainSharp("%黄人%"));    session.close();}

$方式拼接字符串

==> Preparing: select * from tb_shop where `shop_name` LIKE ? 
==> Parameters: %黄人%(String)
<== Columns: shop_id, owner_id, area_id, shop_category_id, shop_name, shop_desc, shop_addr, phone, shop_img, priority, create_time, last_edit_time, enable_status, advice
<== Row: 28, 1, 2, 22, 小黄人主题奶茶店, 不接受预订,请直接来店里进行消费, 位于东苑2号, 13810524086, /upload/images/item/shop/28/2017092601041469991.png, 50, 2017-09-26 01:04:13, 2017-09-26 01:04:13, 1, null
<== Total: 1

#方式特点

==> Preparing: select * from tb_shop where `shop_name` LIKE ? 
==> Parameters: %黄人%(String)
<== Columns: shop_id, owner_id, area_id, shop_category_id, shop_name, shop_desc, shop_addr, phone, shop_img, priority, create_time, last_edit_time, enable_status, advice
<== Row: 28, 1, 2, 22, 小黄人主题奶茶店, 不接受预订,请直接来店里进行消费, 位于东苑2号, 13810524086, /upload/images/item/shop/28/2017092601041469991.png, 50, 2017-09-26 01:04:13, 2017-09-26 01:04:13, 1, null
<== Total: 1

如果面对中文内容有错误谨记在连接url里面设置参数

jdbc:mysql://localhost:3306/oto?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

原文地址:https://www.cnblogs.com/litran/p/10543447.html

时间: 2024-07-31 23:26:01

Mybatis学习第2节 -- 模糊查询之#和$的区别的相关文章

Mybatis学习第19节 -- 嵌套查询一对多的配置

一对多和多对多是一样的. 而多对多是指 A对于B来说是一对多的关系, 同时B对于A来说也是一对多的关系, 互为一对多,即为多对多. 比如说一个标签下面有多篇文章,一篇文章也可能有多个标签 Shop实体类设计 List<Product> productList; Product实体类设计 public class Product implements Serializable{ Integer id; String name; String desc; String imgAddr; Strin

mybatis学习笔记(11)-多对多查询

mybatis学习笔记(11)-多对多查询 mybatis学习笔记11-多对多查询 示例 多对多查询总结 resultMap总结 本文实现多对多查询,查询用户及用户购买商品信息. 示例 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:orders.orderdetail.items sql SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdeta

mybatis学习笔记(11)-一对多查询

mybatis学习笔记(11)-一对多查询 mybatis学习笔记11-一对多查询 示例 小结 本文实现一对多查询,查询订单及订单明细的信息 示例 sql 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.item

mybatis中使用mysql的模糊查询字符串拼接(like)

方法一: <!-- 根据hid,hanme,grade,模糊查询医院信息--> <select id="getHospitalLike" resultType="com.hand.hand.domain.Hospital"> SELECT * FROM hospital where hid like '%'||#{selectword}||'%' or hname like '%'||#{selectword}||'%' or grade l

Mybatis学习总结四(关联查询)

一.一对一查询 实例:查询所有订单信息,关联查询下单用户信息. Method1:使用resultType,定义订单信息po类,此po类中包括了订单信息和用户信息. 1 public class OrdersCustom extends Orders { 2 3 private String username;// 用户名称 4 private String address;// 用户地址 5 get/set.... Mapper.xml <!-- 查询所有订单信息 --> <select

Mybatis学习——一对多关联表查询

1.实体类 1 public class Student { 2 private int id; 3 private String name; 4 } 5 public class Classes { 6 private int id; 7 private String name; 8 private Teacher teacher; 9 private List<Student> students; 10 } 2.映射文件 1 <?xml version="1.0"

Mybatis学习总结(九)——查询缓存

一.什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能.mybaits提供一级缓存和二级缓存. 1.一级缓存是sqlSession级别的缓存.在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap),用于存储缓存数据.不同的sqlSession之间的缓存区域(HashMap)是互不影响的. 2.二级缓存是mapper级别的缓存,多个sqlSession去操作同一个Mapper的sql语句,多个SqlSession可以公用二级缓存,二级缓存

MyBatis学习总结——实现关联表查询(转)

原文链接:孤傲苍狼 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TABLE class( 6 c_id INT PRIMARY KEY AUT

Mybatis学习第25节 -- 懒加载 积极与不积极

积极懒加载是指如果你访问一个对象的属性,Mybatis就会帮你把需要进步一查询的该属性或者其他属性在数据库中查询出来. 不积极懒加载是指,有这种必要的时候,采取进行必要的数据库检索 我看的教程中的Mybatis版本默认是积极的lazy加载, 而我实际用的Mybatis3.4.6实际上默认不积极的lazy加载. mybatis-config.xml文件 <settings> <!-- 打印查询语句 --> <setting name="logImpl" va