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>