第一模块:
课程名称:通过自动回复机器人学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标签库:
在html页面使用JSTL、EL表达式:
其实和现在的框架所支持的“模板引擎”是非常相似的!!!
心得1:
一张表就是一个list,每张表的每条记录,就是一个对象。
那么怎么在java中描述这种关系?
很简单:list+javaBean,eg:
解析: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
有官方的mybatis的核心配置文件,对其改一改,就成我们的了
在mybatis核心配置文件中,有“dataSource”这一个配置项,这里配置的就是原jdbc中的关于数据库的一些“代码”
将<dataSource>...</dataSource>配置好,其他不认识的都先注释掉再说
用结合了mybatis的代码去取代原使用JDBC的代码
2.得到mybatis的最核心对象:SqlSession
mybatis最核心的对象:SqlSession
SqlSession的作用:
在代码中如何得到SqlSession(其实就是写基于mybatis的数据库访问类):
分3步:
*通过(最核心)配置文件获取数据库连接相关信息
*通过配置信息构建SqISessionFactory
*通过SqlSessionFactory打开数据库会话(数据库会话其实就是一个 SqlSession)
*通过(核心)配置文件获取数据库连接相关信息
核心代码:
Reader reader =
*通过配置信息构建SqISessionFactory
核心代码:
*通过SqlSessionFactory打开数据库会话(数据库会话其实就是一个 SqlSession)
核心代码:
上面3步的整体代码:
使用mybatis写的数据库访问类
如此,访问数据库的类就写好了。
mybatis也就成功替换了JDBC,后面就是Dao层调用这个“数据库访问类”了
Dao层调用基于mybatis的数据库访问类:
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配置文件)
可以发现:自定义的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)。
<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>标签下的子标签:
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:
做完上面这一步,才是真的可以由dao层去调用“基于mybatis的数据访问类”去执行sql语句,查询数据库,返回结果集的操作!!!
解析:mybatis给sql语句传参数的实现
dao层调用sqlSession,执行需要的“User.xml”和传入User.xml中sql需要的参数。
User.xml对传入参数的处理:需要OGNL表达式的加持,用于sql语句的“条件拼接”。
eg:
OGNL是一个功能非常强大的表达式语言。
强大的体现:
1.能从java对象中取其属性值
2.能直接调用java对象的方法
eg:
“” 转译: ""
&& 转译: &&
mybatis中的占位符:#{java对象的属性名}
mybatis对#{java对象的属性名}的处理过程是:
mybatis遇到#{java对象的属性名},就会将#{java对象的属性名}替换成?,而且mybatis知道用什么值去填充这个?
注意:#{java对象的属性名}不是OGNL表达式,只是“java对象的属性名”取值方式和OGNL一样而已!
第四模块:
学习截图: