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>