MyBatis简单使用和入门理解(4)

<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语句:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9e13ef7fd50a4256e36217c7f5b18702.html