【SSM框架x5】mybatis配置

前言

通过上文对Maven有的一个基本入门,我们已经对Maven有了一个初步的体会,接下来我将结合我近期看的书本知识和借助搜索引擎对Maven的每一个元素,各种原理进行解释。该一系列文章为本人学习过程中所做的记录,可能存在疏漏或者错误的地方,望读者不吝指教。


配置文件和映射器

入门项目webapp3的项目结构中,我们新建了三个文件,现在来分析它们的名称和作用。

映射器和配置文件

什么是映射器?映射器的主要作用是将SQL查询到结果映射为一个POJO,或者将POJO的数据插入到数据库中,并定义一些关于缓存等的重要内容。

POJO(Plain Ordinary Java Object)是简单的javaBeans,也就是我们常常写的对象实体类,映射器能将java对象和数据库表中的数据交互。
映射器的实现有两种,官方推荐使用的是使用一个接口和xml文件;另外一种是使用一个接口并在接口中写入注解(这种方式创建简单,但是有时过多的SQL语句使注解繁多,代码可读性下降)

什么是配置文件?对Mybatis框架某些属性进行配置的文件。

使用xml实现映射器

项目中使用的是这种映射器方式

步骤 内容
步骤一 定义POJO,例子中指entity中的Category.java。
步骤二 建立接口文件CategoryMapper.java。(这个例子是特例,没有建立接口)
步骤三 建立xml文件CategoryMapper.xml。
步骤四 在配置文件mybatis-config中引入映射器。
引入映射器

mybatis-config.xml配置文件中的代码指引入映射器:

    <mappers>
        <mapper resource="main/com/test/entity/Category.xml"/>
    </mappers>

引入映射器由好几种方法,介绍主要的3种方法

    <mappers>
        <!--先找xml再找接口,xml和接口可以在不同包-->
        <mapper resource="main/com/test/mapper/CategoryMapper.xml"/>

        <!--先找接口再找xml,xml和接口在同一包-->
        <!--<package name="main.com.test.mapper"/>-->

        <!--先找接口再找xml,xml和接口在同一包-->
        <!--<mapper class="main.com.test.mapper.CategoryMapper"/>-->
    </mappers>

1.用文件路径引入映射器。(例子中使用的)

    <mappers>
        <!--先找xml再找接口,xml和接口可以在不同包-->
        <mapper resource="main/com/test/entity/Category.xml"/>
    </mappers>

2.用包名引入映射器

    <mappers>
       <!--先找接口再找xml,xml和接口在同一包-->
        <package name="main.com.test.mapper"/>
    </mappers>

3.用类注册引入映射器

    <mappers>
       <!--先找接口再找xml,xml和接口在同一包-->
        <mapper class="main.com.test.mapper.CategoryMapper"/>
    </mappers>
映射器xml文件和接口

CategoryMapper.xml中,只有元素<mapper>,在<mapper>中写着我们编写的SQL语句

<mapper namespace="main.com.test.mapper.CategoryMapper">
    <select id="getCategoryList" resultType="Category">
        select * from   category_
    </select>
</mapper>
  • <mapper>元素中的属性namespace所对应的是接口的全限定名,Mybatis通过它找到对应的接口
  • <select>元素是查询语句,属性id是这条语句的唯一标识,属性resultType表示返回值的类型,在<select>元素中编写SQL语句

CategoryMapper.java接口中,方法要和xml文件中SQL语句的id一致,Mybatis才能够实现自动映射的功能(执行该方法执行对应的SQL语句)

public interface CategoryMapper {
    List<Category> getCategoryList();
}

使用注解实现映射器

映射器中的SQL语句可以不使用xml文件,而是用注解的形式补充在接口对应的方法上,可以把CategoryMapper.java修改为

public interface CategoryMapper {
    @Select("select * from   category_")
    List<Category> getCategoryList();
}

配置文件中改为类名注册

 <mappers>
        <!--先找xml再找接口,可以在不同包-->
        <!--<mapper resource="main/com/test/mapper/CategoryMapper.xml"/>-->

        <!--先找接口再找xml,同一包-->
        <!--<package name="main.com.test.mapper"/>-->

        <!--先找接口再找xml,同一包-->
        <mapper class="main.com.test.mapper.CategoryMapper"/>
    </mappers>

CategoryMapper.xml注释掉代码

<mapper namespace="main.com.test.mapper.CategoryMapper">

    <!--<select id="getCategoryList" resultType="Category">-->
        <!--select * from   category_-->
    <!--</select>-->

</mapper>

重新运行代码,运行正常
使用注解实现映射器比xml实现映射器简单得多,如果它和xml方式同时定义时,xml方式将覆盖掉注解方式,所以Mybatis官方推荐使用的是xml方式。同时如果SQL语句复杂,导致注解增多,代码可读性下降

发送SQL的两种方式

//测试类
public class TestMybatis {

    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlSessionFactory.openSession();

//        方法一:
        List<Category> cs =session.selectList("getCategoryList");

//        方法二:
//        CategoryMapper c = session.getMapper(CategoryMapper.class);
//        List<Category> cs = c.getCategoryList();

        for(Category cc:cs){
            System.out.println(cc.getName());
        }


    }
}
SqlSession发送SQL

方法一是使用SqlSession发送SQL,它的参数是接口中的方法和实参组成

Mapper发送SQL

方法二是使用Mapper发送SQL,它调用SqlSession的getMapper方法,并赋给对象,所以使用接口中的某个方法:对象名.xx

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

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,523评论 0 4
  • spring官方文档:http://docs.spring.io/spring/docs/current/spri...
    牛马风情阅读 1,684评论 0 3
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981阅读 15,925评论 2 11
  • 本文中我们介绍并比较两种最流行的开源持久框架:iBATIS和Hibernate,我们还会讨论到Java Persi...
    大同若鱼阅读 4,312评论 4 27
  • 不记得是多久之前看的TED的一节公开课,老师在黑板上列出了与我们有至亲关系的人,或父母,或儿女,又或者是朋友和伴侣...
    烤洋芋阅读 154评论 0 0