MyBatis简介(百度百科):
MyBatis 原名 iBatis 是一款持久层框架,支持定制化框架,存储过程,高级映射。
MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
MyBatis 使用xml配置或注解来进行映射,将实体类中的属性映射为数据库中的字段。
—> 2010年从apache software foundaction 迁移至 google Code改名 MyBatis
—> 2013年11月又迁移到github
—> ibatis(internet+abatis) 是一个基于Java的持久层框架。
—> ibatis提供SQL Maps 和 Data Access Object(sDao)
特点:
—> 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
—> 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
—> 解除sql与程序代码的耦合:通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
—> 提供映射标签,支持对象与数据库的orm字段关系映射
—> 提供对象关系映射标签,支持对象关系组建维护
—> 提供xml标签,支持编写动态sql
MyBatis 配置
sqlMapConfig.xml配置
<configuration>
//环境(environment),可以有多个,default属性 == id属性
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="" />
<property name="url" value="" />
<property name="username" value="" />
<property name="password" value=" />
</dataSource>
</environment>
</environments>
//提供映射所在的包和配置(即将数据库的字段逐个映射实体类)
<mappers>
<package name="com.mapper"/>
</mappers>
</configuration>
外部包结构及内容
src
|___com
|___mapper
|___mapper.xml
|___mapper.java
mapper.xml中编辑相关的sql语句,如:
<mapper namespace="对应mapper的接口文件路径">
//id对应mapper.java中对应的方法名
<select id="" parameterType="" resoultType="">
select * from 表名
</select>
</mapper>
mapper.xml中可以配置的一些顶级元素
cache – 配置给定命名空间的缓存。
cache-ref – 从其他命名空间引用缓存配置。
resultMap – 最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载你的对象。
sql – 可以重用的 SQL 块,也可以被其他语句引用。
insert – 映射插入语句
update – 映射更新语句
delete – 映射删除语句
select – 映射查询语句
编写测试方法
public void Test throw Exception{
//加载核心配置文件 sqlMapConfig.xml
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//SqlSEssion为mapper.java生成一个实现类
UserMapper userMapper = sqlSession.getMapper(mapper.class);
//使用userMapper对象调用mapper.java中的方法。
userMapper.function();
}