IBatis3.0 注解配置方式的应用(JPA+IBatis3.0应用注解版)
???????? 其实使用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.Driverurl=jdbc\:mysql\://localhost\:3306/searchusername=rootpassword=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();
?}
??? }
?
?
?
?
1 楼 makemyownlife 2010-08-28 最近也在研究 ,ibatis3,不知道怎么细化ibatis3的操作,在ibatis2 中有dao框架,在ibatis3中呢?