开源项目

知识点

相关文章

更多

最近更新

更多

MyBatis-Spring 示例代码

2019-05-06 23:35|来源: 网路

Sample Code

NOTE 查看 JPetstore 6 demo 获取更多关于 Spring 在完整的应用服务上面的使用例子..

您可以从此处查看 MyBatis-Spring 的示例代码 repo:

任何一个示例都在 JUnit 4 中运行.

示例代码显示了事务服务从数据访问层获取域对象的典型设计.

FooService.java 作为服务:

@Transactional
public class FooService {

  private UserMapper userMapper;

  public void setUserMapper(UserMapper userMapper) {
    this.userMapper = userMapper;
  }

  public User doSomeBusinessStuff(String userId) {
    return this.userMapper.getUser(userId);
  }

}

它是一个事务 bean,所以当调用它的任何方法时,事务被启动并且在方法结束时提交,且不会抛出未经检查的异常.请注意,事务行为配置为 @Transactional 属性. 这不是必需的 Spring 提供的任何其他方式都可用于划分你的事务.

此服务调用使用 MyBatis 构建的数据访问层. 这层只是一个界面 UserMapper.java 这将与 MyBatis 建立的动态代理一起使用运行时并通过 Spring 注入服务.

public interface UserMapper {

  User getUser(String userId);

}

注意,为了简单起见,我们使用了接口 UserMapper.java 对于 DAO 场景其中一个 DAO 层是用接口和一个实现构建的,尽管在这种情况下它将会更多足够使用一个接口调用 UserDao.java 来取代.

我们将看到不同的方法来找到映射器接口,将其注册到 Spring 并将其注入到服务 bean 中:

使用场景
测试用样例 描述
SampleMapperTest.java 显示基于 MapperFactoryBean 的基本配置,这将动态构建一个实现 UserMapper
SampleScannerTest.java 显示如何使用 MapperScannerConfigurer 来实现项目中所有 mappers 的自动发现.
SampleSqlSessionTest.java 显示如何使用 Spring SqlSession 手动编写 DAO 层并提供你自己的实现 UserDaoImpl.java.
SampleConfigurationTest.java 显示如何使用 Spring 的 @Configuration 来手动创建 MyBatis beans .
SampleEnableTest 现实如何使用 Spring 的 @Configuration@MapperScann 注解来自动发现 mappers.
SampleNamespaceTest 显示如何使用自定义 MyBatis XML 命名空间.

查看 applicationContext.xml 文件的区别以进行 MyBatis-Spring 实战.

相关问答

更多
  • mybatis是是数据持久层的框架,它本质上也是通过jdbc进行数据库连接的,只不过做了封装,更加的简单,所有也需要引入jdbc的jar包。
  • public ApplicationContext ac = new ClassPathXmlApplicationContext(new String[] {"mybatis-spring.xml","spring.xml"}); StudentService studentService =(StudentService)ac.getBean("studentService");
  • 一些有用的教程/介绍是: 基于DAO-XML的逐步教程MyBatis http://hmkcode.com/java-mybatis-mysql/ 一个示例项目,显示XML Mapper用法和库设置 http://www.javacodegeeks.com/2012/11/mybatis-tutorial-crud-operations-and-mapping-relationships-part-1.html Koans项目有助于发现一些关键点 https://github.com/quux00/myba ...
  • 给定的sqlSessionFactory只能关联一个数据源。 但这不是主要问题。 主要问题是本地缓存与mybatis会话相关联 。 因此,当您使用两个不同的会话时,您将拥有两个不同的本地缓存 - 每个会话一个,并且有一个sqlSessionFactory将无济于事。 您应该考虑的选项是为只读会话设置localCacheScope = STATEMENT。 在这种情况下,它不会在执行查询后缓存结果。 为了能够仍然使用缓存,可以使用自定义适配器为某些全局配置的缓存或使用全局缓存(例如ehcache)的现有缓存适 ...
  • 如果列表大小不是太大,请在java代码中执行循环插入 for(Bean bean : list){ list.insert(bean); } 在mapper.xml中插入方法应该添加 SELECT LAST_INSERT_ID() If the list size is not too large, do loop i ...
  • 您应该查看jpetstore代码结构的样子。 Mapper接口用于映射xml配置中定义的sql语句,然后您可以简单地将自动创建的映射器bean注入或自动装入DAO bean。 让我们说(假设mapper接口是MyMapper):
    你可以在myproject.persistence包下的PersonMapper.xml中定义你的sql(注意:接口应该与xml在同一个包中)。