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&amp;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配置方式会越来越少。

 

posted @ 2020-12-26 18:45  朗沃张成峰  阅读(2108)  评论(0)    收藏  举报