1.什么是 MyBatis?
是对jdbc的轻量级封装,是一个orm对象关系映射框架,(通过xml或注解的方式,把实体类与表之间做映射关系),目的是为了
简化开发,达到以OOP的方式来操作数据库(不写sql)。
dbutils是一个jdbc组件;
mybatis–>mybatis-plus(大大提高开发效率)
mybatis是一个半自动的orm框架,还要写sql.
2.使用mybatis
2.1 安装环境:
mybatis的核心jar包;数据库驱动包
2.2 创建xml文件:
xml配置文件mybatis-config.xml,一般这个文件放src根目录
xml映射文件blog-mapper.xml,这个文件放dao包下;
把映射文件放在配置文件中;
2.3 从xml文件构建SqlsessionFactory对象
该对象的创建,需要依赖数据源;需要映射文件信息
2.4 获取 SqlSession
2.5 执行操作
3.核心对象:
SqlSessionFactoryBuilder:
用来加载文件,创建Facotyr,用完即销毁。
SqlSessionFactory:
该对象全局唯一。
openSession()
SqlSession:
执行数据库操作,openSession创建对象,执行操作,操作完成后关闭对象。
Object obj = selectOne(“映射文件的namespace.标签id”,查询参数)
List selectList(“namesapce.id”,查询参数)
T t = getMapper(Class clz)
4.mapper映射文件中的注意点:
namespace:必须唯一,不同文件不能同名的namesapce
查询语句的标签必须是select,id在同一个mapper文件中不能同名,paramterType:表示参数类型;resultType:返回值类型,表示对数据库表单行记录的封装类型。
在sql语句中获取参数的语法:#{简单类型的随便写,对象类型的写成员变量名,}
5.SqlSession的getMapper方法:
映射文件的namespace必须是接口的全名称
id必须是接口中的方法名
6.如何多参数传递
5.1 封装实体
5.2 封装map,适合于多参数不属于同一个实体
5.3 加注解@Param,加到mapper接口的方法形参上。
7.别名配置:别名忽略大小写。注意类名绝对不能重复,mybatis提供了常见的简单类型的内建别名。Map-map,String-string,Date-date
<typeAliases>
<package name="com.javasm"></package>
</typeAliases>
8.settings标签:
在运行过程中把sql语句打印。
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
mybatis支持驼峰映射,把下划线分割的字段映射成实体类驼峰命名
<setting name="mapUnderscoreToCamelCase" value="true"></setting>
9.跟踪源码:
XMLConfigBuilder:xml配置文件解析对象,构建器build模式,用来构建对象。
Configuration configuration
parse(),返回Configuration配置对象。
XMLMapperBuilder:xml映射文件的解析对象,最重要的是得到mappedStatements集合
parse(),解析mapper.xml,重点在于解析SELECT|INSERT|UPDATE|DELETE四类标签
Configuration:配置对象,把xml配置文件数据读取到该对象
Environment:数据库环境,数据库连接信息
TypeAliasRegistry:类型别名注册,别名信息
Map<String, MappedStatement> mappedStatements:sql映射结果集,key:namespace.id,value:MappedStatement(操作类型,sqlResource)
variables:properties资源配置信息。
DefaultSqlSessionFactory implements SqlSessionFactory
Configuration configuration
MappedStatement:相当于一个select|update|delete|insert标签的解析结果
DefaultSqlSession implements SqlSession
Configuration configuration;
Executor:执行器对象。
用来执行具体的数据库操作
总结:
SqlsessionFactoryBuilder.build()
XMLConfigBuilder与XMLMapperBuilder是为了解析xml配置与xml映射文件,得到Configuration对象
创建出SqlsessionFactory对象,持有Configuration对象对象:new DefaultSqlSessionFactory(Configuration config)
opensession()
得到Executor执行器对象。打开Connection连接
selectOne或selectList的时候:
根据传递进去的String(namespace.id)去Configuration得到一个具体的MappedStatement对象,执行query方法进行数据库查询,结果集封装。
getMapper方法:
该方法传入接口的类对象,返回代理对象。
10.代理模式:proxy
作用:当一个已经存在的对象中的某个方法不满足需求,此时需要代理模式。
静态代理:
创建代理类,必须与被代理对象同类型;代理对象必须持有被代理对象。
动态代理:
代理类不再手工创建,在程序运行期间动态的在jvm内创建的代理类,并编译。
11.#{}与${}:
写在映射文件中,sql语句获取参数.
#{} sql语句使用?占位符,PreparedStatement.
不
使
用
占
位
符
,
S
t
a
t
e
m
e
n
t
,
平
常
不
用
,
但
是
如
果
参
数
是
表
名
,
字
段
名
等
s
q
l
语
句
的
语
法
部
分
。
必
须
使
用
{} 不使用占位符,Statement,平常不用,但是如果参数是表名,字段名等sql语句的语法部分。必须使用
不使用占位符,Statement,平常不用,但是如果参数是表名,字段名等sql语句的语法部分。必须使用{}
select ${} from blogs where bid=#{} order by ${} ${}
12.注意点:
以后建数据库表,起码create_time与update_time必须有,查询排序使用。
Date:日期类型。数据库使用timestamp类型,可以设置CURRENT_TIMESTAMP默认日期,可以设置根据时间戳更新。
实体类使用Date,String,建议使用String,如果使用Date到springMVC框架会带来麻烦。
在命名(类名,成员变量名,包名,数据库字段名)的时候,不允许出现单个单词。
在实体类,方法形参出现变量建议都使用包装类对象。
private String bName;首字母小写,紧跟字母大写
private String isOk;//不允许成员变量名is开头