上篇博客中我講解了如何配置MyBatis的開發環境,這裏我就直接拿一個例子來說明如何在實際的開發中使用MyBatis。
項目目錄結構
在MyEclipse中新建一個Java web項目,並導入MyBatis的jar包,同時在src目錄下新建一些包,以區分不同的功能,目錄結構如下圖所示。
我們來一一講解一下這些文件的具體內容以及功能。
(1)log4j.properties
該文件的內容如下所示:
log4j.rootLogger = DEBUG, stdout
log4j.logger.org.mybatis = DEBUG
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =%5p %d %C\: %m%n
這個主要是爲了記錄程序運行過程中的配置信息,使用的日誌框架是log4j,所以你要在工程中導入log4j的jar包。這個配置的效果要等到整個項目運行起來的時候才能觀察到。如下所示:我們可以看到,它記錄了一些非常重要的執行過程,比如SQL語句和一些中間結果。
(2)jdbc.properties
該文件主要是一些數據源的配置信息,它可以在mybatis-config.xml中進行加載,從而引用其中的一些變量,比如數據庫驅動、URL、數據庫用戶名、密碼等。
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis_test?characterEncoding=UTF-8
username = root
password =
(3)com.cao.util
這個包下就定義了一個類:SqlSessionFactoryUtil,它的作用主要是以單例模式創建SqlSessionFactory,同時返回SqlSession,代碼如下:
package com.cao.util;
import java.io.IOException;
import java.io.InputStream;
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 SqlSessionFactoryUtil {
private static SqlSessionFactory sqlSessionFactory = null;
private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class;
/*
* 私有化構造函數
*/
private SqlSessionFactoryUtil()
{
}
/*
* 構建SqlSessionFactory
*/
public static SqlSessionFactory initSqlSessionFactory()
{
String resource = "mybatis-config.xml";
InputStream is = null;
try{
is = Resources.getResourceAsStream(resource);
}catch(IOException e)
{
e.printStackTrace();
}
synchronized(CLASS_LOCK)
{
if(sqlSessionFactory == null)
{
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
}
}
return sqlSessionFactory;
}
public static SqlSession openSqlSession()
{
if(sqlSessionFactory == null)
{
initSqlSessionFactory();
}
return sqlSessionFactory.openSession();
}
}
(4)com.cao.pojo
這個包下也就只有一個類:Role,其實它就是一個Java bean。
package com.cao.pojo;
public class Role {
private Long id;
private String roleName;
private String note;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
(5)com.cao.mapper
這個包下面有兩個文件,充當了映射器的作用,當然也可以不要RoleMapper接口,好像說MyBatis在版本幾之前來着都是沒有這個接口映射文件的。
<?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.cao.mapper.RoleMapper">
<select id="getRole" parameterType="long" resultType="Role">
select id, role_name as roleName, note from role where id = #{id}
</select>
<insert id="insertRole" parameterType="Role">
insert into role(role_name,note) values(#{roleName},#{note})
</insert>
<delete id="deleteRole" parameterType="long">
delete from role where id = #{id}
</delete>
</mapper>
package com.cao.mapper;
import com.cao.pojo.Role;
public interface RoleMapper {
public Role getRole(Long id);
public int insertRole(Role role);
public int deleteRole(Long id);
}
(6)com.cao.main
當然,這裏面就是測試的主函數入口了。
package com.cao.main;
import org.apache.ibatis.session.SqlSession;
import com.cao.mapper.RoleMapper;
import com.cao.pojo.Role;
import com.cao.util.SqlSessionFactoryUtil;
public class RoleMain {
public static void main(String[] args) {
SqlSession sqlSession = null;
try{
sqlSession = SqlSessionFactoryUtil.openSqlSession();
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
Role role = new Role();
role.setRoleName("zhangxiang");
role.setNote("this is zhangxiang");
roleMapper.insertRole(role);
roleMapper.deleteRole(2L);
sqlSession.commit();
}catch(Exception e)
{
System.out.println(e.getMessage());
sqlSession.rollback();
}finally{
if(sqlSession != null)
{
sqlSession.close();
}
}
}
}
完整代碼請在這裏下載http://download.csdn.net/detail/chyang1999/9880976