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