Mybatis框架

1、什么是Mybatis

1 、mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架,但是具体的说,hibernate是一个完全的orm框架,而mybatis是一个不完全的orm框架;
2 、Mybatis让程序员只关注sql本身,而不需要去关注如连接的创建、statement的创建等操作。
3、 Mybatis会将输入参数、输出结果进行映射。

2、Mybatis的框架原理

这里写图片描述

2.1分析结论

1、mybatis配置文件,包括Mybatis全局配置文件和Mybatis映射文件,其中全局配置文件配置了数据源、事务等信息;映射文件配置了SQL执行相关的 信息。
2、mybatis通过读取配置文件信息(全局配置文件和映射文件),构造出SqlSessionFactory,即会话工厂。
3、通过SqlSessionFactory,可以创建SqlSession即会话。Mybatis是通过SqlSession来操作数据库的。
4、SqlSession本身不能直接操作数据库,它是通过底层的Executor执行器接口来操作数据库的。Executor接口有两个实现类,一个是普通执行器,一个是缓存执行器(默认)。
5、Executor执行器要处理的SQL信息是封装到一个底层对象MappedStatement中。该对象包括:SQL语句、输入参数映射信息、输出结果集映射信息。其中输入参数和输出结果的映射类型包括java的简单类型、HashMap集合对象、POJO对象类型。

3、入门程序

3.1需求

对订单商品案例中的用户表进行增删改查操作
1、根据用户ID查询用户信息
2、根据用户名称模糊查询用户列表
3、添加用户

3.2 环境准备

Jdk:1.7
Ide:eclipse indigo
Mybatis:3.2.7
数据库:MySQL 5X

3.3下载mybatis

mybaits的代码由github.com管理,下载地址:https://github.com/mybatis/mybatis-3/releases
这里写图片描述

3.4 数据库脚本初始化
3.5 工程搭建

这里写图片描述

3.6 代码实现

一 创建 PO 类
这里写图片描述
二 创建全局配置文件
在config目录下,创建SqlMapConfig.xml文件,该名称不是固定不变的。
这里写图片描述
需求开发(根据用户ID查询用户信息)
三 映射文件
在config目录下,创建User.xml(这种命名规范是由ibatis遗留下来)
这里写图片描述
四 在全局配置文件中加载映射文件
这里写图片描述
五 测试
这里写图片描述

4、开发方式

4.1 Mybatis开发dao的方式(即开发dao接口和dao实现类)

需求:根据用户ID查询用户信息

一 Dao接口
这里写图片描述
二 Dao实现类
SqlSessionFactory,它的生命周期,应该是应用范围,全局范围只有一个工厂,使用单例模式来实现这个功能。与spring集成之后,由spring来对其进行单例管理。
SqlSession,它内部含有一块数据区域,存在线程不安全的问题,所以应该将sqlsession声明到方法内部。

public class UserDaoImpl implements UserDao {

    // 依赖注入
    private SqlSessionFactory sqlSessionFactory;

    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public User findUserById(int id) throws Exception {
        // 创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 调用SqlSession的增删改查方法
        // 第一个参数:表示statement的唯一标示
        User user = sqlSession.selectOne("test.findUserById", id);
        System.out.println(user);
        // 关闭资源
        sqlSession.close();
        return sqlSession.selectOne("test.findUserById", 1);
    }

    @Override
    public List<User> findUsersByName(String name) {
        // 创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 调用SqlSession的增删改查方法
        // 第一个参数:表示statement的唯一标示
        List<User> list = sqlSession.selectOne("test.findUsersByName", name);
        System.out.println(list);
        // 关闭资源
        sqlSession.close();
        return list;
    }

    @Override
    public void insertUser(User user) {
        // 创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 调用SqlSession的增删改查方法
        // 第一个参数:表示statement的唯一标示
        sqlSession.insert("test.insertUser", user);

        System.out.println(user.getId());
        // 提交事务
        sqlSession.commit();
        // 关闭资源
        sqlSession.close();
    }



三 测试
这里写图片描述

4.2 Mapper代理的开发方式(即开发mapper接口(相当于dao接口))

Mapper代理的开发规范

1、mapper接口的全限定名要和mapper映射文件的namespace值一致。
2、mapper接口的方法名称要和mapper映射文件的statement的id一致。
3、mapper接口的方法参数类型要和mapper映射文件的statement的parameterType的值一致,而且它的参数是一个。
4、mapper接口的方法返回值类型要和mapper映射文件的statement的resultType的值一致。

一 Mapper接口
这里写图片描述
二 Mapper映射文件
在config下创建mapper目录然后创建UserMapper.xml(这是mybatis的命名规范,当然,也不是必须是这个名称)
这里写图片描述
三 加载映射文件
这里写图片描述
四 测试
这里写图片描述

5、mybatis 整合Spring

1、数据源信息交给spring管理
2、SqlSessionFactory交给spring进行单例管理
3、由spring来管理原始dao的实现类或者mapper代理的代理类。

5.1 需求

使用原始dao方式和mapper代理方式实现以下功能:
根据用户ID查询商品信息

5.2 工程搭建

Mysql的驱动包
Mybatis的核心包和依赖包
Mybatis和spring的整合包
Spring的包
dbcp数据库连接池包
这里写图片描述

5.3 具体整合

一 Mybatis
在config下,创建mybatis目录,然后创建SqlMapConfig.xml
这里写图片描述
将db.properties和log4j.properties拷贝到config目录下。
二 Spring
在config下,创建spring目录,然后创建applicationContext.xml
这里写图片描述

5.4 整合代码
5.4.1 原始dao开发方式

一 映射文件
在config/mybatis下创建sqlmap,然后创建User.xml
这里写图片描述
二 Dao代码
Dao接口
这里写图片描述
Dao实现类
这里写图片描述
三 配置UserDao实现类
在applicationContext.xml中配置UserDao实现类
这里写图片描述
四 测试
这里写图片描述

5.4.2 Mapper代理开发方式

一 映射文件
将映射文件放到UserMapper接口的同包下
这里写图片描述
二 Mapper接口
这里写图片描述
三 配置mapper代理类
单个mapper代理类配置
这里写图片描述
批量设置mapper代理类
这里写图片描述
四 测试
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值