Spring6集成MyBatis
大约 2 分钟
MyBatis 提供了一个 jar 包,让 Spring 能够集成 MyBatis。
集成使用步骤
准备数据库表:t_act

image.png 引入依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>6.0.0-M2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>6.0.0-M2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> <!--MyBatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.11</version> </dependency> <!--Spring集成MyBatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.7</version> </dependency> <!--德鲁伊连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.13</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>基于三层架构实现,所以提前创建好所有的包

image.png 编写POJO
编写mapper接⼝,定义⽅法
编写Sql映射⽂件
在配置⽂件中配置命名空间(mapper接⼝全限定类名),以及每⼀个⽅法对应的sql(sql的id为方法名)。
编写Service接⼝和 Service接⼝实现类
Service实现类纳入Spring IoC管理,开启事务 @Transactional。
@Transactional @Service("accountService") public class AccountServiceImpl implements AccountService { @Autowired // 自动注入MyBatis的代理类 private AccountMapper accountMapper; // ... }编写jdbc.properties配置⽂件
编写mybatis-config.xml配置⽂件
该⽂件可以没有,⼤部分的配置可以转移到spring配置⽂件中。 如果遇到mybatis相关的系统级配置(如开启日志),还是需要这个⽂件。
编写spring.xml配置⽂件
开启组件扫描、引⼊外部的属性⽂件、配置数据源,等。
<!----------------------Spring基础配置---------------------------> <!--组件扫描--> <context:component-scan base-package="com.powernode.bank"/> <!--外部属性配置⽂件--> <context:property-placeholder location="jdbc.properties"/> <!--数据源--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!----------------------MyBatis配置---------------------------> <!--SqlSessionFactoryBean--> <bean class="org.mybatis.spring.SqlSessionFactoryBean"> <!--mybatis核⼼配置⽂件路径--> <property name="configLocation" value="mybatis-config.xml"/> <!--注⼊数据源--> <property name="dataSource" ref="dataSource"/> <!--给包下的类起别名--> <property name="typeAliasesPackage" value="com.powernode.bank.pojo"/> </bean> <!--Mapper扫描器--> <bean class="org.mybatis.spring.mapper."> <!--代理包下的mapper接口--> <property name="basePackage" value="com.powernode.bank.mapper"/> </bean> <!----------------------Spring事务配置---------------------------> <!--事务管理器--> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--开启事务注解--> <tx:annotation-driven transaction-manager="txManager"/>- 也可以提供配置类,在配置类中使用注解,并将需要的Bean加入IoC即可(如DataSource、DataSourceTransactionManager、SqlSessionFactoryBean、MapperScannerConfigurer)。
- 功能性的配置也有响应的注解来启用,如
@EnableAspectJAutoProxy开启AOP,@EnableTransactionManagement启用事务管理。
使用即可,从Spring中获取的Mapper接口实现类是MyBatis生成的代理类,直接正常使用即可。
// 内部的 AccountMapper 对象是MyBatis代理类对象 AccountService accountService = applicationContext.getBean("accountService", AccountService.class); // 只需从容器中获取即可,正常使用 try { accountService.transfer("act-001", "act-002", 10000.0); System.out.println("转账成功"); } catch (Exception e) { e.printStackTrace(); System.out.println("转账失败"); }
