mybatis框架原理
mybatis是一个半自动化的持久层的框架,可以自己写sql,
mybatis可以将向preparedstate中的输入的参数自动进行输入映射,也可以将查询结果,灵活的映射成java对象(输出映射)。
框架
sqlMapConfig.xml(是mybatis的全局配置文件),配置了数据源、事务等mybatis运行环境。
配置映射(配置sql语句)
mapper.xml
sqlSessionFactory(会话工厂)(根据配置文件可以创建工厂)
作用:创建sqlSeaaion
sqlSession(会话) (是一个接口,面向用户(程序员)接口)
作用:操作数据库(发出sql增删改查)
Executor(执行器)(是一个接口,基本执行器,缓存执行器)
作用:sqlSession内部通过执行器操作数据库
mappered statement(底层封装对象)
作用:对操作数据库存储封装包括:sql语句、输入参数、输出结果类型
mysql
-----------
输入参数类型:java简单类型、hashmap、pojo自定义
输出结果类型:java简单类型、hashmap、pojo自定义
------------
![0a7c3536e142fc9992ad0d6037959876.png](https://i-blog.csdnimg.cn/blog_migrate/cee548cac0d379b5860e0baf2159b4cf.jpeg)
resultMap
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间做一个映射关系。我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们不总都是这样。 如果有一个独立且完美的数据库映射模式,所有应用程序都可以使用它,那就太好了,但可惜也没有。 ResultMap 就是 MyBatis 对这个问题的答案。
1、定义resultMap
2、使用resultMap,作为statement的输出映射类型
type:最后映射的java对象类型,可以使用别名
id是唯一标识,column查询出来的列名,property所指定的pojo类型,最终将column和property一一对应
result:对普通列的定义
select ur.id id,e.account_id accountId, e.name nickname, ur.role_id roleId, r.role_name roleName from sys_user_role ur left join sys_role r on r.id=ur.role_id left join t_ath_permission_employee e on ur.user_id=e.account_id order by ur.id desc LIMIT #{offSet}, #{pageRow}
mysql自增主键返回
在insert提交之前,自动生成一个自增主键
通过mysql函数获取到刚插入记录的自增主键:last_insert_id()
在insert之后调用此函数。
insert into Author (username, password, email, bio) values