1Mybatis概述
1.1Mybatis是什么
MyBatis 是一个优秀持久层框架,由apache的开源项目iBatis演化而来,主要用于解决数据持久化问题,底层实现了对JDBC操作的封装。
参考网址:http://www.mybatis.org
1.2MyBatis 应用场景
a)简化JDBC编写步骤的复杂度
b)更好的实现ORM(对象关系映射)
提示:目前市场上还有一些类似的ORM框架,比如Hibernate.
1.3MyBatis 核心API
MyBatis 框架在实现数据的持久化操作时,需要关注了解的核心配置及对象为:
1)Configs(xml) 配置文件&映射文件(mapper)
2)SqlSessionFactoryBuilder(加载配置文件,创建SQLSessionFactory对象)
3)SqlSessionFactory(负责创建session对象)
4)SqlSession(负责执行SQL操作)
对以上API,先基本了解,然后再实践过程中再强化理解即可。
2Mybatis 编程实现
2.1Mybatis 应用配置
2.1.1MyBatis 依赖配置
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:
org.mybatis
mybatis
3.2.8
2.1.2MyBatis 映射配置
MyBatis 中通过映射文件的配置实现SQL语句与具体操作的映射,例如:
现在mysql的test数据库中创建表:
CREATE TABLE sys_users
(
id
int(11) NOT NULL AUTO_INCREMENT,
username
varchar(200) NOT NULL,
password
varchar(200) NOT NULL,
phone
varchar(20) NOT NULL,
createdDate
date DEFAULT NULL,
modifiedDate
date DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
写入测试数据
insert into sys_users
values
(null,‘A’,‘123456’,‘139’,now(),now()),
(null,‘B’,‘123456’,‘137’,now(),now());
定义映射文件(定义在资源目录的mapper包下)
<?xml version="1.0" encoding="UTF-8"?> select * from sys_users查询语句是 MyBatis 中最常用的元素之一,其中 select 元素用于定义查询语句,select 中的id属性在 命名空间中是唯一的标识符,可以被用来引用对应的sql语句。resultType表示从这条语句中返回的期望类型的类的完全限定名或别名。注意如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身。
2.1.3MyBatis 核心配置
此配置文件放在maven项目的resource根目录下,起名为mybatis-config.xml.
2.2创建SqlSessionFactory
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。这个SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 基于xml的配置创建。例如
/*MyBatis 应用中这个工厂需要具备全局唯一性
* ,我们要通过这个工厂创建SqlSession对象,
* 通过sqlsession对象操作数据库/
private SqlSessionFactory factory;
@Before
public void init()throws IOException{
factory=new SqlSessionFactoryBuilder()
.build(Resources.
getResourceAsStream(“mybatis-config.xml”));
}
2.3创建SqlSession 执行操作
SqlSession 对象代表了一次SQL会话,包含了面向数据库执行 SQL 命令所需的所有方法。可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如:
SqlSession sqlSession=sessionFactory.openSession();
List<Map<String,Object>> list=
sqlSession.selectList(“com.project.sys.dao.SysUserDao.findUsers”);
System.out.println(list);
sqlSession.close();
对于这样的操作,也可以先定义一个接口,然后通过接口类型对象去执行相关操作,例如
package com.project.mybatis.dao;
import java.util.List;
import java.util.Map;
import com.project.mybatis.entity.SysUser;
public interface SysUserDao {
List<Map<String,Object>> findUsers();
int insertObject(SysUser entity);
}
接口定义以后,设置mapper映射文件中的命名空间为这个接口的全类名,例如
<?xml version="1.0" encoding="UTF-8"?> select * from sys_users 基于这个配置文件,实现SQL查询,单元测试方法如下:public class TestSysUserDao02 {
/*MyBatis 应用中这个工厂需要具备全局唯一性
* ,我们要通过这个工厂创建SqlSession对象,
* 通过sqlsession对象操作数据库/
private SqlSessionFactory factory;
@Before
public void init()throws IOException{
factory=new SqlSessionFactoryBuilder()
.build(Resources.
getResourceAsStream(“mybatis-config.xml”));
}
@Test
public void testFindEntityUsers(){
//1.通过工厂创建sqlsession对象
SqlSession session=factory.openSession();
//2.通过sqlsession对象访问数据库
SysUserDao dao=
//底层系统会基于SysUserDao接口创建一个实现类
//底层会访问哪个映射文件如何确定?(基于类全名查找命名空间)
session.getMapper(SysUserDao.class);
List list=
//要访问的方法要与mapper文件中的元素id一致
dao.findEntityUsers(“1%”,“username”);
for(SysUser user:list){
System.out.println(user);
}