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代理类
四 测试