为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 【九月打卡】第15天...

【九月打卡】第15天 通过自动回复机器人学Mybatis---基础版

2022.09.19 23:14 32浏览

第一模块:

课程名称:通过自动回复机器人学Mybatis---基础版

章节名称:1-1 ~ 2-7

讲师姓名:源生活


第二模块:

内容概述:

1-1 ~ 2-7小节通过Jsp + Servlet + Jdbc实现了一个功能模块,这个模块并没有使用mybatis技术,通过这个模块可以很好的对比出在没有muybatis之前是如何使用java操作数据库的。


第三模块:

学习心得:

案例使用都是原生的技术:

JSP:html

JSTL: JSP标准标签库

EL: ${expression} 数据绑定

JS/JQUERY

Servlet

javaBean:实体类

JDBC---->mybatis

Mysql


原生的前后台开发,是使用JSTL标签库+EL表达式来将页面数据写活的。


eg:在html页面,引入JSTL标签库:

https://img4.sycdn.imooc.com/632884c30001105808220188.jpg


在html页面使用JSTL、EL表达式:

https://img1.sycdn.imooc.com/6328869700019c8306340258.jpg

其实和现在的框架所支持的“模板引擎”是非常相似的!!!


心得1:

一张表就是一个list,每张表的每条记录,就是一个对象。

那么怎么在java中描述这种关系?

很简单:list+javaBean,eg:

https://img4.sycdn.imooc.com/632884d20001582506750169.jpg


解析:List<Message> messageList = new ArrayList<Message>()

messageList 就代表 messag表。而每一个Message就代表一条表中记录

messageList.add(message), 如此messageList就成功装好了一张表的所有数据了


messageList是一个装数据的容器,在java中一般是用xxxList容器来表示装数据库表数据的容器


心得2:

String是常量,如果要经常对字符串进行操作,比如:在后面加字符串,减字符串等等

,这是考虑使用StringBuffer/StringBuild‘’


心得3:

代码重构:功能还是那样的功能,改变的只是代码的组织结构,通过代码重构, 来重新组织代码,也就是所谓的代码优化。最基本的优化就是代码分层了。

Vo

So

*Controller        前身是Servlet

*Service

*Dao(java操作数据库表层)  

Dao层关心的只有:

执行SQL语句

获取操作结果的封装信息

返回操作结果


所以:Dao层的需求就是:

1.对象能与数据库交互

2.能执行SQL语句


Dto(服务于CSD,  是Do的一个组合)

Do

其他层:

Utils(公用工具方法自定义层)

Enums(枚举自定义层)

Constant(常量自定义层)

Config(配置类自定义层) 装Spring工程配置文件中配置数据的盒子

Converter(业务类类型转换层)

Exception(项目异常自定义层)

ExceptionHandler(项目异常处理层)


在项目中使用mybatis:

maven引入mybatis的jar包坐标


使用:

1.修改mybatis核心配置文件

mybatis最核心配置文件:Configuration.xml

https://img1.sycdn.imooc.com/632886a50001d4cb01450154.jpg

有官方的mybatis的核心配置文件,对其改一改,就成我们的了


在mybatis核心配置文件中,有“dataSource”这一个配置项,这里配置的就是原jdbc中的关于数据库的一些“代码”

将<dataSource>...</dataSource>配置好,其他不认识的都先注释掉再说


用结合了mybatis的代码去取代原使用JDBC的代码


2.得到mybatis的最核心对象:SqlSession

mybatis最核心的对象:SqlSession

SqlSession的作用:

https://img4.sycdn.imooc.com/632886ad0001d71a03160140.jpg


在代码中如何得到SqlSession(其实就是写基于mybatis的数据库访问类):

分3步:

*通过(最核心)配置文件获取数据库连接相关信息

*通过配置信息构建SqISessionFactory

*通过SqlSessionFactory打开数据库会话(数据库会话其实就是一个 SqlSession


*通过(核心)配置文件获取数据库连接相关信息     

核心代码:

Reader reader = 

https://img3.sycdn.imooc.com/632884e3000149e506320049.jpg

https://img1.sycdn.imooc.com/632886ca0001cbf906650308.jpg


*通过配置信息构建SqISessionFactory

核心代码:

https://img1.sycdn.imooc.com/632885180001dd2707640055.jpg


*通过SqlSessionFactory打开数据库会话(数据库会话其实就是一个 SqlSession

核心代码:

https://img2.sycdn.imooc.com/632886d5000172ab07650058.jpg


上面3步的整体代码:

使用mybatis写的数据库访问类

https://img4.sycdn.imooc.com/6328851c00014c7208050351.jpg

如此,访问数据库的类就写好了。

mybatis也就成功替换了JDBC,后面就是Dao层调用这个“数据库访问类”了


Dao层调用基于mybatis的数据库访问类:

https://img1.sycdn.imooc.com/6328852700016d1807860381.jpg

mybatis和JDBC都是不依赖Web环境的,所以,直接一个main函数就可以调起mybatis写的数据库访问类(DBAccess)


mybatis比JDBC先进的地方在于:

sql语句与java代码进行了解耦;

jdbc依靠sql语句的拼接来实现条件查找,而mybatis则通过向SQL语句注入参数来实现条件查找。


mybatis的大部分工作都是在“配置文件”里,sql也是写在配置文件之中。

所以:mybatis的另一个“最核心配置文件”就出来了:User.xml。(用户自定义SQL配置文件

这个User.xml不是一个配置文件,而是对一系类自定义sql语句的配置文件统称。说白了就是给程序员写自定义sql的地方/接口。

eg:Message.xml (一个SQL配置文件

https://img1.sycdn.imooc.com/63288533000104d108050324.jpg

可以发现:自定义的SQL语句在“自定义sql配置文件中”会被标签 所包裹。而每个标签都会有一个id,这个id,在一个“自定义sql配置文件中”是唯一的(前提:要修改“自定义sql配置文件”的namespce的值),所以,一个id就对应着一条程序员自定义的sql语句,也就是:有标签id与索引sql语句。

类似于:js操作dom一样,只是:js变成了 java(指整合了mybatis的java),dom变成了被标签(取个名字:mybatis标签)包裹的sql语句。

mybatis标签和html标签一样,也是有:属性的,常用的属性有:parameterType(传入sql语句的参数的参数类型)、resultMap(sql查到的存放结果集的id)。

https://img1.sycdn.imooc.com/6328855600010f7807930629.jpg

<resultMap  type="实体类的‘全名称’"  id=“mybatis索引resultMap 的 id”>

......

</resultMap>


<select  id ="" parameterType="传给sql语句的参数的数据类型(java)"  resultMap=“存放sql结果集的resultMap的id”>

......

</select>


注意:mybatis中要索引一个标签都是依靠id,在mybatis的世界里是没有name这个玩意的。

另外:一个mapper(映射)中不同标签的id是没有影响的。

eg:在一个mappe中<resultMap>与<select>的id可以同名,也可以不同名。


继续解析<resultMap>标签下的子标签:

https://img4.sycdn.imooc.com/632886f100018ce507840178.jpg


jdbcType:其实就是java.sql.Types

eg:

数据库中的int,对应的java.sql.Types就是INTEGER,对应着往上填

数据库中的varchar,对应的java.sql.Types就是VARCHAR,对应着往上填

其他的对应关系,以api的方式处理


写完一个“User.xml ”(自定义sql配置文件)后,需要将这个“User.xml ”在mybatis最核心配置文件Configuration.xml中进行“注册”。

eg:

https://img3.sycdn.imooc.com/632886fe00013add07820288.jpg

做完上面这一步,才是真的可以由dao层去调用“基于mybatis的数据访问类”去执行sql语句,查询数据库,返回结果集的操作!!!

https://img4.sycdn.imooc.com/6328857000014fcd07570384.jpg


解析:mybatis给sql语句传参数的实现

dao层调用sqlSession,执行需要的“User.xml”和传入User.xml中sql需要的参数。

https://img2.sycdn.imooc.com/632887090001514c07600363.jpg


User.xml对传入参数的处理:需要OGNL表达式的加持,用于sql语句的“条件拼接”。

eg:

https://img1.sycdn.imooc.com/632885b50001a7c208100241.jpg


OGNL是一个功能非常强大的表达式语言。

强大的体现:

1.能从java对象中取其属性值

2.能直接调用java对象的方法

eg:

https://img1.sycdn.imooc.com/632885c5000176b208660111.jpg

“” 转译: &quot;&quot;

&&  转译: &amp;&amp;


mybatis中的占位符:#{java对象的属性名}

https://img1.sycdn.imooc.com/632885b500011dba08250104.jpg

mybatis对#{java对象的属性名}的处理过程是:

mybatis遇到#{java对象的属性名},就会将#{java对象的属性名}替换成?,而且mybatis知道用什么值去填充这个?


注意:#{java对象的属性名}不是OGNL表达式,只是“java对象的属性名”取值方式和OGNL一样而已!


第四模块:

学习截图:

https://img1.sycdn.imooc.com/632882c600018e7b08570622.jpg

点击查看更多内容
0人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
3
获赞与收藏
1

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

50篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

146篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消