MyBatis實例

上篇博客中我講解了如何配置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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章