mybatis的學習筆記

1 環境說明

Maven項目,

1.1 Mapper類的代碼如下:

public interface MapMapper {

   @Insert("insert into map values(#{name},#{value})")
   int insert(TbMap map);

   @Select("select * from map")
   List<TbMap> selects();
}

1.2 實體類

public class TbMap {
   private String name;
   private String value;
   /* getter setter 省略 */
}

2 官網入門demo

import com.mapper.MapMapper;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;

/**
* 以手動配置方式
*/
public class Main {

   private final static String url = "jdbc:mysql://112.74.172.75:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC";
   private final static String username="root";
   private final static String password = "root";

   public static void main(String[] args) {
       // 數據源配置
       DataSource dataSource = new DriverManagerDataSource(url,username,password);
       // 事務管理
       TransactionFactory factory = new JdbcTransactionFactory();
       // 環境配置
       Environment environment = new Environment("dev",factory,dataSource);
       // 生成配置類
       Configuration configuration = new Configuration(environment);
       // 添加Mapper類
       configuration.addMapper(MapMapper.class);
       // 拿到sql會話工廠
       SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

       // 從會話工廠拿到會話,然後執行mapper方法
       try(SqlSession sqlSession = sqlSessionFactory.openSession()){
           MapMapper mapMapper = sqlSession.getMapper(MapMapper.class);
           mapMapper.selects().forEach(item->{
               System.out.println(item.toString());
           });
       }

       System.out.println("end");
   }
}

3 與springBoot整合

3.1 application.properties 配置方式(簡潔)

spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = root

3.2 純配置類方式

import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;
import org.apache.ibatis.transaction.TransactionFactory;
import org.mybatis.spring.transaction.SpringManagedTransactionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;

/**
* mybatis的配置類
*/
@Configuration
public class MybatisConfiguration {

  final String url = "jdbc:mysql://112.74.172.75:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC";
  final String username="root";
  final String password = "root";

  /**
   * 配置數據源
   * @return
   */
  @Bean
  public DataSource dataSource(){
      return new DriverManagerDataSource(url,username,password);
  }

  /**
   * 使用spring的事務管理
   * @return
   */
  @Bean TransactionFactory transactionFactory(){
      return  new SpringManagedTransactionFactory();
  }

  /**
   * 配置Sql會話工廠
   * @param dataSource
   * @param transactionFactory
   * @return
   */
  @Bean
  public SqlSessionFactory sqlSessionFactory(DataSource dataSource, TransactionFactory transactionFactory){
      // 配置環境變量,dev是sql語句的命名空間,可以自定義
      Environment environment = new Environment("dev",transactionFactory, dataSource);
      // 配置類,對環境變量的一個封裝,在這裏可以手動添加mapper, configuration.addMapper(MapMapper.class);
      org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(environment);
      return new DefaultSqlSessionFactory(configuration);
  }
}

4 簡單總結

總的來說使用配置文件方式更簡潔,但配置類方式,能讓我們更容易瞭解mybatis的運行。
配置類中,我也嘗試過只寫一個@bean,可以是可以,但不便於以後對代碼的維護。
如果對mybatis的運行感興趣,可以從那個官網的入門demo調試着,一步步看代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章