3、Mybatis调用方法传参方式与返回结果类型

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>

猜你喜欢

转载自blog.csdn.net/m0_53294821/article/details/114530085