提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、前言🚀🚀🚀
☀️
你先去读你的书 我也去看我的电影,
终有一天 我们会窝在一起,读同一本书 看同一部电影。
本文简介:本人是大二软件工程专业,java后端方向,学习路线:java基础->JDBC->Maven->MyBatis->SSM,通过做笔记分享到博客上的形式,激励自己学习,同时方便复习。由于水平为入门级别,如有错误,希望大佬们评论或私信斧正 Thanks♪(・ω・))ノ
二、MyBatis简介及使用详解:☀️☀️☀️
1.MyBatis简介
1.1 What(MyBatis是什么?)
MyBatis 是一款优秀的持久层框架,用于简化JDBC 开发。
理解:
只需要少量的工作便可以完成一个复杂的产品高效、规范、通用、可拓展。
1.2 Why(为什么要用MyBatis)
1.硬编码
注册驱动,获取连接
SQL 语句
2.操作繁琐
手动设置参数
手动封装结果集
分析:
一旦账号密码更改,就要改代码,意味着工作量大,就要重新去打包、重新去运行,意味着代码的维护性就比较差了。
1.3 How(MyBatis如何简化操作)
可以看到MyBatis直接通过配置文件将SQL语句就放在UserMapper.xml文件中。获取连接放在mybatis-config.xml核心配置文件中,而一行代码搞定了原先JDBC的手动设置参数、手动封装结果集的繁琐操作。
看一下MyBatis的市场占用率。(主流框架)
2. MyBatis快速入门
2.1 具体步骤
其中 编写 MyBatis 核心配置文件 -->替换连接信息 解决硬编码问题
编写 SQL 映射文件 -->统一管理sql语句,解决硬编码问题,这两个步骤是最关键的,其他复制即可。大大提高了后期的可维护性。
2.1.1 创建usr表,添加数据
2.1.2 创建模块,导入坐标
那如何在pom.xml中加mybatis坐标呢,去官网找,然后将坐标粘过去。
除了导mybatis依赖,还要导mysql驱动jar包、junit单元测试等坐标。而将来这些坐标我们都会找的地方放起来,然后直接复制粘贴即可(不用去记)
logback除了这三个坐标信息外,其实还需要一个配置文件,先把这个配置文件粘贴到对应的
resource中.
2.1.3 配置核心配置文件
这里还要写核心配置文件mybatis-config.xml,仍然是去官网找。
粘完之后需要注意:这里这些数据是需要改成我们自己数据库的信息.
然后这里还有个配置项(mappers),这个其实是用来指定当前这个SQL映射文件的路径。
2.1.4 编写SQL映射
SQL映射文件要怎么写呢?接着看官网:里边有对应的示例
这个Mapper命名有一定规定,如果是写Uers订单表那就叫UserMapper.xml,要写Order订单表,那就写OrderMapper.xml
这里有个名称空间(后面会讲是干嘛的)这里先随便给个名字test,这里resultTupe是返回一个类型,这里是User。
2.1.4 编码
这里写sqlSessionFactory不用记也不用背,直接去官网复制即可(三行代码)。有异常就抛出异常即可。
代码分析:
看一下这三行代码,第一行定义了一个配置文件的路径,我现在这个在resources的根目录下面,所以直接写文件名即可。第二行,Resources对象,这是Mybatis提供的这么一个资源加载的类,这个类里面有个静态方法(getResourcesAsStream)可以把字符串String传进来,然后返回一个字节输入流,将来通过new一个对象叫做SqlSessionFactoryBuilder的build方法,就可以返回一个SqlSessionFactory对象了。第一步就做完了。
第二步直接获取SqlSession对象,第三步返回一个List集合。
3. Mapper代理开发(主流开发)
3.1 What
3.2 步骤
为什么要用MyBatis代理开发
之前存在的问题:
刚才的代码是这样子的,但是我们看到执行sql这里,test.selectAll相当于把代码写死了,又存在了硬编码问题。而且这样写也很不方便,因为有很多的SQL语句有不同的id,将来还要看看不同的sql对应哪个id,如果有大量的sql的话就非常不方便。
而mapper代理是怎么写代码的呢,如下图:通过sqlSession.getMapper获得一个类,这个类将会返回一个UserMapper类型,而这个UserMapper其实是一个接口,这个接口会有很多的方法,这些方法会一一对应你文件配置的这些id名称。意味着这个接口中将来会有selectAll这个方法,获取该方法后,一执行就会返回个List集合。
第二种方法有很多优势,首先它不依赖于字符串字面值,会更安全一点;其次,如果你的 DE 有代码补全功解,那么代码补全可以帮你快速选择到映射好的 SQL 语句。
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下(什么意思呢?如下)
如果有很多要加载的sql映射文件,那么Mapper代理方式不管你存在多少个文件,就一行代码全部都加载出来。
4. MyBatis核心配置文件
这里transactionManage,这个操作将来会由Spring管理,将来这里的dataSource数据源的信息会被Spring所接管
这里是别名的作用,相当于给这个pojo包里面的所有实体类起了个别名(默认为类名),这里不区分大小写,不要带包的名称,非常方便。
意味着这里这个resultType返回类型可以直接写类名了。
5. 配置文件完成增删改查
5.1 查看详情
查看的SQL语句:
注意: 因为在xml文件中小于<符合是标签,所以会报错,这里改成<就表示是一个小于<符号
还有个快捷方式: CD
5.2 条件查询
5.2.1 多条件查询
多条件体现在如下:(这里是三个条件)
问题:1.条件表达式 ? 2.如何连接?
5.3 多条件动态查询
如何修改呢,其实加个if判断即可,判断用户是否输入账目密码。
这里可以看一下MyBatis官网:
如下,加个if标签,这里有个test属性,里面便是写逻辑表达式,然后名称要写对应的属性名。此时动态SQL便改完了。
运行成功,暂时没什么问题。
当只存放公司名称这个属性时,出现问题了:因为where后面直接跟and,语法错误了。
之所以出现where后跟and,是因为前面那三个判断,如果第一个条件如果不存在,第二个会跳到第一,故前面where后面就直接跟and了。
5.3.1 恒等式
这里where 1 = 1 故后面直接加and,但是这个方法比较笨,MyBatis早就帮你想好了,通过where标签。
5.3.2 where标签替换where关键字
它会看你判断条件只有一个(而且是第一个),故会把and自动去掉。
5.4 单条件动态查询
也可以把上述代码的otherwise标签去掉,改成在外面加个where标签。where标签是很智能的标签。
5.5 添加&&修改
5.5.1 添加
这里insert标签要注意,添加的是字段名,但下面#后要加的是实体类里面的属性(驼峰命名)
写完测试后,运行后打开数据库发现数据并没有增加,这是因为MyBatis的事务原因,它这里少了事务提交这一步。(autocommit to false 自动提交关闭了,说明开启了事务,后面Rolling back 事务回滚)
自动提交事务:
手动提交事务:
能否获得属性的ID
我们发现这样是获取不出来的,然后查看数据库里面的数据是有这个ID的。如果获取不出来就会出现很多问题:如订单跟订单项是关联的数据,一个订单里面可能会有很多订单项(意味着一个订单项对应着一个外键*来指向订单的 主键)
其实这个添加语句执行完后,ID是已经存在的了,那么在MyBatis中可以通过uesGeneratedKeys设置为true,并且设置keyProperty为属性名(这里即为ID)
改完运行后,发现ID便出来了。
5.5.2 修改
修改全部字段:
注意:这里就是需要写上一堆的if判断,是否为null,为null就不需要修改其值。
所以加上个set<>标签后非常灵活,想修改哪个属性就修改哪个属性。
右边为动态修改字段,更为灵活。
5.5 删除功能
5.5.1 删除一个
5.5.1 批量删除
使用@Param注解,改变map集合的默认key的名称
这里的collection=“array” 就可以改成"ids"。separator是分隔符,以逗号分隔。
6. MyBatis参数传递
这里的@Param名称要跟SQL语句占位符名称保持一致。
结论: 我们用起来都要用到@Param注解。
7. MyBatis注解方式完成增删改查
区别是:配置文件这一块是将SQL语句写到xml文件里面去,而注解其实就是将你的SQL语句写在注解里边。
Mybatis官方说:
接下来在这个User里面完成selectById的功能,之前写过对应的statement,现在把它注释掉。
在这个位置将会报找不到statement,但是我们这里给它加个注解(查询呢,就用select注解)
跟之前写SQL是一样的,但是这个地方写SQL没有提示,在xml写就有。
这里这些测试样例是跟之前完全一样,执行一下,发现正常运行。这样也就完成了注解的开发。
三、总结:🍓🍓🍓
碎碎念:
费时三天,终于把MyBatis学完了,接下来尽快赶spring和springMVC的进程,争取今明后三天肝个七八成,下周着手入门项目。奥利给!!!
一一2024/05/23