MyBatis框架

MyBatis:一款半自动化的持久层框架 是基于java面向对象的持久层框架

                 jdbc则是一个面向关系型数据库的持久层技术

三个主要特点:

1.支持定制的sql语句(灵活)

 2.存储过程(PLSQL模块化的组件,类似于方法,过程内的sql语句不用重复                                  写):存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参                                    数、输出参数、返回单个或多个结果集以及返回值。

 3.高级映射(表映射为bean以及bean映射为表)

MyBatis框架的结构图:

说明:

SqlMapConfig.xml:核心的配置文件,连接数据库,加载mapper.xml配置文件

Mapper.xml:用于配置sql语句

SqlSessinFactory:根据配置文件,创建SqlSession接口

SqlSession接口:面向用户的接口,封装好了用于对操作数据库(发出sql增删改查)

Executor (执行器):是一个接口(基本执行器、缓存执行器)、SqlSession 内部通过执行器操作数据库

Mapped Statement (底层封装对象):对操作数据库存储封装,包括 sql 语句、输入参数、输出结果类型



MyBatis项目流程

1.创建maven工程 在pom.xml中添加项目的依赖库

先添加本地库,再在maven官网找到需要的库复制以下代码加到配置文件中

2.在resources中添加配置文件:

db.properties、log4j.properties、SqlMapConfig.xml(Mybatis的核心配制文件)


3.创建对应数据表的映射类,再在上图的mapper文件夹中添加User.xml配置文件配置对数据库操作的sql语句,例如:(select标签,delete标签,update标签,insert标签)

其中: id:唯一标识 相当于方法的名称

        parameterType:输入参数的类型 相当于方法的参数类型

        resultMap:方法的返回值类型 注意:全路径(包名+类名)

4.在junit测试

要有@Test注解

读取并解析SqlMapConfig.xml:

InputStream inputStream = Resources.getResourceAsStream( "SqlMapConfig.xml");

创建会话工厂(SqlSessionFactory)传入mybatis的配置信息

SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

获取SqlSession对象,用于对数据库进行操作

SqlSession sqlSession = sessionFactory.openSession();

关联User.xml文件进行操作

User user = sqlSession.selectOne("test.findUserById", 1);

释放资源

sqlSession.close();



以上是简单的基础流程,接下来使用三层结构中的Dao实现类的方式操作数据库

前三步操作不变,不直接写测试类了

4.创建Dao接口以及接口的实现类

在实现类中注入 SqlSessionFactory,这里通过构造器注入

 private  SqlSessionFactory sqlsessionFactory;

 public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {

       this.sqlsessionFactory = sqlSessionFactory;

}

注意:Dao中的方法名最好跟User.xml中配置sql的id一致,以下就是Dao实现类中的方法

5.junit测试

在测试类中需要用setUp()方法注入 SqlSessionFactory对象

有了SqlSessionFactory对象,就可以实例化Dao了(由参构造),这就是Dao中的应用

Mybatis中的mapper接口(规范写法 在项目中的应用 在项目中我们只需要配置号mapper.xml文件就可以了)

mapper接口相当于Dao接口,对应的就要有mapper.xml映射文件,mybatis 可以自动生成 mapper 接口类代理对象。

开发规范:

1.在 mapper.xml 中 namespace 等于 mapper 接口地址(所在包名的全路径)

2.在 xxxmapper.java 接口中的方法名要与 xxxMapper.xml 中 statement 的 id 一致。

3.在 xxxmapper.java 接口中的输入参数类型要与 xxxMapper.xml 中 statement 的 parameterType 指定的参数类型一致。

4.在 xxxmapper.java 接口中的返回值类型要与 xxxMapper.xml 中 statement 的 resultType 指定的类型一致。

5.接口文件名要与xml映射文件名一致(UserMapper.java和UserMapper.xml)

与Dao实现类不同的地方在于:

测试时不在调用sqlsession的增删改查方法,而是调用getMapper(UserMapper.class)方法来实例化UserMapper接口直接调用配置文件中的id(方法名)

复合条件查询(动态sql)

是Mybatis的强大特性之一,

if,choose(when,otherwise),trim(where,set),foreach

在使用复合条件查询时应用到po类(persistant object 持久对象),继承表映射,操作灵活,可以扩展用户的信息;

例如:mapper.xml中的配置 用include引用下图的sql语句  refid与id相对映

以拼接的形式写出sql语句,判断条件是否存在,然后在拼接条件,可以很据情况选择条件来创建sql语句,更加灵活

MyBatis中的关联查询

在数据库中表之间是可能存在关联关系的

主要有三种关联:1对多    1对1   多对多

在开始项目时,要先对数据库表的结构进行分析:

1、每张表记录的数据内容

分模块对每张表记录的内容进行熟悉,相当 于你学习系统 需求(功能)的过程。

2、每张表重要的字段设置

非空字段、外键字段

3、数据库级别表与表之间的关系

外键关系

4、表与表之间的业务关系

在分析表与表之间的业务关系时一定要建立 在某个业务意义基础上去分析。

在配置一对多关系时的描述:collection标签   extends继承了下一图中的配置 根据id

ofType:List集合汇总的类型 一般出现在一对多的关系中

javaType:普通的java PO类

在配置一对一关系时的描述: association标签  

在描述多对多时,要一次根据关联信息描述一对多和一对一

还要注意在bean中要创建关联信息的属性

你可能感兴趣的:(MyBatis框架)