MyBatis的学习(三):深入理解MyBatis的参数
动态代理:使用SqlSession,getMapper(dao接口.class)获取这个dao接口的对象。
传入参数:从java代码中把数据传入到mapper文件的sql语句中。
parameterType参数理解
写在mapper文件中的一个属性,表示dao接口中方法的参数的数据类型。
例如;StudentDao接口
public Student selectStudentById(Integer id)
测试:
- 编写dao接口查询单个学生
/**
* 查询单个学生
* @param id 学生id
* @return 返回一个学生
*/
public Student selectStudent(Integer id);
- 编写mapper文件
<!--
parameterType:dao接口中的方法参数的数据类型
它的值是java数据类型的全限定名称,或者是mybatis定义的别名
例如:parameterType = "java.lang.Integer"
parameterType = "int"
注意:parameterType不是强制的,mybatis可以通过反射机制能够发现接口的参数类型。
所以可以没有。一般我们也不写。
-->
<select id="selectStudent" parameterType="java.lang.Integer" resultType="com.liang.entity.Student">
select id,name,email,age from student where id = #{id}
</select>
- 编写测试类
package com.liang;
import com.liang.dao.StudentDao;
import com.liang.entity.Student;
import com.liang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
/**
* @author liang
* @date 编写日期: 2022/3/18 16:12
*/
public class TestParameter {
@Test
public void testParameterType(){
//获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//动态代理获取dao的实体类
StudentDao dao = sqlSession.getMapper(StudentDao.class);
//执行语句
Student student = null;
student = dao.selectStudent(1005);
//输出结果
if(student!=null){
System.out.println("查询到的学生是:"+student);
}
sqlSession.close();
}
}
- 测试成功
)]
传参类型
一个简单类型参数
mybatis把java的基本数据类型和String类型的参数都叫做简单类型。
在mapper文件中获取简单类型参数的一个值,使用**#{任意字符}**。
select id,name,email,age from student where id = #{id}
使用#{ }之后,mybatis执行sql语句是使用jdbc中的prePareStatement对象。
由mybatis执行下面的代码:
-
mybatis创建Connection,prepareStatement对象
String sql = "select id,name,email,age from student where id = ? "; prepareStatement pst = con.prepareStatement(sql); pst.SetInt(1,1001);
-
执行sql封装resultType="com.liang.entity.Student"这个对象
ResultSet rs = ps.executeQuery(); while(rs.next()){ //从数据库表中取出一行数据,存到一个java对象是属性中 }
使用@param传多个参数
当Dao接口方法有多个参数,需要通过名称使用参数,在方法形参面前加入@Param(“自定义参数名称”),mapper文件中使用#{自定义名称}
- 举例子:根据用户名或年龄查找学生
- 编写Dao接口
/**
* 根据姓名年龄查询
* @param name 姓名
* @param age 年龄
* @return
*/
public List<Student> selectMulParam(@Param(&#