MyBatis(1)入门案例与自定义框架

1.简介
    1.1 三层架构     
    1.2 ORM    
    1.3 持久层技术解决方案   
2.使用IDEA搭建Mybatis入门案例    
    2.1 新建maven工程并导入依赖
    2.2 创建uer表,user实体类,dao层接口IUserDao
    2.3 resources目录下创建mybatis配置文件SqlMapConfig.xml
    2.4 每个dao创建独立的sql映射文件IUserDao.xml
    2.5 单元测试
3.入门案例分析
    3.1设计模式分析
    3.2 执行查询所有分析
4.自定义Mybatis框架


1.简介:

    1.1 三层架构:

        表现层(UI),业务逻辑层(BLL),数据访问层(DAL)

    1.2 ORM: 

        对象关系映射,实体类和数据库表一一对应,不需要操作数据库表,操作表对应的实体类对象即可

    1.3 持久层技术解决方案:

        JDBC:一种规范和接口,面向sql (规范)(Connection   PreparedStatement    ResultSet)
        Spring的JdbcTemplate:Spring中对jdbc简单封装 (工具类)
        Apache中的DButils:对jdbc简单封装(工具类)
        JPA:一种ORM规范,使应用程序以统一的方式访问持久层(规范)
        Hibernate:全自动全映射orm框架,复杂的sql需要额外使用HQL,不灵活(框架)
        MyBatis:半自动orm框架,同Hibernate相比可在配置文件中配置sql(框架)


2.使用IDEA搭建Mybatis入门案例

    2.1 新建maven工程并导入依赖

        当然也可以导入日志插件log4j和单元测试插件junit

pox.xml

    2.2 创建uer表,user实体类,dao层接口IUserDao

        实体类user中的属性要与user表中的字段一一对应,然后生成getter,setter,toString(IDEA中右键选择generate)

IUserDao代码

    2.3 resources目录下创建mybatis配置文件SqlMapConfig.xml

        配置文件的名称非固定       

SqlMapConfig.xml

    2.4 每个dao创建独立的sql映射文件:IUserDao.xml

IUserDao.xml

    2.5 单元测试

3.入门案例分析

    3.1 设计模式分析

    3.2 执行查询所有分析

        首先,MyBatis会使用dom4j读取配置文件,解析xml,然后进行如下操作:
        1.根据配置文件信息,创建Connection对象 
        2.获取预处理对象PreparedSatement
            conn.prepareSatement(sql);   ->从IUserDao.xml中拿到sql
        3.执行查询  ResultSet resultSet = preparedStatement.executeQuery();
        4.遍历结果集,用于封装
            List<E> list = new ArrayList();
            while(resultSet .next()){         
                // 进行封装,将每个rs的内容都添加到element中
                E element = (E) class.forName("配置的全限定类名").newInstance();     
                // 因为表中列名与实体属性是一致的,我们可以把表的列名看成实体类的属性名
                // 可以通过反射的方式根据名称获取每个属性,并把值赋进去
                list.add(element); //之后把element追加到list中
            }
        5 return list

4. 自定义Mybatis框架:

        1.使用类加载器读取配置文件的类(dom4j)

        2.使用SqlSessionFactoryBuilder(构建者模式)创建一个实现SqlSessionFactory工厂的DefaultSqlSessionFactory类
        这里SqlSessionFactory读取SqlMapConfig.xml中连接数据库和mapper映射信息。用来生产出真正操作数据库的SqlSession对象。

        3.DefaultSqlSession实现SqlSession接口。SqlSession对象有两大作用:
            1生成接口代理对象 
            2定义通用增删改查方法

        4.SqlSession
        作用1:生成接口代理对象。在SqlSessionImpl对象的getMapper方法中首先使用SqlSessionFactory读取的数据库连接信息创建Connection对象。接下来通过jdk代理模式创建出代理对象作为getMapper方法的返回值。这里主要工作是在创建代理对象时,第3个参数处理类里面得到的sql语句,并执行curd操作
        作用2:定义通用增删改查方法。在SqlSessionImpl对象中提供的selectList()方法(mybatis中还有selectOne与insert等方法)这些方法也分为两步:使用SqlSessionFactory读取的数据库连接信息创建jdbc的Connection对象。第二直接得到sql语句,使用jdbc的Connection对象进行对应的curd操作

        此处是一个InvocationHandler的接口,我们需要写一个该接口的实现类,在实现类中调用selectList()

        5.我们要对返回的数据库结果集进行封装,变成java对象返回给调用者。所以我们还必须要知道调用者所需要的返回类型

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

推荐阅读更多精彩内容