原文链接:http://www.raistudies.com/mybatis/configuring-mybatis-3/
MyBatis 是一个非常流行的数据持久层框架,它支持Java 和 .Net 语言。MyBatis 提供了高效的代码方式,从而大大减少了数据库操作代码的编写。
本教程将一步步引导你对Mybatis 进行相关配置。
Mybatis 3 支持基于xml 文件的配置,同时也支持基于注解(Annotation)的配置,但是使用xml 进行配置将会让你真正体会到MyBatis 的强大威力。
本教程我们只演示 MyBatis 的xml 配置过程。
相关工具:
1、MyBatis 3.0.4
2、MySql Java Connector 5.1
相关Jar 包:
1、commons-logging-1.1.1.jar
2、mybatis-3.0.4.jar
3、mysql-connector-java-5.1.13-bin.jar
本教程将通过MyBatis 将POJO 对象存入数据库。首先、创建数据库
CREATE TABLE Product(id int primary key, brand varchar(20),
model varchar(20), name varchar(30));
第二步、创建 Product 类,并映射到数据库中的 Product 表
package com.raistudies.domain;
import java.io.Serializable;
public class Product implements Serializable{
private static final long serialVersionUID = -1900054678340682193L;
private long id;
private String brand;
private String model;
private String name;
// Getter and setter are removed to make the short
}
MyBatis 3 包含2种类型的配置文件
基本环境配置文件:一个项目中只有一个基本环境配置文件,它包含了多种配置信息,包括数据库链接、驱动、连接池等等。
映射文件:MyBatis框架下的项目,可以包含多个映射文件。每个映射文件都对 Java 接口中定义的相关服务 进行了配置。
下面的例子中,将会包含以上两种配置文件:环境配置文件、映射配置文件
首先是环境配置文件:
<?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>
<settings>
<setting name="lazyLoadingEnabled" value="false" />
</settings>
<typeAliases>
<typeAlias type="com.raistudies.domain.Product" alias="product"/>
</typeAliases>
<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://localhost/test"/>
<property name="username" value="root"/>
<property name="password" value="pass"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/raistudies/services/ProductServices.xml"/>
</mappers>
</configuration>
<settings />: 用于指定整个 MyBatis 程序中的全局配置。本例中仅仅对“ lazyLoadingEnabled” 属性进行了设置
<typeAliases>: 使用该标签,我们可以对自定义的Class 设置别名,以便在MyBatis 的其他配置文件中调用
<environments />: 设置数据库相关信息。可以配置多个<environment>,MyBatis 一次只会应用其中的一个<environment>配置信息,因此可以通过<environments />标签上的"default" 属性指定默认使用的<environment>配置
<mappers>: 指定包含映射信息的xml 文件所在的路径。可以指定多个xml 文件
下一步:在接口中定义Service
创建一个接口,定义我们想要提供的服务。下面,我们为Product 类定义了一个接口,其中只包含一个 "svae" 方法
package com.raistudies.services;
import com.raistudies.domain.Product;
public interface ProductServices {
public void save(Product product);
}
映射文件的配置信息
<?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="com.raistudies.services.ProductServices">
<insert id="save" parameterType="product">
INSERT INTO Product (id,brand,model,name)
VALUE ( #{id}, #{brand}, #{model}, #{name} )
</insert>
</mapper>
<mapper>: 为相关服务定义了SQL 语句, "namespace"属性定义了将要映射的接口
<insert>: 定义了操作类型是insert。"id" 属性指定了方法名,"parameterType"属性则限制了方法将要接收的参数类型。这里我们使用了Product 类的别名。 #{id} :程序将会把 Product 类的"id"属性作为参数传递给SQL 语句并执行。
创建MyBatis Session 并使用 Product Service
下面,我们创建 MyBatis 的一个 Session ,然后使用 ProductServices 接口的 save() 方法将 Product 对象保存到数据库
package com.raistudies.runner;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.raistudies.domain.Product;
import com.raistudies.services.ProductServices;
public class AppTester {
private static SqlSessionFactory sessionFac = null;
private static Reader reader;
private static String CONFIGURATION_FILE = "sqlmap-config.xml";
static{
try {
reader = Resources.getResourceAsReader(CONFIGURATION_FILE);
sessionFac = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SqlSession session = sessionFac.openSession();
try {
ProductServices productServiceObj = session.getMapper(ProductServices.class);
Product product = new Product();
product.setId((long)(Math.random()*100));
product.setBrand("LG");
product.setModel("P500");
product.setName("Optimus One");
productServiceObj.save(product);
session.commit();
} finally {
session.close();
}
}
}
session.getMapper() 方法将会以MyBatis 定义的默认方式创建一个 ProductServices 接口的实现。
运行程序后,查看数据库,如下图: