(1)基 于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL 写在 XML 里,解除 sql 与程序代码的耦合,便于统一管理;提供 XML标签,支持编写动态 SQL 语句,并可重用。
(2)与 JDBC 相比,减少了 50%以上的代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连接;
(3)很好的与各种数据库兼容(因为 MyBatis 使用 JDBC 来连接数据库,所以只要JDBC 支持的数据库 MyBatis 都支持)。
(4)能够与 Spring 很好的集成;
-
mapper层
其中的方法语句时直接对数据库中的数据进行操作的,mapper层的方法在mybatis中与 .xml文件一一对应
-
xml层
二、 获取参数值select * from user column是数据库中的字段
property是要映射成的实体类中的字段
jdbcType是字段类型
- #{} 和 ${}
${}的本质是字符串拼接,#{}的本质是占位符赋值
第一种${},采用sql拼接,不能防止sql注入
第二种#{},采用预编译,防止sql注入,传入数据都会加引号‘,作为参数不作为指令去执行
传入"熊大" ==>处理后"熊大" 作为一个参数来执行
- 说明
三、CRUD
- 不论是单个参数,还是多个参数,一律都建议使用注解@Param("key"),
- xml取#{key}
- 能用 #{} 的地方就用 #{},不用或少用 ${}
- $符号 =》 sql注入
- 表名作参数时,必须用 ${}。如:select * from ${tableName}
- order by 时,必须用 ${}。如:select * from t_user order by ${columnName}
- 使用 ${} 时,要注意何时加或不加单引号
- 批量插入 => foreach
insert into student (name, img, sex, create_time) values ( #{student.name,jdbcType=VARCHAR}, #{student.img,jdbcType=VARCHAR}, #{student.sex,jdbcType=INTEGER}, #{student.createTime,jdbcType=TIMESTAMP} )
int insert(@Param("studentList") List studentList);
- 批量删除
delete from student where id in #{item}
int delete(@Param("idList") Integer[] idList);
- 动态sql
-
-- 标签
-
用
-
标签
update student where id = #{student.id,jdbcType=BIGINT} name = #{student.name,jdbcType=VARCHAR}, img = #{student.img,jdbcType=VARCHAR}, sex = #{student.sex,jdbcType=INTEGER}, create_time = #{student.createTime,jdbcType=TIMESTAMP},
标签 if里面不用加and
、 和 标签 相当于java中的if.....else if.....else
标签是这个标签组合当中的父标签和标签都在标签内部。
标签就相当于是我们的 if 和 elseif
标签相当于是我们的 else



