<mapper namespace="chapter2.mapper.RoleMapper"> public Role getRole(Long id); <select id="getRole" parameterType="long" resultType="Role"> id 的值getRole 就是接口RoleMapper中 定义的 getRole方法名 parameterType 就是getRole方法的参数类型 resultType 就是执行SQL语句后返回的结果,把结果 封装 成POJO类 Role 类型---这也是getRole方法的返回类型。而方法的参数 会传递给#{id}
几种传 多个参数 给SQL语句的方法:
一,通过Map对象传参数
RoleMapper中定义的findRoleByMap方法
public List<Role> findRoleByMap(Map<String, String> params);
<select id="findRoleByMap" parameterType="map" resultMap="roleMap"> select id,role_name,note from t_role where role_name like concat('%', #{roleName},'%') and note like concat('%',#{note},'%') </select>
当我们需要根据多个 参数 查找数据库时,且查找的结果也可能返回多条记录时,就使用上面的配置。
paramterType="map",传入一个map对象作为select语句的参数,其中map中的每个元素的key 对应 while子句中的#{roleName},#{note}
由于这里的while子句 只根据 两个参数 来查询,因此map的长度为2. 而map的value,则是 查询的条件的值。
Map<String, String> paramsMap = new HashMap<>(); paramsMap.put("roleName", "me");//value是要满足的条件值 while note = "me" paramsMap.put("note", "no");//Key与sql语句中的 #{note} #{roleName}一致 List<Role> result = roleMapper.findRoleByMap(paramsMap);
select id,role_name,note from t_role where role_name like concat('%', ?,'%') and note like concat('%',?,'%')
比如:select id,role_name,note from t_role where role_name like concat("me") and note like concat("no")
resultMap指明了返回的“结果”的形式:resultMap=roleMap。resultMap的定义如下:(可理解为:resultMap的key是 属性名或者字段名,而value则是 相应的 结果值)
<resultMap type="chapter2.pojo.Role" id="roleMap"> <id property="id" column="id"/><!-- primary key --> <result property="roleName" column="role_name"/><!-- 普通列的映射关系 --> <result property="note" column="note"/> </resultMap>
<id property="id" column="id" 表明 id 是 t_role表的主键,主键的列名是 "id"
<result property="roleName" colum="role_name"/> 表明:roleName是POJO类的属性名,"role_name"是数据库表t_role的列名,将二者对应起来。
二,使用参数注解的方式传递多个参数
或者使用更“易懂“的映射方法:----参数注解
RoleMapper接口里面定义的方法:
public List<Role> findRoleByAnnotation(@Param("roleName")String roleName, @Param("note")String note);
RoleMapper.xml配置文件里面的定义的SQL语句:这里就没有 paramterType 来定义查询的参数了
<select id="findRoleByAnnotation"resultMap="roleMap"> select id,role_name,note from t_role where role_name like concat('%', #{roleName},'%') and note like concat('%',#{note},'%') </select>
客户端 调用方法:这里,就可以不用HashMap封装多个待查询的参数了。
List<Role> res = roleMapper.findRoleByAnnotation("me", "no"); for (Role role2 : res) { System.out.println(role2); }
三,使用JAVA Bean对象传递参数:
RoleMapper.xml配置文件里面的定义的SQL语句: