MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
mybatis中"#"和"$"的区别(小提示)
动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}。
#{} 和 ${} 在预编译中的处理是不一样的。#{} 在预处理时,会把参数部分用一个占位符 ? 代替,变成如下的 sql 语句:
select * from user where name = ?;
而 ${} 则只是简单的字符串替换,在动态解析阶段,该 sql 语句会被解析成
select * from user where name = 'sakura';
以上,#{} 的参数替换是发生在 DBMS 中,而 ${} 则发生在动态解析过程中。
那么,在使用过程中我们应该使用哪种方式呢?
答案是,优先使用 #{}。因为 ${} 会导致 sql 注入的问题
一、mybatis 简单注解
/**
* 通过对象新增
* @param student
* @return
*/
@Insert("insert into student(s_id, s_name, age) values (#{studentID, jdbcType=VARCHAR}, #{studentName, jdbcType=VARCHAR}, #{age, jdbcType=INTEGER})")
int insertByObject(Student student);
/**
* 通过map新增
* @param map
* @return
*/
@Insert("insert into student(s_id, s_name, age) values (#{studentID, jdbcType=VARCHAR}, #{studentName, jdbcType=VARCHAR}, #{age, jdbcType=INTEGER})")
int insertByMap(Map
/**
* 通过编号查询
* @param studentID
* @return
*/
@Select("select * from student where student_id= #{studentID}")
@Results({
@Result(column = "s_id", property = "studentID"),
@Result(column = "s_name", property = "studentName"),
@Result(column = "age", property = "age")
})
Student findByStudentID(String studentID);
/**
* 通过姓名查询
* @param studentName
* @return
*/
@Select("select * from student where student_name = #{studentName}")
@Results({
@Result(column = "s_id", property = "studentID"),
@Result(column = "s_name", property = "studentName"),
@Result(column = "age", property = "age")
})
List
/**
* 通过编码删除
* @param studentID
* @return
*/
@Delete("delete from student where s_id = #{studentID}")
int deleteByStudentID(String studentID);
/**
* 通过对象修改
* @param student
* @return
*/
@Update("update student set student_name = #{studentName}, age = #{age} where s_id = #{studentID}")
int updateByObject(Student student);
/**
* 通过编码修改名字
* 传多个参数时必须使用@Param("")
* @param studentName
* @param studentID
* @return
*/
@Update("update student set student_name = #{studentName} where s_id = #{studentID}")
int updateStudentNameByStudentID(@Param("studentName") String studentName, @Param("studentID") String StudentID);