只傳遞一個參數
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(小數位)