一:MyBatis知识整理(1)
程序员文章站
2022-06-18 08:34:32
一:MyBatis的架构 1.mybatis配置SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。 mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。 2.通 ......
一:mybatis的架构
1.mybatis配置sqlmapconfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。 mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在sqlmapconfig.xml中加载。 2.通过mybatis环境等配置信息构造sqlsessionfactory即会话工厂 3.由会话工厂创建sqlsession即会话,操作数据库需要通过sqlsession进行。 4.mybatis底层自定义了executor执行器接口操作数据库, executor接口有两个实现,一个是基本执行器、一个是缓存执行器。 5.mapped statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。 mapper.xml文件中一个sql对应一个mapped statement对象,sql的id即是mapped statement的id。 6.mapped statement对sql执行输入参数进行定义,包括hashmap、基本类型、pojo, executor通过mapped statement在执行sql前将输入的java对象映射至sql中, 输入参数映射就是jdbc编程中对preparedstatement设置参数。 7.mapped statement对sql执行输出结果进行定义,包括hashmap、基本类型、pojo, executor通过mapped statement在执行sql后将输出结果映射至java对象中, 输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
二:dao开发:接口的动态代理方式(mapper接口动态代理)
mapper接口开发方法只需要程序员编写mapper接口(相当于dao接口),
由mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边dao接口实现类方法
mapper接口开发需要遵循以下规范: 接口路径,方法返回值类型,方法名,形参类型 - namespace,resulttype,sql的id,parametertype 1.mapper.xml文件中的namespace与mapper接口的类路径相同 2.mapper接口方法名和mapper.xml中定义的每个statement的id相同 3.mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parametertype的类型相同 4.mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resulttype的类型相同
三:sqlmapconfig.xml文件说明
sqlmapconfig.xml中配置的内容和顺序如下:
- 1.properties(属性):引用java属性文件中的配置信息
注意: mybatis 将按照下面的顺序来加载属性:
在 properties 元素体内定义的属性首先被读取。
然后会读取properties元素中resource或url加载的属性,它会覆盖已读取的同名属性
settings(全局配置参数) - 2.typealiases(类型别名)
别名 -- 映射类型
_int/_integer -- int
int/integer -- integer
typehandlers(类型处理器)
objectfactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionmanager(事务管理)
datasource(数据源) -
3.mappers(映射器)
<mapper resource=" " /> -- 适用于xml文件 使用相对于类路径的资源(现在的使用方式) 如:<mapper resource="sqlmap/user.xml" /> <mapper class=" " /> -- 适用于注解或xml文件 使用mapper接口类路径 如:<mapper class="cn.itcast.mybatis.mapper.usermapper"/> 注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中 <package name=""/> -- 适用于注解或xml文件 注册指定包下的所有mapper接口 如:<package name="cn.itcast.mybatis.mapper"/> 注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中
四:小结
1.#{}和${}
#{}表示一个占位符号,通过#{}可以实现preparedstatement向占位符中设置值,自动进行java类型和jdbc类型转换。 #{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parametertype传输单个简单类型值,#{}括号中可以是value或其它名称。 ${}表示拼接sql串,通过${}可以将parametertype 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parametertype传输单个简单类型值,${}括号中只能是value
2.parametertype和resulttype
parametertype:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中 resulttype:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resulttype指定类型的对象。 如果有多条数据,则分别进行映射,并把对象放到容器list中
3.selectone和selectlist
selectone查询一条记录,如果使用selectone查询多条记录则抛出异常; selectlist可以查询一条或多条记录
4.selectone和selectlist
动态代理对象调用sqlsession.selectone()和sqlsession.selectlist()是根据mapper接口方法的返回值决定, 如果返回list则调用selectlist方法,如果返回单个对象则调用selectone方法
5.namespace映射器名称空间
mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类, 使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性
上一篇: 玩转抖音攻略(抖音电脑直播教程)
下一篇: 这么实诚的商家很少见
推荐阅读
-
数据库的一些基本知识(1)------数据库引擎
-
数据库的一些基本知识(1)------数据库引擎
-
PHP/Javascript/CSS/jQuery常用知识大全详细整理第1/2页
-
Mybatis 最近知识总结(1)
-
Javascript入门学习第一篇 js基础第1/2页_基础知识
-
恒大威武!关于SQL的一些基础知识整理回顾_MySQL
-
svg矢量图标在html中的使用, (知识点:1.通过h5中的css实现点击变色,2.一个svg文件包含多个图标)
-
PHP/Javascript/CSS/jQuery常用知识大全详细整理第1/2页
-
复习C++基础知识-----“我的第一本C++”读书笔记1
-
Mybatis结果集和实体类映射的一个小知识点