
前言:上一章节我们介绍了Mybatis的入门,并完成了一个简单入门程序,这一章节,我们主要讲解Mybatis的基础操作,主要是数据的增删改查,重点掌握。
这里我们先解释一个新手入门时对mysql和mybatis了解不是很深入的问题。

类比理解:
在一个典型的Java Web应用中(如 Spring Boot + MyBatis + MySQL),数据流向是这样的:
UserService的方法,例如getUserById(1)。
UserService会调用UserMapper接口的对应方法。
UserMapper接口的配置(XML文件或注解),找到对应的SQL语句:SELECT * FROM user WHERE id = #{id}。
1 安全地设置到SQL语句中(防止SQL注入)。
user表,找到id=1的数据行。
ResultSet)。
User对象(属性名与列名匹配或按规则映射)。
User对象返回给应用程序层。
UserService拿到了User对象,继续后续业务逻辑。

其次就是我们在idea数据库中配置的项目数据源,mybatis@localhost,这里在数据库里添加的mybatis并不是一个数据库,
mybatis@localhost = 你的"数据库望远镜"
所以不要被名字迷惑,mybatis@localhost只是IDEA为了帮你更好地开发MyBatis项目而提供的一个开发辅助工具,不是MyBatis框架本身的一部分。
Mybatis的环境准备:
具体操作见上一篇的入门程序,一摸一样。
MyBatis的"复杂"是一种"聪明的复杂":
就像装修房子:
对于现代软件开发来说,MyBatis的这种"复杂"是值得的,它把混乱的JDBC操作变成了有组织日志输出 可以在application.properties中,打开mybatis的日志,并指定输出到控制台。 #指定mybatis输出日志的位置,输出控制台 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutlmpl的、可维护的代码结构。当你的项目从"个人小工具"成长为"企业级系统"时,你就会感谢MyBatis带来的秩序。
动态删除需求
接口类中
使用到了mybatis中的参数占位符#{}; 执行SQL时,会将#{}替换为?,生成预编译SQL,会自 动设置参数值。 使用时机:参数传递,都使用#{}
${} 拼接SQL。直接将参数拼接在SQL语句中,存在SQL注 入问题。 使用时机:如果对表名、列表进行动态设置时使用。

单元测试中:

日志输出 可以在application.properties中,打开mybatis的日志,并指定输出到控制台。 #指定mybatis输出日志的位置,输出控制台 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutlmpl
预编译SQL 优势 性能更高 更安全(防止SQL注入)
简单的理解预编译,普通的mysql执行时,就像是家里面炒菜,现炒现做,一步一步,不能跳步;
而预编译sql,就像是有一个炒菜模板,每次做饭都能直接用,大大提高了效率。
Console和MyBatis冲突吗? 不冲突,是互补关系! 开发阶段:用Console设计、测试SQL 编码阶段:把验证过的SQL写到MyBatisXML中.·运行阶段:MyBatis自动执行,Console用于监控
所以,Console不是多余的,而是MyBatis开发的好帮手,它们各司其职,共同帮助高效开发。
接口类:

单元测试类:

主键返回:
描述:在数据添加成功后,需要获取插入数据库数据的主键。 如:添加套餐数据时,还需要维护套餐菜品关系表数据。

更新:
接口类:

测试类:

接口类

测试类:

数据封装 实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。 如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。
解决方法:
1.给字段起别名,使得字段名和属性名一样。
2.手动映射封装,通过@Results

3.开启mybatis驼峰命名自动映射开关
mybatis.configuration.map-underscore-to-camel-case=true条件查询:
接口类

测试类:

改善
因为‘’里面不能有?,所以不能使用参数占位符,我们一开始修改成¥{},但是会有sql注入安全,之后我们采取cocat,一举两得。
