代码如下
Flower flower = session.selectOne("com.leesun.mapper.FlowerMapper.selById",1);
System.out.println(flower);
mapper.xml文件配置如下
使用索引,从 0 开始 #{0}表示第一个参数,也可以使用#{param1}第一个参数,如果只有一个参数(基本数据类型或 String),mybatis对#{}里面内容没有要求只要写内容即可.
得到的结果如下
DEBUG 2018-09-18 07:02:31 第139行 ==> Preparing: select * from flower where id=?
DEBUG 2018-09-18 07:02:31 第139行 ==> Parameters: 1(Integer)
DEBUG 2018-09-18 07:02:31 第139行 <== Total: 1
id:1 name:樱花 price:2.5 production:武汉
可以看到用#{}得到的是占位符,而改为${}后,需要传入对象,则代码改为如下:
Flower f = new Flower();
f.setId(1);
Flower flower = session.selectOne("com.leesun.mapper.FlowerMapper.selById",f);
System.out.println(flower);
mapper.xml文件
而结果变为:
DEBUG 2018-09-18 07:10:36 第139行 ==> Preparing: select * from flower where id=1
DEBUG 2018-09-18 07:10:36 第139行 ==> Parameters:
DEBUG 2018-09-18 07:10:37 第139行 <== Total: 1
id:1 name:樱花 price:2.5 production:武汉
可以看到${}是直接从对象flower中提取{}内的id参数(id参数要有get方法)
#{} 获取参数的内容支持 索引获取,param1 获取指定位置参数, 并且 SQL 使用?占位符,若传入 doller符{} 默认找doller符{内容},内容的 get/set 方法
Map map = new HashMap<>();
map.put("id", 1);
map.put("id2", 2);
List list = session.selectList("com.leesun.mapper.FlowerMapper.selById2",map);
xml代码如下
结果如下
DEBUG 2018-09-18 07:26:02 第139行 ==> Preparing: select * from flower where id=? or id=?
DEBUG 2018-09-18 07:26:02 第139行 ==> Parameters: 1(Integer), 2(Integer)
DEBUG 2018-09-18 07:26:02 第139行 <== Total: 2
[id:1 name:樱花 price:2.5 production:武汉, id:2 name:荷花 price:3.4 production:济南]
当然,如果改成${}也可以,结果相同,输出格式变为:
DEBUG 2018-09-18 07:28:46 第139行 ==> Preparing: select * from flower where id=1 or id=2