Mybatis

Posted 卯毛的妙♂妙屋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis相关的知识,希望对你有一定的参考价值。

原始jdbc操作有很大优化空间:


Mybatis框架完成了这些事情。

Mybatis
文档官网:https://mybatis.org/mybatis-3/zh/index.html
持久层框架。DAO层,用于处理数据库。

核心配置文件 sqlMapConfig.xml(老版本xml内部标签按以下顺序)


properties标签用于加载属性文件


配置:





settings标签手动设置当前mybatis使用的日志工具为log4j

配置:





typeAliases标签自定义实体类的别名,一般统一扫描实体类的包即可

使用即可实现domain包下任何类的类名都直接作为不区分大小写的别名使用

配置:





environments标签用于配置mybatis连接数据库的参数

事务管理方式

连接池

配置





mappers标签用于指定我们要加载的映射配置

配置









映射配置文件UserMapper.xml

mapper标签:用于配置DAO的。

属性:namespace:用于指定DAO类的名称,必须是唯一的。写DAO的全类名。





子标签增删改查的标签,用于指定某个操作的sql语句如select、insert、delete、update标签

属性id:对应dao中的方法名



属性resultType:指定该方法的返回值类型,如果返回的是集合,只需要写集合的泛型类型

现在我们用自定义类型来替代



属性parameterType:指定dao方法参数类型,可以在sql语句中,使用#{属性名}格式的表达式获取参数值进行设置,如果参数类型是简单类型,而且只有一个,我们在sql语句中可以使用#{任意字符串}进行参数设置

现在我们用自定义类型来替代





在insert操作时,有时需要获取自动生成的id,可以在insert标签上设置以下属性

useGeneratedKeys="true" 使用自动生成的主键,设置为true即可


###keyColumn="id" 主键列的名称,填写数据库中的列名即可
###keyProperty="id" 实体类中的属性名,和get方法相关
###指定上述属性后,在执行完insert之后,传递的参数位置的实体类会被自动设置上自动生成的主键。



mybatis的api


SqlSession工厂构造器SqlSessionFactoryBuilder:


通常这样写:



SqlSession工厂对象SqlSessionFactory:

openSession()没设置为true,则要在执行SqlSession后提交事务



执行(增删改查执行时不同)


执行插入


释放资源



Mybatis 的代理开发方式实现DAO层的开发(主流)

Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。


编写UserMapper接口



让mybatis框架实现代理dao的要求:

UserMapper.xml文件中的namespace与UserMapper接口的全限定名相同**


UserMapper.xml中定义的每个statement的id和UserMapper接口方法名相同**


UserMapper.xml中定义的每个sql的parameterType的类型和UserMapper接口方法的输入参数类型相同

这里二者都没有参数


UserMapper.xml中定义的每个sql的resultType的类型和UserMapper接口方法的输出参数类型相同**


UserMapper.xml配置文件的位置和名称要和dao接口的目录层级关系及名称保持一致(这里都叫UserMapper)



调用实现

以上是关于Mybatis的主要内容,如果未能解决你的问题,请参考以下文章

MybatisMyBatis 注解方式的基本 用法

MybatisMyBatis之缓存

MyBatisMyBatis的增删改查

Mybatismybatis登录实例

MybatisMybatis基础(中)

MybatisMybatis缓存