Java如何在不使用XML的情况下构建SqlSessionFactory?

MyBatis带有完整的配置类,使我们可以以编程方式创建配置对象,而无需使用XML文件。在此代码段中,您将看到如何在SqlSessionFactory没有XML配置文件的情况下创建对象。

我们首先获得一个javax.sql.DataSource对象。然后我们创建一个TransactionFactory对象。然后,使用这两个对象,我们可以创建一个Environment对象并为开发环境指定其名称,例如development。最后一步是Configuration使用先前创建的环境创建对象。

在Configuration对象中,我们可以定义信息,例如类型别名,并注册所有MyBatis映射器。

package org.nhooo.example.mybatis;

import org.apache.commons.dbcp2.BasicDataSource;
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.apache.ibatis.type.TypeAliasRegistry;
import org.nhooo.example.mybatis.annotation.RecordMapper;
import org.nhooo.example.mybatis.domain.Record;

import javax.sql.DataSource;

public class BuildSqlSessionFactory {
    public static void main(String[] args) {
        // 获取数据源对象。
        DataSource dataSource = BuildSqlSessionFactory.getDataSource();

        // 创建一个事务工厂。
        TransactionFactory trxFactory = new JdbcTransactionFactory();

        // 创建具有指定名称,交易的环境对象
        // 工厂和数据源。
        Environment env = new Environment("dev", trxFactory, dataSource);

        // 在环境对象的基础上创建一个配置对象。
        // 我们还可以添加类型别名和映射器。
        Configuration config = new Configuration(env);
        TypeAliasRegistry aliases = config.getTypeAliasRegistry();
        aliases.registerAlias("record", Record.class);

        config.addMapper(RecordMapper.class);

        // 基于创建的Configuration对象构建SqlSessionFactory。
        // 打开一个会话并使用RecordMapper查询一条记录。
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config);
        SqlSession session = factory.openSession();

        try {
            RecordMapper mapper = session.getMapper(RecordMapper.class);
            Record record = mapper.getRecord(1L);
            System.out.println("Record = " + record);
        } finally {
            session.close();
        }
    }

    /**
     * Returns a DataSource object.
     *
     * @return a DataSource.
     */
    public static DataSource getDataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUrl("jdbc:mysql://localhost/musicdb");
        dataSource.setUsername("root");
        dataSource.setPassword("");
        return dataSource;
    }
}

以下是上述代码Record和的其他支持类RecordMapper。

package org.nhooo.example.mybatis.annotation;

import org.apache.ibatis.annotations.Select;
import org.nhooo.example.mybatis.domain.Record;

public interface RecordMapper {
    /**
     * Get a single Record from the database based on the record
     * identified.
     *
     * @param id record identifier.
     * @return a record object.
     */
    @Select("SELECT * FROM records WHERE id = #{id}")
    Record getRecord(Long id);
}
package org.nhooo.example.mybatis.domain;

import java.io.Serializable;
import java.util.Date;

public class Record implements Serializable {
    private Long id;
    private String title;
    private Date releaseDate;
    private Long artistId;
    private Long labelId;

    // Getters & Setters

    @Override
    public String toString() {
        return "Record{" +
            "id=" + id +
            ", title='" + title + '\'' +
            ", releaseDate=" + releaseDate +
            ", artistId=" + artistId +
            ", labelId=" + labelId +
            '}';
    }
}

Maven依赖

<dependencies>
    <!--https://search.maven.org/remotecontent?filepath=org/mybatis/mybatis/3.5.0/mybatis-3.5.0.jar-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.0</version>
    </dependency>
    <!--https://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <!--https://search.maven.org/remotecontent?filepath=org/apache/commons/commons-dbcp2/2.5.0/commons-dbcp2-2.5.0.jar-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp2</artifactId>
        <version>2.5.0</version>
    </dependency>
</dependencies>

Maven中央
Maven中央