一、SqlSessionFactory介绍
SqlSessionFactory是MyBatis框架的重要组成部分,它是MyBatis的核心配置对象之一。SqlSessionFactory创建SqlSession对象的工厂,SqlSession是面向用户的API,用于和数据库交互。SqlSessionFactory需要在应用程序中创建一次,然后在整个应用程序生命周期中重复使用。创建SqlSessionFactory需要配置文件SqlMapConfig.xml和数据源信息。
二、SqlSessionFactory的创建
在MyBatis中,SqlSessionFactory可以通过多种方式进行创建,常用的方式是通过加载mybatis-config.xml配置文件的方式进行创建,具体操作如下:
String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
以上代码是使用MyBatis最基本的用法,通过SqlSessionFactoryBuilder和mybatis-config.xml配置文件创建SqlSessionFactory。在这个过程中,SqlSessionFactoryBuilder会解析mybatis-config.xml配置文件,并依据配置文件创建SqlSessionFactory。
三、SqlSessionFactory的配置
MyBatis的配置文件是一个XML文档,用于对SqlSessionFactory进行详细的配置。常用配置项如下:
3.1 数据源配置
MyBatis可以支持多种类型的数据源,例如JDBC、C3P0、DBCP等数据源,我们需要在配置文件中指定数据源类型,并设置相关参数。例如:
<dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClass}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource>
以上代码中,type属性表明了我们使用的数据源类型,可以是JDBC、C3P0、DBCP等。在dataSource节点下,我们需要通过property节点指定数据源的相关参数,例如数据库驱动、数据库URL、用户名、密码等。
3.2 Mapper配置
Mapper是MyBatis中关键的组成部分之一,可以将Mapper配置文件与接口进行绑定。例如:
<mapper class="com.test.TestMapper"> <resultMap id="TestResultMap" type="Test"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> </resultMap> </mapper>
以上代码中,我们关联了Test实体类和TestMapper接口。通过resultMap节点,我们可以指定数据库中列和Test实体类中属性的映射关系。
3.3 其他配置项
MyBatis还支持多种其他配置项,例如缓存配置、插件配置、全局配置等。以下是一个全局配置示例:
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25000"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
以上代码中,我们设置了MyBatis的多个全局配置项,例如缓存开启、lazy loading开启、Statement执行超时时间等。
四、SqlSessionFactory的使用
在SqlSessionFactory创建成功后,我们可以通过它创建SqlSession对象,进行数据库操纵操作。以下是SqlSession的基本操作示例:
SqlSession session = sqlSessionFactory.openSession(); try { TestMapper mapper = session.getMapper(TestMapper.class); Test test = mapper.selectByPrimaryKey(1); } finally { session.close(); }
以上代码中,我们通过SqlSessionFactory创建了一个SqlSession对象。在try块中,我们通过getMapper方法获取了TestMapper接口的实现类,并使用它进行数据库查询。
五、总结
SqlSessionFactory是MyBatis的核心配置对象之一,用于创建SqlSession对象,并绑定相关配置信息。SqlSessionFactory需要在应用程序中创建一次,然后在整个应用程序生命周期中重复使用。创建SqlSessionFactory需要配置文件SqlMapConfig.xml和数据源信息。