1、使用注解定义增删改查,分别用什么注解实现?
2、被@Select,@Update,@Delete,@Insert 注解的方法,要放在哪里?
3、在新增数据时,如果想要让id回存到对象中怎么办?
数据添加成功后,需要获取插入数据库数据的主键,
@Options(keyProperty = "id", useGeneratedKeys = true)
4、如果表中的字段名称和POJO中属性名称不一样,怎么去实现数据的映射?
三种方式
1,起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样。
手动结果映射:通过 @Results及@Result 进行手动结果映射。
@Results({@Result(column = "dept_id", property = "deptId"),
@Result(column = "create_time", property = "createTime")})
开启驼峰命名(推荐):如果字段名与属性名符合驼峰命名规则,
mybatis会自动通过驼峰命名规则映射。如果没有,在配置文件中设置
mybatis.configuration.map-underscore-to-camel-case=true
SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。
5、#{} 和 ${} 的区别是什么?
#{...}
执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值。
使用时机:参数传递,都使用#{…}
好处:性能更高,防止sql注入(转义敏感字体。安全)
${...}
拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题。
使用时机:如果对表名、列表进行动态设置时使用。
6、接口中的方法怎么设定参数,好让SQL语句中能够识别
@Param注解来指定SQL语句中的参数名。
方法的参数类型为POJO类型时,SQL语句中绑定参数时使用 #{POJO的属性名}
7、动态SQL中有哪些标签,各有什么作用
<if>:用于判断条件是否成立,使用test属性进行条件判断,如果条件为true,则拼接SQL。
<where> :where元素只会在子元素有内容的情况下才插入where子句。
而且会自动去除子句的开头的AND或OR。
<set>:动态地在行首插入SET关键字,并会删掉额外的逗号。(用在update语句中)
if要结合where或set使用
<foreach>属性介绍:批量删除,遍历
collection:集合名称
item:集合遍历出来的元素/项
separator:每一次遍历使用的分隔符
open:遍历开始前拼接的片段
close:遍历结束后拼接的片段
<sql>:定义可重用的 SQL 片段。
<include>:通过属性refid,指定包含的sql片段