在项目使用 mybatis-guice

本贴最后更新于 2850 天前,其中的信息可能已经时异事殊

正文

如果你项目中使用的Spring 可能会用其中的ioc来配置mybatis。但是我们也可以选择官方出品的mybatis-guice 来使用ioc

使用maven配置依赖

<dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-guice</artifactId>
        <version>3.8</version>
    </dependency>
    <dependency>
        <groupId>com.google.inject</groupId>
        <artifactId>guice</artifactId>
        <version>4.1.0</version>
    </dependency>

然后我们需要建立一个mybatisModule

官方有许多建立module的方法,这里我们使用 XMLMyBatisModule

代码如下

import com.google.inject.Guice;
import com.google.inject.Injector;
import org.mybatis.guice.XMLMyBatisModule;

public class Init {
private static Injector injector;
static {

    injector = Guice.createInjector(new XMLMyBatisModule() {
       @Override
       protected void initialize() {
           setEnvironmentId("dev");
           setClassPathResource("mybatis.cfg.xml");

       }
   });

}

public static Injector getInjector() {
    return injector;
}

}

假设你有个类调用了mapper 我们可以在类的进行注入,代码如下

import api.xxx.mapper.PersonMapper;
import api.xxx.model.Person;
import api.xxx.model.PersonExample;
import com.google.inject.Inject;

public class PersonService {
@Inject
private PersonMapper mapper;

public boolean modifyInfo(Person person, String talentNo) {
    PersonExample example = new PersonExample();
    example.createCriteria().andTalentNoEqualTo(talentNo);

    int result = mapper.updateByExampleSelective(person, example);
    return 1 == result;


}

}

调用代码 :

PersonService personService = Init.getInjector().getInstance(PersonService.class);

 

问答

问题1:我们的sqlSession 在哪里??

答:程序会自动调用 SqlSessionManager.openSession(ExecutorType execType) 其中ExecutorType 为SIMPLE。

@Override

public SqlSession openSession(ExecutorType execType) {
return sqlSessionFactory.openSession(execType);
}

问题2:sqlSession会关闭吗

答:程序在方法调用后会自动关闭session,调用SqlSessionManager.close()

 @Override
  public void close() {
    final SqlSession sqlSession = localSqlSession.get();
    if (sqlSession == null) {
      throw new SqlSessionException("Error:  Cannot close.  No managed session is started.");
    }
    try {
      sqlSession.close();
    } finally {
      localSqlSession.set(null);
    }
  }


问题3:怎么定义方法调用的sqlSession参数

答:通过@Transactional 可以定义sqlSession的参数。

 

 

官方教程

mybatis-guice:http://www.mybatis.org/guice/

 

  • IoC
    17 引用 • 29 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    943 引用 • 1460 回帖 • 3 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 387 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...