美文网首页
MyBatis框架

MyBatis框架

作者: 想吃热干面了 | 来源:发表于2019-01-09 22:46 被阅读0次

    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标签)

    <select id="findUserById" parameterType="int" resultType="com.foreknow.bean.User">

        select * from user where id=#{id}

      </select>

    其中: 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框架

          本文链接:https://www.haomeiwen.com/subject/flxyhqtx.html