- 定义:MyBatis的本质是一种半自动的ORM框架,除了POJO和映射关系之外,还需要编写SQL语句
-
MyBatis 入参传值有3种方法:
-
使用map传递参数;虽然对于开发而言更加简单,但是维护人员不容易看懂。可读性差,导致可维护性和可扩展性差,杜绝使用;
-
使用注解传递参数;直观明了,当参数较少一般小于5个的时候,建议使用;
-
使用Java Bean的方式传递参数;当参数大于5个的时候,建议使用;
3.防止SQL注入向sql语句中传递的可变参数使用#{}
-
预编译 #{}:将传入的数据都当成一个字符串,会对自动传入的数据加一个单引号,能够很大程度防止sql注入;
-
传值 ${}:传入的数据直接显示生成在sql中,无法防止sql注入;
-
表名、选取的列是动态的,order by和in操作, 可以考虑使用$
4.MyBatis常用标签的规范使用
(1)if判断标签,一般用于where语句后面表示如果有这个参数条件就使用这个参数作为查询条件。
(2)where标签,一般和if标签一起使用,给SQL加上一个where的同时去掉第一个if里面的and,使用demo如下:
(3)set标签,一般在update的时候传入的值不为空就更新什么值,他会给update代码加上一个set,并且去掉最后一个update参数的逗号,使用demo如下:
(4)trim标签,这个标签里面常用的参数属性有:prefix在前面加元素,suffix在后面加元素,suffixOverrides把语句最后一个逗号干掉。使用demo如下:
前面讲到的where标签也可以使用trim标签来写。
(5)foreach标签,这个标签里面常用的属性有collection这个里面可以传list,也可以传数组array;open以(开头,close以)结尾,item传入便利的参数是什么,separator以逗号分隔便利参数。demo如下:
1)传数组
2)批量操作传list
里面还有2个insert标签的属性
useGeneratedKeys(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。上述批量插入我设置这个参数以后他可以在代码里面获取插入数据的id。
keyProperty(仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
4)其中批量插入还可以使用BATCH类型的excutor,批处理需要自己手动提交事务,可以自己设置多少条提交一次事务,在提交以后才会插入数据库。