开发环境准备
Mybaits 版本发布地址: https://github.com/mybatis/mybatis-3/releases
使用MyBaits,我们只需要在classpath里添加mybaits-x.x.x.jar
如果使用Maven,那么添加下列依赖到pom.xml:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybaits</artifactId>
<version>3.4.6</version>
</dependency>
比如这里笔者使用的3.4.6版本 这样配置
MyBaits基本组成
- SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口)
- SqlSessionFactory:生成SqlSession的一个接口
- SqlSession:建立数据库连接,直接发送SQL去执行并返回结果,或用于获取Mapper接口。
- SQL Mapper:Java接口与XML(或注解)构成的组件,负责给出SQL和映射规则。
构建SqlSessionFactory
MyBatis应用应该以SqlSessionFactory的实例为中心。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。Mybaits提供了XML或者代码的方式来创建SqlSessionFactory。使用XML更加便于日后修改,省去了重编译的维护困扰。
XML建议放在项目的类完整路径里,Mybaits的工具类Resources提供了载入XML配置文件的方法,比如使用InputStream对象从文件路径或URL里获取资源配置:
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory
= new SqlSessionFactoryBuilder().build(InputStream);
XML的配置例子:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybaits.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
XML配置文件的核心内容即是environment body,其中包含了transaction management和connection pooling的配置。mappers元素包含了映射表:XML映射文件或包含了SQL和映射定义的Java类文件。这里的Java类文件也叫作映射类,其代码利用注解自动实现了部分XML配置,但对于嵌套合并的映射等复杂映射仍需要XML文件。
获取一个SqlSession
从SqlSessionFactory取得SqlSession的映射实例后,就可以执行SQL语句对其操作。这里的例子我们使用BlogMapper.class这个接口来描述映射表的参数和返回值。
SqlSession session = sqlSessionFactory.openSession();
try{
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
}finally{
session.close();
}
上例中映射的SQL语句内容,在XML中配置为:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybaits.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
或者,用Java注解来代替以上的XML配置: