一、什么是mybatis
MyBatis 是支持普通SQL 查询,存储过程和高级映射的优秀持久层框架。
MyBatis 消除 了几乎所有的JDBC 代码和参数的手工设置以及结果集的检索。
MyBatis 使用简单的XML 或注解用于配置和原始映射,将接口和Java 的POJOs (Plan Old Java Objects ,普通的Java 对象)映射成数据库中的记录。
MyBatis 的简化并且规范了JDBC的持久化方式,同时又相对与hibernate更加灵活,可以说是介于JDBC和HIBERNATE之间的优秀持久化框架。
MyBatis的前身就是IBATIS,只是版本更新后由于某些事情进行了更名。
二、入门
1》使用顺序:
1、通过XML,或从Configuration 类的习惯准备的实例中构建的方式,创建SqlSessionFactoryBuilder 对象。
2、通过SqlSessionFactoryBuilder 获取SqlSessionFactory。
1-1》XML方式示例获取SqlSessionFactoryBuilder
String resource = "org/mybatis/example/Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
XML
当然,在XML配置文件中还有很多可以配置的,上面的示例指出的则是最关键的部分。的 XML文件包含 SQL代码和映射定义信息。
1-2》不使用XML获取SqlSessionFactoryBuilder
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new
JdbcTransactionFactory();
Environment environment =
new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(configuration);
2-1》从 SqlSessionFactory中获取 SqlSession
方法1:
SqlSession session = sqlMapper.openSession();
try {
Blog blog = (Blog) session.selectOne(
"org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
session.close();
}
方法2
:
例如:
SqlSession session = sqlSessionFactory.openSession();
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
} finally {
session.close();
}
3-1》我们还需要一个映射XML(写SQL的地方)
上面代码的BlogMapper(相当于一个对象),ID=“selectBlog” 相当于表明一个SQL的ID值(方法),
用于调用SQL。
上文就可以“Blog blog = (Blog) session.selectOne( "org.mybatis.example.BlogMapper.selectBlog", 101); ” 这样来调用了。
基本上可以用JAVA的对象和方法来理解。
最后:
1、如 BlogMapper 这样的映射器类来说,还有一个妙招。它们中间映射的语句可以不需要
在 XML中来写,而可以使用 Java 注解来替换。比如,上面的 XML示例可以如下来替换:
package org.mybatis.example;
public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}
对于简单语句来说,使用注解代码会更加清晰,然而 Java 注解对于复杂语句来说就会
2、命名解析:为了减少输入量,MyBat is 对所有的命名配置元素使用如下的命名解析规则,包括语句,结果映射,缓存等。
》直接查找完全限定名(比如“com.mypackage.MyMapper.selectAllThings”),如果发现就使用。
》短名称(比如“selectAllThings”)可以用来引用任意含糊的对象。而如果有两个或两个以上的(比如“com.foo.selectAllThings”和“com.bar.selectAllThings”),那么就会得到错误报告,说短名称是含糊的,因此就必须使用完全限定名。