1. 程式人生 > 實用技巧 >spring整合mybatis(基於配置類)

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配置方式會越來越少。