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

<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中要创建关联信息的属性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351