spring整合mybatis(基于配置类)
Spring整合MyBatis 是将Spring和MyBatis应用到一个项目中。MyBatis 提供数据库相关的操作,完成对象数据和关系数据的转换。Spring完成项目的管理,通过IOC和AOP完成依赖注入,事务管理等操作。
本示例采用idea开发。
创建实体类:
package com.project.bean;
public class ManBean {
private int id;
private String name;
private String tel;
……
}
创建数据库表:
create table t_man(
pk_id int primary key AUTO_INCREMENT,
m_name varchar(20),
m_tel varchar(20)
);
创建业务接口:
package com.project.service;
public interface IManService {
public void add(ManBean man);
public List<ManBean> findAll();
}
创建mapper接口:
package com.project.mapper;
public interface IManMapper {
public void add(ManBean man);
public List<ManBean> findAll();
}
将mybatis.cfg.xml主配置文件添加到resources目录中
<configuration>
<settings> <!--定义输出日志-->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<typeAliases> <!--允许指定包中的类名做为该类的别名-->
<package name="com.project.bean"></package>
</typeAliases>
</configuration>
将mapper文件IManMapper.xml添加到com.project.mapper目录中。
<mapper namespace="com.project.mapper.IManMapper"> <!--需要和接口同名-->
<insert id="add">
INSERT INTO t_man (m_name,m_tel) VALUES(#{name},#{tel});
</insert>
<resultMap id="manMap" type="ManBean">
<id column="pk_id" property="id"></id>
<result column="m_name" property="name"></result>
<result column="m_tel" property="tel"></result>
</resultMap>
<select id="findAll" resultMap="manMap">
select * from t_man
</select>
</mapper>
在maven项目中导入依赖:
spring依赖包:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
mybatis依赖包:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-typehandlers-jsr310</artifactId>
<version>1.0.1</version>
</dependency>
mysql驱动包:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
事务管理器:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
连接池产品采用druid:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
添加编译时将XML文件打包:
<build>
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
好,环境搭建好了,现在来看一下,如何用spring配置类整合mybatis。
首先定义配置类
package com.project;//该包是所有spring组件的父包 @Configuration //申明该类为配置类 //扫描指定类所在的包,及子包中所有的spring组件 @ComponentScan(basePackageClasses = ApplicationConfig.class) //扫描指定包中的mapper文件 @MapperScan("com.project.mapper") //提供事务支持 @EnableTransactionManagement public class ApplicationConfig { }
在配置类中,使用连接池配置数据源:
@Bean public DataSource getDataSource(){ DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); //驱动 dataSource.setUrl("jdbc:mysql://localhost:6789/proxyDB?characterEncoding=utf-8&allowMultiQueries=true");//连接数据库URL dataSource.setUsername("root");//mysql登陆用户名 dataSource.setPassword("lovo");//mysql登陆密码 dataSource.setMaxActive(100);//连接池最大连接数 dataSource.setMinIdle(20);//连接池最小连接数 dataSource.setMaxWait(1000);//连接池超时时间 return dataSource; }
在spring配置类中,添加会话工厂:
@Bean public FactoryBean getFactory(){ SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); //设置数据源 factory.setDataSource(this.getDataSource()); //导入mybatis.cfg.xml配置文件信息 factory.setConfigLocation(new ClassPathResource("mybatis.cfg.xml")); return factory; }
在spring配置类中,添加事务管理器:
@Bean public TransactionManager getTrans(){ DataSourceTransactionManager trans = new DataSourceTransactionManager(); //设置数据源 trans.setDataSource(this.getDataSource()); return trans; }
好,配置类写好了,现在定义业务接口实现类:
@Service //申明该类为业务类 @Transactional //该类中所有方法提供事务管理 public class ManServiceImpl implements IManService { @Autowired //注入mapper接口实现类 private IManMapper mapper; public void add(ManBean bean) { mapper.add(bean); } public List<ManBean> findAll() { mapper.findAll(); } }
好了,spring整合mybatis完毕,现在测试一下。spring测试框架需要依赖于junit,本示例采用junit4完成测试。导入junit和spring测试框架的依赖包:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.7.RELEASE</version>
<scope>test</scope>
</dependency>
在test/java/com/test包中创建测试类:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = ApplicationConfig.class) //加载配置类 public class TestService { @Autowired //注入service实现类 private IManService service; @Test //标识为测试方法 public void testAdd(){ service.add(new ManBean("tom","13920382932")); System.out.println(service.findAll()); } }
好,测试通过……
总结:
该示例是基本配置类+注解的方式,完成spring和mybatis的整合。相比采用spring的XML方式,整合代码比较简单,而且也比较容易维护。
配置类的方式,是spring5以后推荐的方式,springBoot中需要注册spring 组件,采用的就是配置类方式。
当然,很多老项目在整合的时候采用的是XML方式,大家两种都要会,都要掌握。不过,就大趋势而言。XML配置方式会越来越少。

浙公网安备 33010602011771号