其实使用IBatis3.0注解,相等于把IBatis中的全局xml配置信息编程式开发,非全局xml配置针对实体的映射文件采用。注解开发,好了,言归正传吧。\(^o^)/~
IbatisSessionFactory 的代码重点如下:
注意看有颜色部分代码:
package com.vnvtrip.search.ibatis.utils;
import java.sql.Connection;
import java.util.Properties;
import java.util.logging.Logger;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.session.TransactionIsolationLevel;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import com.vnvtrip.search.ibatis.blog.model.BlogMapper;
/**
*
*
* 创建类似Hibernate的HibernateSessionFactoryUtils的类
* @author longgangbai
*
*/
@SuppressWarnings("serial")
public class IbatisSessionFactory implements SqlSessionFactory {
public static final Logger LOG = Logger.getLogger(IbatisSessionFactory.class.getName());
/**
* 针对特殊的应用
* 读取config.properties文件,存放了数据库连接参数等信息
*/
private static final Properties props = new Properties() {
{
try {
load(IbatisSessionFactory.class.getResourceAsStream("jdbc.properties"));
} catch (Exception e) {
e.printStackTrace();
}
}
};
/** 根据参数得到某个具体的iBatis数据源工厂实例 */
public static SqlSessionFactory getInstance() {
if (sqlSessionFactory == null) {
try {
initSqlSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
return sqlSessionFactory;
}
/**
* 采用注解配置的方式
* @throws Exception
*/
private static void initSqlSessionFactory() throws Exception {
//获取数据源
DataSource datasource = BasicDataSourceFactory.createDataSource(props);
//创建事务工厂
TransactionFactory transFactory = new JdbcTransactionFactory();
//获取上下文环境
Environment environment = new Environment("development",
transFactory, datasource);
//创建配置对象
Configuration config = new Configuration(environment);
//添加映射的类
config.addMapper(BlogMapper.class);
//构建的会话工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
sqlSessionFactory = builder.build(config);
}
// 真正“做事”的实例
private static SqlSessionFactory sqlSessionFactory = null;
public Configuration getConfiguration() {
return sqlSessionFactory.getConfiguration();
}
public SqlSession openSession() {
return sqlSessionFactory.openSession();
}
public SqlSession openSession(boolean arg0) {
return sqlSessionFactory.openSession(arg0);
}
public SqlSession openSession(Connection arg0) {
return sqlSessionFactory.openSession(arg0);
}
public SqlSession openSession(ExecutorType arg0) {
return sqlSessionFactory.openSession(arg0);
}
public SqlSession openSession(ExecutorType arg0, boolean arg1) {
return sqlSessionFactory.openSession(arg0, arg1);
}
public SqlSession openSession(ExecutorType arg0, Connection arg1) {
return sqlSessionFactory.openSession(arg0, arg1);
}
@Override
public SqlSession openSession(TransactionIsolationLevel arg0) {
return sqlSessionFactory.openSession(arg0);
}
@Override
public SqlSession openSession(ExecutorType arg0,
TransactionIsolationLevel arg1) {
return sqlSessionFactory.openSession(arg0, arg1);
}
}
jdbc.properties内容如下:
driverClassName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/search
username=root
password=123456
Blog对应的映射文件Mapper文件:
针对insert,update,delete,select很简单忽略。
package com.vnvtrip.search.ibatis.blog.model;
import org.apache.ibatis.annotations.Select;
/**
*
* @author longgangbai
*
*/
public interface BlogMapper {
@Select("select * from blog where blogid=#{blogid}")
Blog findById(int id);
}
BlogDAO中的代码如下:
@Override
public Blog findById(Integer id) {
try {
BlogMapper mapper=getSqlSession().getMapper(BlogMapper.class);
return mapper.findById(id);
} finally{
getSqlSession().close();
}
}