Mybatis入门学习笔记

原生态jdbc操作存在的问题:

1. 数据库连接,使用时就创建,不使用时立即释放,对数据库进行频繁连接的开启和关闭,造成数据库资源浪费,影响了数据库性能。

    * 解决方案:使用数据库连接池管理数据库连接。

2. 将 sql 语句硬编码到 java 代码中,如果 sql 语句修改,需要重新编译 java 代码,不利于系统维护。

    * 解决方案:将 sql 语句配置在 xml 配置文件中,即使 sql 变化,不需要对 java 代码进行重新编译。

3. 向 preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在 java 代码中,不利于系统维护。

    * 解决方案:将 sql 语句及占位符和参数全部配置在 xml 中。

4. 从 resultSet 中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。

    * 解决方案:将查询的结果集,自动映射成 java 对象。

Mybatis框架

1.      Mybatis是一个持久层框架,是apache下的顶级项目。
2.      Mybatis托管到googlecode下,在后来托管到github下(http://github.com/mybatis/mybatis-3/releases)
3.      Mybatis让程序员将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员来编写sql)满足需要的sql语句。
4.      Mybatis可以将向 preparedStatement中输入的参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)

Mybatis框架执行流程步骤

 1.SqlMapConfig.xml(是mybatis的全局配置文件,名称不固定的),配置了数据源、事务等mybatis运行环境

    * 配置映射文件(配置sql语句)mapper.xml(映射文件)、mapper.xml、mapper.xml...

 2. SqlSessionFactory(会话工厂),根据配置文件创建工厂。

    * 作用:创建SqlSession

 3.SqlSession(会话),是一个接口,面向用户(程序员)的接口。

    * 作用:操作数据库(发出sql增、删、改、查)

 4.Executor(执行器),是一个接口(基本执行器、缓存执行器)

    * 作用:SqlSession内部通过Executor执行器操作数据库

 5.mapped statement(底层封装对象)

    * 作用:对操作数据库存储封装,包括sql语句,输入参数,输出结果类型
    * 输入参数类型:java简单类型 hashmap pojo自定义
    * 输出参数类型:java简单类型 hashmap pojo自定义

 6.mysql数据库

Mybatis与Hibernate的区别

1. mybatis不是纯粹的orm框架,需要开发人员手动编写sql,sql优化容易,适用于需求变化较大的项目。
2. hibernate是纯粹的orm框架,不用手动编写sql,sql优化比较困难,适合一些需求变化不多的小型项目,oa,crm.erp等。

原始Dao开发问题

1. dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作量。
2. 调用sqlsession方法时将statement的id硬编码了。
3. 调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。

mapper代理方法(程序员只需要mapper接口(相当 于dao接口))

这里写图片描述

mapper代理方法开发问题

1.代理对象内部调用selectOne或selectList。

* 如果mapper方法返回单个pojo对象(非集合对象),代理对象内部通过selectOne查询数据库。
* 如果mapper方法返回集合对象,代理对象内部通过selectList查询数据库。

2.mapper接口方法参数只能有一个是否影响系统开发。

* mapper接口方法参数只能有一个,系统是否不利于扩展维护。
* 系统 框架中,dao层的代码是被业务层公用的。
* 即使mapper接口只有一个参数,可以使用包装类型的pojo满足不同的业务方法的需求。
* 
    * 注意:持久层方法的参数可以包装类型、map。。。,service方法中建议不要使用包装类型(不利于业务层的可扩展)。

SqlMapConfig.xml

 mybatis的全局配置文件SqlMapConfig.xml,配置内容如下:
- properties(属性)
- settings(全局配置参数)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境集合属性对象)
    - environment(环境子属性对象)
    - transactionManager(事务管理)
   
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值