MyBatis 单独使用步骤(不结合Spring)

参考

mybatis 入门官方中文文档


使用 Myeclipse+maven 构建项目

1. 导包

要使用 MyBatis,只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。

如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:


  org.mybatis
  mybatis
  x.x.x

2. XML 配置文件

创建一个 XML 配置文件,XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含:

  • 数据库连接实例的数据源(DataSource)
  • 决定事务作用域和控制方式的事务管理器(TransactionManager)

当然,XML 配置文件还可以配置很多。

下面给出一个示例:




    
    
    

    
    
        
    
    
    
    
        
            
            
            
                
                
                
                
                
                
                
                
            
        
    
    
    
    
        
    
    


注意点1:使用自定义数据源

MyBatis的数据源并不是很强大,所以它也可以不使用其本身自带的数据源,而配置成其它的数据源如DBCP/C3P0等等。

官方文档 XML 数据源配置

官方也给出了C3P0的数据源配置方法。

DBCP的配置方法

(1) 创建一个java类,代码如下,将MyBatis的数据源设置为DBCP数据源。

package com.itiis.client.dataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;

public class DBCPDataSourceFactory extends UnpooledDataSourceFactory {

    public DBCPDataSourceFactory() {
        this.dataSource = new BasicDataSource();
    }
    
}

(2) 在 XML 配置文件中配置数据源

    
    
        
        
        
        
         
        
        
        
    

注意点2:MyBatis的 xml 配置严格讲究顺序,比如 properties 不能配置到 typeAliases 后面,否则就会出错而不能加载 xml

3. Mapper映射器

Mapper XML 文件

(1) 创建一个接口类 ***Mapper.java

package com.itiis.client.dao;

import java.util.Map;

import com.itiis.client.entity.EarthMagneticModel;

public interface TrafficSourceMapper {
    
    public Map getLinkAndLaneById(String id);
    
    public String getById(String id);
    
    public void insertEarthMagnetic(EarthMagneticModel model);
    
}

(2) 创建一个 ***Mapper.xml ,包含了 SQL 代码和映射定义信息





   
    
    
    
    
    
    
      INSERT INTO
            t_earthmagnetic 
            (ID_EMPosition,stationSerial,ID_Link,ID_Lane,vehicleCount,speed,createTime,Note)
      VALUES 
            (#{ID_EMPosition},#{stationSerial},#{ID_Link},#{ID_Lane},#{vehicleCount},#{speed},#{createTime},#{Note})
    

注意点1:mapper的命名空间namespace="com.itiis.client.dao.TrafficSourceMapper" 关联到(1)创建的接口文件。

注意点2:parameterType和resultType对于自定义的java实体类默认使用全路径,可以在 MyBatis 的配置文件中配置使用别名,上面 xml 已经配置。

(3) 在 MyBatis 的 xml 配置文件中配置 Mapper 映射文件,上面的 xml 中已经配置


    

4. 使用

(1) SqlSessionFactory 使用单例,全局唯一

SqlSessionFactoryUtil类,使用静态代码块创建单例

package com.itiis.client.utils;

import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
 * MyBatis下,全局唯一SqlSessionFactory,使用单例模式获取
 */
public class SqlSessionFactoryUtil {

    //首先创建静态成员变量sqlSessionFactory,静态变量被所有的对象所共享。
    public static SqlSessionFactory sqlSessionFactory = null;
    
    private SqlSessionFactoryUtil() {}
    
    //使用静态代码块保证线程安全问题
    static{
        
        String resource = "mybatisConfig.xml";
        
        try {
            
            InputStream inputStream = Resources.getResourceAsStream(resource);

            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            
        } catch (IOException e) {

            e.printStackTrace();
        }
        
    }

}

(2) 使用

    SqlSessionFactory factory = SqlSessionFactoryUtil.sqlSessionFactory;
    
    //true 不开启事务,自动提交
    SqlSession s = factory.openSession(true);
      
    try {
    
        TrafficSourceMapper mapper = s.getMapper(TrafficSourceMapper.class);
        
        Map linkAndLane = mapper.getLinkAndLaneById(ID_TrafficSource);
        
    } finally {
                
        s.close();
        //s.commit(); 如果开启事务的话,要使用此代码执行任务
    }
      

注意点1:确保 SqlSession 的关闭

最好使用如下代码块

SqlSession session = sqlSessionFactory.openSession();
try {
  // do work
} finally {
  session.close();
}

注意点2:映射器实例(Mapper Instances)

映射器是一个你创建来绑定你映射的语句的接口。映射器接口的实例是从 SqlSession 中获得的。因此从技术层面讲,任何映射器实例的最大作用域是和请求它们的 SqlSession 相同的。尽管如此,映射器实例的最佳作用域是方法作用域。也就是说,映射器实例应该在调用它们的方法中被请求,用过之后即可废弃。并不需要显式地关闭映射器实例,尽管在整个请求作用域(request scope)保持映射器实例也不会有什么问题,但是很快你会发现,像 SqlSession 一样,在这个作用域上管理太多的资源的话会难于控制。所以要保持简单,最好把映射器放在方法作用域(method scope)内。下面的示例就展示了这个实践:

SqlSession session = sqlSessionFactory.openSession();
try {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  // do work
} finally {
  session.close();
}

注意点3:事务的开启

Java API

默认的 sqlSessionFactory.openSession(); 方法没有参数,它会开启一个事务,必须使用 commit 方法进行提交。

sqlSessionFactory.openSession(true); 会自动进行提交

你可能感兴趣的:(MyBatis 单独使用步骤(不结合Spring))