现在spring是不是还不支持MyBatis3??

烈冰 发布于 2010/09/08 20:27
阅读 2K+
收藏 3

网上搜到一些资料比较零碎

知道的朋友吱一声

加载中
0
许恒彪
许恒彪

哈哈,确实不支持,spring3出了一个版本,可以整合,可惜里面有bug

不过我已经整合了spring3和ibatis3

0
烈冰
烈冰

引用来自#2楼“许恒彪”的帖子

哈哈,确实不支持,spring3出了一个版本,可以整合,可惜里面有bug

不过我已经整合了spring3和ibatis3

呵呵,能不能分享一下经验

0
郑雨涵
郑雨涵

It's easy.

很简单的,去spring的jira里看

0
许恒彪
许恒彪

spring jira里面出的版本,有严重bug的

0
烈冰
烈冰

mybatis的事务怎样交给spring管理?

0
许恒彪
许恒彪

可惜我没办法上传附件,就给你贴个类

@SuppressWarnings("unchecked")
public class SqlSessionTemplate extends JdbcAccessor implements SqlSessionOperations {
    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    public SqlSessionTemplate() {
    }

    public SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }

    public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        setSqlSessionFactory(sqlSessionFactory);
        afterPropertiesSet();
    }

    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public DataSource getDataSource() {
        DataSource ds = super.getDataSource();
        return (ds != null ? ds : this.sqlSessionFactory.getConfiguration().getEnvironment().getDataSource());
    }

    @Override
    public void afterPropertiesSet() {
        if (this.sqlSessionFactory == null) {
            throw new IllegalArgumentException("Property 'sqlSessionFactory' is required");
        }

        super.afterPropertiesSet();
    }

    public <T> T execute(SqlSessionCallback<T> action) throws DataAccessException {
        return execute(action, sqlSessionFactory.getConfiguration().getDefaultExecutorType());
    }

    /**
     * Execute the given data access action on a Executor.
     *
     * @param action
     *            callback object that specifies the data access action
     * @return a result object returned by the action, or <code>null</code>
     * @throws DataAccessException
     *             in case of SQL Maps errors
     */
    public <T> T execute(SqlSessionCallback<T> action, ExecutorType executorType) throws DataAccessException {
        Assert.notNull(action, "Callback object must not be null");
        Assert.notNull(this.sqlSessionFactory, "No SqlSessionFactory specified");

        SqlSession sqlSession = SqlSessionUtils.getSqlSession(sqlSessionFactory, getDataSource(), executorType);

        try {
            return action.doInSqlSession(sqlSession);
        } catch (Throwable t) {
            throw wrapException(t);
        } finally {
            SqlSessionUtils.closeSqlSession(sqlSession, sqlSessionFactory);
        }
    }

    public Object selectOne(String statement) {
        return selectOne(statement, null);
    }

    public Object selectOne(final String statement, final Object parameter) {
        return execute(new SqlSessionCallback<Object>() {
            @Override
            public Object doInSqlSession(SqlSession sqlSession) {
                return sqlSession.selectOne(statement, parameter);
            }
        });
    }

    public List selectList(String statement) {
        return selectList(statement, null);
    }

    public List selectList(String statement, Object parameter) {
        return selectList(statement, parameter, RowBounds.DEFAULT);
    }

    public List selectList(final String statement, final Object parameter, final RowBounds rowBounds) {
        return execute(new SqlSessionCallback<List>() {
            @Override
            public List doInSqlSession(SqlSession sqlSession) {
                return sqlSession.selectList(statement, parameter, rowBounds);
            }
        });
    }

    public void select(String statement, Object parameter, ResultHandler handler) {
        select(statement, parameter, RowBounds.DEFAULT, handler);
    }

    public void select(final String statement, final Object parameter, final RowBounds rowBounds,
            final ResultHandler handler) {
        execute(new SqlSessionCallback<Object>() {
            @Override
            public Object doInSqlSession(SqlSession sqlSession) {
                sqlSession.select(statement, parameter, rowBounds, handler);
                return null;
            }
        });
    }

    public int insert(String statement) {
        return insert(statement, null);
    }

    public int insert(final String statement, final Object parameter) {
        return execute(new SqlSessionCallback<Integer>() {
            @Override
            public Integer doInSqlSession(SqlSession sqlSession) {
                return sqlSession.insert(statement, parameter);
            }
        });
    }

    public int update(String statement) {
        return update(statement, null);
    }

    public int update(final String statement, final Object parameter) {
        return execute(new SqlSessionCallback<Integer>() {
            @Override
            public Integer doInSqlSession(SqlSession sqlSession) {
                return sqlSession.update(statement, parameter);
            }
        });
    }

    public int delete(String statement) {
        return update(statement, null);
    }

    public int delete(final String statement, final Object parameter) {
        return execute(new SqlSessionCallback<Integer>() {
            @Override
            public Integer doInSqlSession(SqlSession sqlSession) {
                return sqlSession.delete(statement, parameter);
            }
        });
    }

    public <T> T getMapper(final Class<T> type) {
        return (T) java.lang.reflect.Proxy.newProxyInstance(type.getClassLoader(), new Class[] { type },
                new InvocationHandler() {
                    @Override
                    public Object invoke(final Object proxy, final Method method, final Object[] args) {
                        return execute(new SqlSessionCallback<T>() {
                            @Override
                            public T doInSqlSession(SqlSession sqlSession) throws Exception {
                                return (T) method.invoke(sqlSession.getMapper(type), args);
                            }
                        });
                    }
                });
    }

    private DataAccessException wrapException(Throwable t) {
        if (t instanceof InvocationTargetException) {
            t = t.getCause();
        }
        if (t instanceof IbatisException) {
            Throwable t2 = ((IbatisException) t).getCause();

            if (t2 instanceof SQLException) {
                return getExceptionTranslator().translate("SqlSession operation", null, (SQLException) t2);
            } else {
                return new IbatisSystemException("SqlSession operation", t);
            }
        } else if (t instanceof DataAccessException) {
            return (DataAccessException) t;
        } else {
            return new IbatisSystemException("SqlSession operation", t);
        }
    }
}

0
烈冰
烈冰

8楼你那个是猫还吱什么……

多谢7楼分享的代码。之前没用过mybatis,想试一下谁知道不行

0
wwwcom
wwwcom

现在spring和Mybatis都提供了集成包,想问一下到底是使用spring官方的还是Mybatis官方的?那个好一点呢?

0
苕

同样的问题啊,整合在一起了,但事物不行!!!

返回顶部
顶部