Mybatis参数的传递

MyBatis的传参是怎么完成的:

传入参数 : 从java代码中把数据传入到mapper文件的xml中

/*
parameterType : 写在mapper文件中的一个属性 , 表示dao接口中方法的参数的数据类型
		值 : 是java的数据类型的全限定名称 , java.lang.Integer
			或者是mybatis定义的别名  int
resultType : 规定返回值的数据类型 
    	值 : 是java的数据类型的全限定名称
             或者是mybatis定义的别名
注意 : parameterType :不是强制的 , mybatis通过反射机制能够发现接口参数的数据类型
	所以可以没有 , 一般我们也不写

一个简单类型的参数 :

/*
简单类型 : 
	mybatis把java的基本数据类型 , 和String 都叫做简单数据类型 
在mapper中 , 文件获取简单数据类型的一个参数的值 , 使用 #{任意字符} 
	使用 #{}之后 , mybatis执行sql是使用jdbc中的PreparedStatement对象
	由mybatis执行下面的代码 
	1. mybatis创建 Connection , PreparedStatement 对象 
*/
String sql = "select * from student where id = ? ";
PreparedStatement pst = conn.preparedStatement(sql);
pst.setInt(1,1003);
   //2.执行sql封装为  resultType="org.sichen.domain.Student" 这个对象
ResultSet rs = ps.executeQuery();
Student student = null;
while(rs.next()){
    //从数据库中取表的行数据 , 存到一个java对象的属性中 
  	student = new Student();
    student.setId(rs.getInt("id"));
    student.setName(rs.getString("name"));
    student.setEmail(rs.getString("email"));
    student.setAge(rs.getInt("age"));
}
return student; //给了dao方法调用的返回值


//接口定义 : 
public Student findOne(int id);
<!--mapper中的定义-->
	<select id="findOne" resultType="org.sichen.domain.Student">
        select * from student where id = #{id};  <!--这个可以是任意的字符-->
    </select>
<!--(parameterType可以忽略不写)-->

多个参数 :

多个参数 : 使用 @Param :

@Param : 命名参数

//接口 : 
public List<Student> findTwo(@Param("myname") String name , @Param("myage") Integer age);

//使用@Param命名参数
@Param("参数名") String name , @Param("参数名") Integer age
<!--mapper文件中 :-->
    <select id="findTwo" resultType="org.sichen.domain.Student">
        select *
        from student
        where name = #{myname}
           or id = #{myid};
    </select>

多个参数 : 使用对象 :

使用java对象传递参数 , java的属性值就是SQL需要的参数值 , 每一个属性就是一个参数 ,

创建一个bean对象用来存储属性 QueryParam.java

这个类型是没有限制的 , 什么类型都可以

public class QueryParam {
    private String myname;
    private Integer myage;
    //提供get和set方法 
}
//接口 :
List<Student> findThree (QueryParam param);
<!--mapper文件中
        使用对象的语法 :
         完整语法 : #{属性名 , javaType=类型名称 , jdbcType=数据库类型 }
            例如 : #{myname , javaType=java.lang.String , jdbcType=VARCHAR}
         开发中一般使用的语法 :
            #{属性名} 其他两个值 , mybatis反射能够获取 , 不用提供
    -->
    <select id="findThree" resultType="org.sichen.domain.Student">
        select *
        from student
        where name = #{myname}
           or id = #{myage};
    </select>

多个参数 : 按位置 :(不常用)

语法 : 
#{arg0} , #{arg1} ,这种格式 
按照传递参数从左往右数的位置, 在后边加上下标

多个参数 : 使用Map: (不常用)

语法 : 
#{key的名称}

#和$的区别:

/*
# : 叫做占位符 , 告诉MyBatis使用实际的参数值替代 , 并使用 PrepareStatement对象执行sql	语句 , #{...}代替sql语句中的 ? 
	这样做更安全(避免sql注入) , 便捷 ,通常也是首选做法
	select * from student where id = ?;
	
$ : 字符串替换 ,告诉MyBatis使用$包含的字符串替换所在位置 , 使用Statement把SQL语句 和${}的内容连接起来 , 
主要用在替换表名 , 列名 , 不同列排序等操作 
	select * from student where id = 1001;

使用$替换列名.或表名

select * from ${传递的表名} where id = ?;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值