学习笔记:黑马程序员JavaWeb开发教程(2024.11.9)
9.1 Mybatis-基础操作-环境准备
这里也没做,到时候写案例,如果需要环境配置什么的,可以看看这个
9.2 Mybatis-基础操作-删除
删除需要动态获取需要删除的id,使用方法传参,#{}的方式实现
在编写的delete方法中,是没有返回值的,但是实际上是有的,就是返回方法影响语句的条数,其他crud语句也是有一样的返回值(int类型),但是一般不需要返回值
9.3 Mybatis-基础操作-删除(预编译SQL)
预编译SQL,应该就是参数和语句分开发,不拼接在一起,一条一起发
为了提高效率,MySQL会将优化编译过的sql缓存起来,缓存就是一块内存区域,就是用来存储数据的,下次执行sql语句的时候,会先检查缓存,看缓存当中有没有编译好的sql语句,有则直接执行,没有则走流程
性能更高的原因是,预编译的sql语句是一样的,后面用的可以直接从缓存中获取
Sql注入攻击,解决sql注入问题是因为预编译时不管输入什么样的字符串,都会把这个字符串作为一个参数,会被转义后面的or ‘1’=’1’也没用了(感觉没太说明白)
在Mybatis中,#{}代表预编译
9.4 Mybatis-基础操作-新增
有多个参数时,可以考虑封装到一个对象中
属性名和字段名需要区分,不要写错了
9.5 Mybatis-基础操作-新增(主键返回)
情景,发现使用getId输出出来的是null,因此引出需要加上一个注解。实现中:useGenerated = true代表我们需要拿到生成的主键值;ketProperty = ‘id’代表我们获取到的主键最终会封装到emp对象的id属性中
9.6 Mybatis-基础操作-更新
主键一般是不变的,所以可以根据主键来完成更新
9.7 Mybatis-基础操作-查询(根据ID查询)
查询是有返回数据的,但是数据很多,可以直接封装到员工对象中
在测试过程中,出现了像deptId这样没有封装到的属性,原因是因为,实体类中的属性名和数据库表中的属性名不一致
解决方案一:给字段起别名,让别名与实体类一致
解决方案二:通过@results,@result注解手动映射封装
解决方案三:开启Mybatils的自动驼峰命名映射封装