一,什么是MyBatis
MyBatis是一个持久层框架,它属于ORM关系型映射,由于它内部封装了JDBC,就可以替代JDBC的操作,对于JDBC的操作来说,可以简化其复杂繁琐的工作(建立连接、设置占位符、PreparedStatement-预编译sql、获取结果集等一系列操作 )。
ORM(O/R - Mapping 对象关系映射),是一种把内存中的对象保存到关系型数据库的技术。用它封装数据库访问的细节。采用元数据(XML)的方式来描述对象-关系(数据库表)的映射细节,可以使得ORM充当任何一个Java应用业务层到数据库之间的桥梁
1, MyBatis与ORM的区别
mybatis属于半orm,因为sql需要自己书写。与其他比较标准的 ORM 框架(比如 Hibernate )不同, mybatis 并没有将java对象与数据库关联起来,而是将java方法与 sql 语句关联起来,mybatis 允许用户充分利用数据库的各种功能,例如存储、视图、各种复杂的查询以及某些数据库的专有特性。
自己写sql语句的好处是,可以根据自己的需求,写出最优的 语句。灵活性高。但是,由于是自己写sql语句,导致平台可移植性不高。
二,MyBatis的组成,三大要素
1.核心接口和类(SqlSessionFactory 和 SqlSession)
SqlSessionFactory
SqlSessionFactory 是MyBatis中的核心对象,是数据库映射关系经过编译之后的内存镜像,而它的作用就是用来创建SqlSession。 可以根据上层对象SqlSessionFactoryBuilder对象来进行创建
SqlSessionFactoryBuilder则可以通过核心(主)配置文件 或者Java代码定义好的配置类来构建。
SqlSessionFactory ,是线程安全的,它一旦被创建,在应用的运行期间都会存在,如果我们多次创建同一个数据库的SqlSessionFactory,会导致数据库资源被消耗殆尽。因此通常情况下,同一个数据库都只会对应一个SqlSessionFactory ,所以在构建SqlSessionFactory 实例时通常会使用单例模式
SqlSession
SqlSession对象是另一个核心对象,他是应用程序和持久层之间执行交互操作的单线程对象--其作用主要是执行持久化操作。每一个线程都应拥有一个自己的SqlSession实例,并且该实例是不共享的,同时也是线程不安全的,SqlSession它的使用范围最好限制在一次请求或者一个方法中。绝对不能够把其放在一个类的静态字段(属性),注意使用SqlSession对象后,要注意关闭资源。
2,核心(主)配置文件 MyBatis.cfg.xml
(1),typeAliases--别名配置,允许使用指定包中的类名作为实体类的类型
<typeAliases>
<package name="com.project.bean"/>
</typeAliases>
(2),数据源配置
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:端口号/数据库名称?characterEncoding=utf-8&allowMultiQueries=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
(3),settings--设置标签
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
(4),mappers--映射文件的所在位置
<mappers>
<!-- 根据包名进行扫描-->
<package name="com.project.dao"/>
</mappers>
3,SQL映射文件(mapper.xml)
(1),用来映射持久层接口,因此需要映射文件和它所对应的接口同名
(2),导入映射文件前,需要在resources目录下,创建和持久接口所在包同名的目录,由于resources的特殊性,创建时用 -- / -- 表示创建的为层级目录,比如com/project/dao(创建的是com、project、dao,这三个有层级关系的目录)
(3),导入后ÿ