Mybatis调用方法传参方式
方法一:命名参数
/*@Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),
作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,
一般在2=<参数数<=5时使用最佳。*/
//接口的方法
List<User> selectParam(@Param("myname") String name,
@Param("mypwd") String pwd);
<!--xml中的sql方法 -->
<select id="selectParam" resultType="User">
select * from user where name=#{
myname} and pwd=#{
mypwd};
</select>
方法二:对象参数
推荐使用这种
<!--1、多个参数,使用Java对象的属性值,作为参数实际值
使用对象语法:#{
属性名,JavaType=类型名,JDBC=数据类型} 最完整的,但是很少用,
JavaType指java中的属性数据类型.
JDBCType在数据库中的数据类型
例如:#{
paramName,javaType=java.lang.String,jdbcType=VARCHAR}
<select id="selectObject" resultType="User">
select * from user
where pwd=#{
paramName,javaType=java.lang.String,jdbcType=VARCHAR} or
name=#{
paramPwd,javaType=java.lang.String,jdbcType=VARCHAR}
</select>
2、我们使用的是简化方式[用的最多] #{
属性值},javaType,jdbcType的值mybatis反射能获取,不用提供
-->
<select id="selectObject" resultType="User">
select * from user where name=#{
paramName} or pwd=#{
paramPwd}
</select>
方式三:按位置
List<User> selectByid(String name,String pwd);
<select id="selectByid" resultType="User">
-- select * from user where name=#{
arg0} or pwd=#{
arg1} mybatis3.3之前使用
select * from user where name=#{
0} or pwd=#{
1} -- mybatis3.4之后使用
</select>
方式四:按Map传值
使用度高
//按照Map传递参数
List<User> selectMap(Map<String,Object> map);
<!-- 按照Map传递参数 -->
<select id="selectMap" resultType="User">
select * from user where name=#{
mapname} or pwd=#{
map.pwd}
</select>
Map<String,Object> map=new HashMap<String,Object>();
map.put("mapname","person");
map.put("mappwd","123456");
Mybatis返回结果类型
ResultType
1、返回对象
ViewData selectMapById(Integer id);
<select id="selectMapById" resultType="ViewData">
select id,name,pwd from user where id=#{
stuid}
</select>
public class ViewData {
private Integer id;
private String name;
private String pwd;
@Override
public String toString() {
return "ViewData{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
2、返回Map
列名是map的key,列值是map的value 2、最多只能返回一行
//返回Map 1、列名是map的key,列值是map的value 2、最多只能返回一行
Map<Object,Object> selectMapById(Integer id);
<select id="selectMapById" resultType="java.util.HashMap">
select id,name,pwd from user where id=#{
stuid}
</select>
返回结果为Map类型时,只能返回一行数据,不能返回多行。
ResultMap
可以自定义sql结果和java对象属性的映射关系,更灵活的把列值赋值给指定属性。常用在列名和Java对象属性名不一样的情况下
使用方法:
1、先定义resultMap,指定列名和属性的对应关系
2、在中把resultType替换为resultMap
//resultMap定义映射关系
List<User> selectAllUser();
<!--使用resultMap
1)先定义resultMap
id:自定义的名称,表示你定义的这个resultMap
type:java类型的全限定名称
2)在select标签,使用resultMap来引用1定义
-->
<resultMap id="StudentMap" type="com.example.entity.User">
<!--列名和Java属性之间的关系-->
<!--主解列,使用id标签
column:属性名
property:Java类型的属性名-->
<id column="id" property="id"></id><!--主键列-->
<!--非主键列,使用的是result-->
<result column="name" property="name"></result>
<result column="pwd" property="pwd"></result>
</resultMap>
<select id="selectAllUser" resultMap="StudentMap">
select id,name,pwd from user
</select>