首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts2+Mybatis+Freemarker+Tiles架构灵便的开发框架(五)

2013-01-28 
Struts2+Mybatis+Freemarker+Tiles架构灵活的开发框架(五)推荐的文件分层结构如下com.XXX.lib.action主要

Struts2+Mybatis+Freemarker+Tiles架构灵活的开发框架(五)
推荐的文件分层结构如下
com.XXX.lib.action   主要放置Action,控制前台跳转
com.XXX.lib.cservice 主要放置Service,实现业务逻辑
com.XXX.lib.dao      主要放置dao,实现数据库操作
com.XXX.lib.emodel   主要放置Model,实现模型操作
com.XXX.lib.fintface 主要放置interface,定义接口
com.XXX.lib.global   主要放置全局共享类和管理者
com.XXX.lib.global.constant 主要放置全局变量
com.XXX.lib.global.proxy    主要放置全局代理
com.XXX.lib.mybatis         主要放置Mybatis对象

接着上面的,完成mybatis链接
globalManager如下

package com.XXX.lib.global;import org.apache.ibatis.session.SqlSessionFactory;public class GlobalManager {private static GlobalManager instance = null;public static void setInstance(GlobalManager instance) {GlobalManager.instance = instance;}public static GlobalManager getInstance() {//synchronized防止多线程错误  synchronized if(instance == null){//第一次调用被实例化,以后再也不会被实例化了instance = new GlobalManager();instance.init();}return instance;}public SqlSessionFactory sqlSessionFactory;//全局sqlSessionFactorypublic void init(){sqlSessionFactory = (new SqlSesFacBuilder()).GetFactory();//获得一个SqlSessionFactory,对全局可见}}


SqlSesFacBuilder代码如下
package com.XXX.lib.global;import java.io.Reader;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.XXX.lib.global.constant.MybatisConstant;public class SqlSesFacBuilder {public SqlSessionFactory GetFactory(){SqlSessionFactory sqlSessionFactory=null;try{//配置路径String resource = MybatisConstant.MybatisResource;//加载配置文件Reader reader = Resources.getResourceAsReader(resource);//生成一个SqlSessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);}catch(Exception e){e.printStackTrace();}return sqlSessionFactory;}}

MybatisConstant如下
package com.XXX.lib.global.constant;public class MybatisConstant {public final static String MybatisResource = "com/XXX/lib/mybatis/Configuration.xml";}

SqlSessionProxy如下
package com.XXX.lib.global.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import com.XXX.lib.global.GlobalManager;public class SqlSessionProxy implements InvocationHandler{private Object proxyobj;public SqlSessionProxy(Object obj){proxyobj = obj;}/** * @param obj * @return * 静态工厂方法 */public static Object factory(Object obj){Object result = null;Class<?> cls = obj.getClass();result =  Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), new SqlSessionProxy(obj));return result;}/** * Java反射方法 */public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {Object result;try{SqlSessionFactory sqlSessionFactory= GlobalManager.getInstance().sqlSessionFactory;                 SqlSession sqlSession = sqlSessionFactory.openSession(true);//打开一个SqlSession,true代表自动提交            args[0] = sqlSession;//改变第一个参数的值            result = method.invoke(proxyobj, args);            sqlSession.close();//关闭一个SqlSession        }catch(InvocationTargetException e){        e.printStackTrace();            throw e.getTargetException();        }catch(Exception e){        e.printStackTrace();            throw new RuntimeException("unexpected invocation exception: " + e.getMessage());        }        return result;}}

一个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.XXX.lib.fintface.common.CommonIntface"><select id="lodgCateList" parameterType="HashMap" resultType="HashMap">               SELECT * FROM EMP</select></mapper>

热点排行