1 MyBatis安裝
要使用 MyBatis, 只需將 mybatis-3.5.4.jar 文件置于類路徑(classpath)中即可。
如果使用 Maven 來構建項目,則需將下面的依賴代碼置于 pom.xml 文件中:
<dependency>
? <groupId>org.mybatis</groupId>
? <artifactId>mybatis</artifactId>
? <version>3.5.4</version>
</dependency>
2?從 XML 中構建 SqlSessionFactory
每個基于 MyBatis 的應用都是以一個 SqlSessionFactory 的實例為核心的。SqlSessionFactory 的實例可以通過 SqlSessionFactoryBuilder 獲得。而 SqlSessionFactoryBuilder 則可以從 XML 配置文件或一個預先配置的 Configuration 實例來構建出 SqlSessionFactory 實例。
從 XML 文件中構建 SqlSessionFactory 的實例非常簡單,建議使用類路徑下的資源文件進行配置。
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
XML 配置文件中包含了對 MyBatis 系統的核心設置,包括獲取數據庫連接實例的數據源(DataSource)以及決定事務作用域和控制方式的事務管理器(TransactionManager)。這里先給出一個簡單的示例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
? PUBLIC "-//mybatis.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="com.mysql.jdbc.Driver"/>
? ? ? ? <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
? ? ? ? <property name="username" value="root"/>
? ? ? ? <property name="password" value="123456"/>
? ? ? </dataSource>
? ? </environment>
? </environments>
? <mappers>
? ? <mapper resource="org/mybatis/example/BlogMapper.xml"/>
? </mappers>
</configuration>
3?從 SqlSessionFactory 中獲取 SqlSession
有了 SqlSessionFactory,我們可以從中獲得 SqlSession 的實例。SqlSession 提供了在數據庫執(zhí)行 SQL 命令所需的所有方法。可以通過 SqlSession 實例來直接執(zhí)行已映射的 SQL 語句。例如:
SqlSession session = sqlSessionFactory.openSession();
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
4?創(chuàng)建映射器
這里給出一個基于 XML 映射語句的示例,它應該可以滿足上個示例中 SqlSession 的調用。
CREATE TABLE `blog` (
? `id` int(11) NOT NULL AUTO_INCREMENT,
? `title` varchar(100) DEFAULT NULL,
? `author_id` int(11) DEFAULT NULL,
? `content` varchar(1000) DEFAULT NULL,
? PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8;
insert? into `blog`(`id`,`title`,`author_id`,`content`) values (101,'MyBatis 3.5.1發(fā)布了!',NULL,'用參數名稱指定的keyProperty可能導致ExecutorException。#1485'),(102,'MyBatis 3.5.2發(fā)布了!',NULL,'SQL Builder現在支持LIMIT,OFFSET #1521和FETCH FIRST #1582。'),(103,'MyBatis 3.5.3發(fā)布了!',NULL,'在包含的<sql />的CDATA中支持變量替換。#1615');
將MySQL的依賴代碼置于 pom.xml 文件中:
<dependency>
? <groupId>mysql</groupId>
? <artifactId>mysql-connector-java</artifactId>
? <version>5.1.48</version>
</dependency>
Blog.java
package org.mybatis.example;
public class Blog {
public int id;
public String title;
public String authorId;
public String content;
// 省略get set方法
}
BlogMapper.java
package org.mybatis.example;
public interface BlogMapper {
Blog selectBlog(int id);
}
BlogMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
? PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
? "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
? <select id="selectBlog" resultType="org.mybatis.example.Blog">
? ? select * from Blog where id = #{id}
? </select>
</mapper>
文檔在命名空間 “org.mybatis.example.BlogMapper” 中定義了一個名為 “selectBlog” 的映射語句,這樣就可以在對應的映射器接口調用方法,就像下面這樣:
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
命名空間的作用有兩個,一個是利用更長的全限定名來將不同的語句隔離開來,同時也實現了接口綁定。只要將命名空間置于合適的 Java 包命名空間之中,你的代碼會變得更加整潔,也有利于你更方便地使用 MyBatis。