周末学习了MyBatis开源框架,MyBatis是由原来的iBatis改名而来,目前已近发布了3.0.1版本。可以在官方网站http://www.mybatis.org下载。
MyBatis作为持久层框架,其主要思想是将程序中的大量sql语句剥离出来,配置在配置文件中,实现sql的灵活配置。这样做的好处是将sql与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改sql。下面给个简单的入门例子。
下面的例子实现从数据库中查询商品表(Goods)中id为1的商品,并打印出商品名称。
数据库建表脚本如下:
DROP TABLE GOODS;
CREATE TABLE GOODS(
ID INT PRIMARY KEY,
CATE_ID INT,
NAME VARCHAR(50),
PRICE DECIMAL(16,2),
DESCRIPTION VARCHAR(100),
ORDER_NO INT,
UPDATE_TIME TIMESTAMP
);
数据库初始化脚本:
INSERT INTO GOODS(ID,CATE_ID,NAME,PRICE,DESCRIPTION,ORDER_NO,UPDATE_TIME) VALUES (1,1,'诺基亚N85',3010,'内置RealPlayer播放器',1,CURRENT_TIMESTAMP);
INSERT INTO GOODS(ID,CATE_ID,NAME,PRICE,DESCRIPTION,ORDER_NO,UPDATE_TIME) VALUES (2,1,'金立 A30',2000,'标准锂电池两块',2,CURRENT_TIMESTAMP);
一、configuration.xml配置文件
首先在工程中导入mybatis-3.0.1.jar包。然后编写configuration.xml配置文件。
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>
<typeAliases>
<typeAlias alias="Goods" type="com.oryx.mybatis.Goods"/>
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:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="com/oryx/mybatis/GoodsMapper.xml"/>
mappers>
configuration>
二、Mapper.xml配置文件
接着编写GoodsMapper.xml配置文件。Mapper配置文件主要是实现POJO类和sql之间的映射。
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.oryx.mybatis.GoodsMapper">
<select id="selectGoods" parameterType="int" resultType="Goods">
select * from Goods where id = #{id}
select>
mapper>
其中#{id}是需要传入的参数,parameterType是参数的类型,resultType是查询返回的结果类。这地方的Goods是一个别名,可以在configuration.xml文件中找到它对应的具体类。
由此可知查询结果集将保存在com.oryx.mybatis.Goods中返回。
三、Goods类
在工程中新建com.oryx.mybatis.Goods.java类。
package com.oryx.mybatis;
import java.sql.Timestamp;
public class Goods {
private String id;
private String cateId;
private String name;
private double price;
private String description;
private int orderNo;
private Timestamp updateTime;
/**
* @return the goodsid
*/
public String getId() {
return id;
}
/**
* @param goodsid the goodsid to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the cateId
*/
public String getCateId() {
return cateId;
}
/**
* @param cateId the cateId to set
*/
public void setCateId(String cateId) {
this.cateId = cateId;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the price
*/
public double getPrice() {
return price;
}
/**
* @param price the price to set
*/
public void setPrice(double price) {
this.price = price;
}
/**
* @return the description
*/
public String getDescription() {
return description;
}
/**
* @param description the description to set
*/
public void setDescription(String description) {
this.description = description;
}
/**
* @return the orderNo
*/
public int getOrderNo() {
return orderNo;
}
/**
* @param orderNo the orderNo to set
*/
public void setOrderNo(int orderNo) {
this.orderNo = orderNo;
}
/**
* @return the updateTime
*/
public Timestamp getUpdateTime() {
return updateTime;
}
/**
* @param updateTime the updateTime to set
*/
public void setUpdateTime(Timestamp updateTime) {
this.updateTime = updateTime;
}
}
四、测试用例
package com.oryx.mybatis;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class TestMyBatis {
public static void main(String[] args) throws SQLException, IOException{
String resource = "com/oryx/mybatis/configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
try{
Goods goods = (Goods)session.selectOne("com.oryx.mybatis.GoodsMapper.selectGoods",1);
System.out.println("good name:"+goods.getName());
}finally{
session.close();
}
}
}
实例源代码下载。