只传递一个参数
1、在mapper文件中使用 #{参数名} 表示,此时参数名可随意变更。
<mapper namespace="dao.TeacherMapper">
<!--id:自定义的sql唯一标志:使用接口的方法名-->
<select id="getTeacherByID" resultType="bean.Teacher">
select * from teacher where id = #{id}
</select>
2、在接口方法中定义参数
public Teacher getTeacherByID(Integer id);
3、在测试代码中调用方法并传参
Teacher teacher = teacherMapper.getTeacherByID(1);
传递多个参数
1、接口定义方法
public Teacher getTeacherByIDAndName(@Param("id") Integer id, @Param("name") String name);
2、添加mapper文件
<select id="getTeacherByIDAndName" resultType="bean.Teacher">
select * from teacher where id = #{id} and name = #{name}
</select>
3、添加测试代码
@Test
public void testSearch2() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//生成session实例
try (SqlSession session = sqlSessionFactory.openSession()) {
//获取接口的实现
TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);
Teacher teacher = teacherMapper.getTeacherByIDAndName(1,"Jack");
System.out.println(teacher);
}
}
运行结果
使用map传递参数
1、定义接口方法:
public Teacher getTeacherByMap(Map<String,Object> map);
2、编写mapper文件
<select id="getTeacherByMap" resultType="bean.Teacher">
select * from teacher where id=#{id} and name=#{name}
</select>
3、编写测试代码
@Test
public void testSearch3() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//生成session实例
try (SqlSession session = sqlSessionFactory.openSession()) {
//获取接口的实现
TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("id",1);
map.put("name","Jack");
Teacher teacher = teacherMapper.getTeacherByMap(map);
System.out.println(teacher);
}
}
运行结果如下:
使用javabean(POJO)传递参数
1、定义接口方法
public void addTeacher(Teacher teacher);
2、编写mapper文件
<insert id="addTeacher" parameterType="bean.Teacher">
insert into teacher(`id`, `name`,`gender`)
values(#{id},#{name},#{gender})
</insert>
3、测试代码:
/*
接口式编程,实现插入操作
*/
@Test
public void testInsert() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//生成session实例
try (SqlSession session = sqlSessionFactory.openSession()) {
TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);
Teacher teacher = new Teacher(3, "Lucy", 'F');
teacherMapper.addTeacher(teacher);
session.commit(); //提交操作
}
}
使用TO(Transger Object)传递参数
略
${参数} 和#{参数}
如果使用${参数} 运行结果会直接取值(以预编译的方式将参数设置到sql中)
使用 #{参数} 运行结果会是一个?占位符 (可以防止sql注入)
何种场景使用${参数} ??分库分表排序等原生jdbc不支持占位符的地方
eg:select * from ${month}_salary order by ${name}
#{参数} 规定参数的一些规则
javaType
jdbcType:Oracle不支持null,需要特殊处理
mode(存储过程使用)
numericScale(小数位)