参数类型:
- 简单类型:引用时名称随便写
基本数据类型
基本数据类型的包装类型
String
- pojo对象:引用时写实体类的属性名
#{name},引用的是实体类User中的name属性
public class QueryVo {// 包含其他的pojoprivate User user;private Integer startIndex;private Integer pageSize;}
1.传递的多个参数
/**
* 多条件查询 */public ListfindUsers(Integer startIndex, Integer pageSize, String name);
parameterType:省略不配置
引入时: param1 ,param2,......
2.传递map
//获取sessionSqlSession session = sessionFactory.openSession();//通过getMapper方法获取某接口的动态代理类对象UserDao userDao = session.getMapper(UserDao.class);Mapmap = new HashMap<>();map.put("startIndex",2);map.put("pageSize",2);map.put("name","zhang");List userList = userDao.findUserByMap(map);
属性名自己指定
引用时引用属性名即可
返回值
<!-- resultMap最终还是要将结果映射到pojo上,type就是指定映射到哪一个pojo -->
<!-- id:设置ResultMap的id -->
<resultMap id="users" type="user">
<!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id -->
<!-- property:主键在pojo中的属性名 -->
<!-- column:主键在数据库中的列名 -->
<id property="id" column="id" />
根据id查询
<!--根据id查询-->
<!--parameterType:指定参数类型-->
<!--简单类型:基本数据类型&包装类型 String
如果参数是简单类型,引用时名称随便写-->
<!--根据id查询-->
select * from user where id = #{abc}
select * from user where id = #{id}
模糊查询
<!--
参数类型:pojo对象,引用实体类中的属性名
#{name},引用的是实体类中的name属性
-->
//第一种 //第二种
#{} 和${}
关于#{}:
1、#{}等同于 PreparedStatement 中的占位符?,会自动对传入的字符串数据加一对单引号,可以避免 Sql 注入。
比如
select * from user where username = #{username} , 传入的 username 为小张,那么最后打印出来的就是
select * from user where username = ‘小张’
2、#{}可以接收简单类型值或 Pojo 属性值。
如果 parameterType 传输单个简单类型值,#{}括号中可以是任意名称。
关于${}:
1、${}将传入的数据直接显示生成在 Sql 中,只是简单的拼接。
如:order by ${id},如果传入的值是 id,则解析成的 Sql 为 order by id。
如果上面的例子使用${},则成了 select * from user where username = 小张
2、${}可以接收简单类型值或 Pojo 属性值,
如果 parameterType 传输单个简单类型值,${}括号中只能是“value”这个字符串
user.setName("Rose");
"%"#{name}"%" Rose #{name} %Rose% ${name} '%Rose%' '%${name}%' Rose
"%"#{abc}"%" Rose
'%${value}%' Rose
如果传递的是简单类型参数,必须使用${value}
如果是pojo, 必须${属性名}
总结:
1、$方式一般用于传入数据库对象,例如传入表名、order by 的字段
2、一般能用#的就别用$.
增加用户
INSERT INTO user values (null,#{name},#{age})
<!--
selectKey: 查询键值 属性:order:在添加之前查询,还是之后查询 keyProperty: 对应pojo对象中的属性名 keyColumn: 对应数据库中某列 resultType: 返回值类型 select last_insert_id(): 是mysql数据库的一个函数,获取该表最后一次添加的自增的值 -->SELECT last_insert_id(); INSERT INTO user values (null,#{name},#{age})
sqlSession.insert("com.wqy.dao.UserDao.addUser", user);System.out.println(user.getId());
在执行插入操纵后,可以打印用户的id