就不用Spring,Struts2挂载MyBatis

来源:互联网 发布:c语言黑马教程百度云 编辑:程序博客网 时间:2024/06/01 09:10

Hibernate,为了DAO的ORMapping,生生把SQL的优良特性给腰斩完蛋了。比起来更喜欢MyBatis,不失SQL的灵活。

但,MyBatis怎么挂载到Struts2中呢?搜遍大江南北都是利用Spring——你们还有没有点新鲜玩意儿?说白了,就是我这个小小的项目用Sping不是杀鸡用牛刀吗,而且Sping的复杂度让人望而却步。

研究了一下发现不过是利用Sping的DI加载MyBatis模块。赵本山说了,别控制!

查了一下Struts2自带Dependency Injection别控制模块,和Google的Dependency Injection框架Guice(发音:果汁)出自同人之手。何不拿来一用涅?

关子卖光了,下面是解决方法:

 

1.先来个自制MyBatis的SqlSessionFactoryBuilder

public class PointSqlSessionFactoryBuilder {    private SqlSessionFactory sqlFactory;    public SqlSessionFactory getSqlFactory() {        return sqlFactory;    }    // 注入配置文件的地址    @Inject("point.resource.db")    public PointSqlSessionFactoryBuilder(String resource) throws IOException {        Reader reader = Resources.getResourceAsReader(resource);        sqlFactory = new SqlSessionFactoryBuilder().build(reader);    }}



2.再来个自制的Action基类

public class PointActionSupport extends ActionSupport {        /**     *      */    private static final long serialVersionUID = 1L;        // 注入已构建的SqlSessionFactoryBuilder    @Inject("SqlSessionFactoryBuilder")    private PointSqlSessionFactoryBuilder sqlFactoryBuilder;    // 打开连接    protected SqlSession openSqlSession() {        return sqlFactoryBuilder.getSqlFactory().openSession();    }}


 

Struts.xml中追加注入信息:

数据库配置文件地址

单例模式配置MyBatis数据连接工厂


    <constant name="point.resource.db" value="com/point/db/SQLMapConfig.xml" />     <bean      name="SqlSessionFactoryBuilder"      class="com.point.common.core.PointSqlSessionFactoryBuilder"      scope="singleton"    />


 

大功告成!启动后,MyBatis模块被自动加载,可以使用Mapper啦!

 

 

总结:

1.用Struts的依赖注入模块,可以动态加载自己的Bean和常量。常看到有人问是否可以定义什么常量然后读取(比如文件上传下载的后缀等),看来是可以的。

2.@inject可以在变量,方法,构造函数上使用。满足简单的应用,没问题。

3.Struts2中Action都是线程安全的,因此本构造应该不存在线程安全问题。

4.MyBatis的SqlSession是线程不安全的,应该随取随用随丢。

原创粉丝点击