Mybatis 框架初学

一、mybatis 是什么?

   MyBatis 本是apache的一个开源项目IBatis, 2010年这个项目由 apache software foundation 迁移到了google code,并且改名为MyBatis,实质上是Mybatis对ibatis进行一些改进。

   MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费过多的精力去处理,如注册驱动、创建 connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

  Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

二、mybatis 的架构

这里写图片描述

1、mybatis配置
    SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
    mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

2、通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂;
3、由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行;
4、mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器;
5、Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。;
6、Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数;
7、Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程;

三、Demo 步骤
demo描述:根据 id 查询用户信息。
1. 新建java项目;
2. 导入jar包;
3. log4j.properties,db.properties文件;
4. 执行SQL脚本文件;
5. 配置 mybatis 运行环境—— 编写SqlMapConfig.xml 文件;
6. 编写pojo类;
7. 编写程序;
8. 配置映射文件sqlmap/xxx.xml;
9. 在SqlMapConfig.xml 文件中加载加载映射文件;
10. 测试程序;

四、项目结构以及相关 jar 包代码:

这里写图片描述

五、实例程序开发过程中遇到的问题以及解决方式:
1、编码问题
(1)问题描述:findUserByNameTest 根据用户名进行模糊查询时,程序没有报任何异常,控制台打印出来的SQL 语句复制粘贴到数据库中,正常执行SQL语句,查询出来的结果有三条,然后再junit测试过程中,没有报异常,显示查询的结果只有一条;
原因:编码问题导致;数据库的编码,开发环境,配置文件的编码应该一致;
解决方法:在交流讨论群中讨论,由小伙伴们提出解决方案。在db.properties文件中url 后面添加 jdbc.url= jdbc:mysql://localhost :3306/spring?useUnicode=true&characterEncoding=UTF-8 指定数据库的编码为utf-8;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值