版本问题
最开始的时候没有spring的mybatis
//加载Mybatis配置文件,为了访问数据库
Reader reader = Resources.getResourceAsReader("Mybatis.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//这里的session相当于当时jdbc的connection
SqlSession session = sqlSessionFactory.openSession();
// Person person = session.selectOne("selectPersonByNo",2);
PersonMapper personMapper = session.getMapper(PersonMapper.class);
Person person = personMapper.selectPersonByNoWithConverter(1);
System.out.println(person);
session.close();
整合后:把mybatis.xml的配置文件写到spring的配置文件中
在最开始的mybatis中,我们需要手动的创建sqlSessionFactory,然后用sqlSessionFactory来生成sqlsession,当spring和mybatis整合后,可以将sqlSessionFactory和sqlsession注入到bean中
<!--1.关联数据库的配置文件 -->
<context:property-placeholder location="classpath:database.properties"/>
<!-- 2.连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 3.sqlSessionFectory-->
<bean id="sqlSessionFectory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 绑定Mybatis的配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<bean id="sqlsession" class="org.mybatis.spring.SqlSessionTemplate">
<!--这里使用构造器来注入sqlSessionTemplate,因为他没有set方法-->
<constructor-arg index="0",ref="sqlSessionFactory">
</bean>
通过连接池来生成sqlSessionFactory,然后在通过sqlSessionFactory来生成sqlsession,我们可以写一个实现类,来实现mapper接口,此时我们用sqlSessionTemplate 来代替sqlsession,他可以完全替代sqlsession,而且他还是线程安全的。
写过此类之后再把这个实现类注入到spring中,
这样操作过以后,在spring项目中就没有mybatis的代码了
更方便的方法,在spring-dao.xml文件中写
<!-- 配置dao接口扫描包,动态的实现了dao接口可以注入到spring容器中
这是新的功能-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入sqlSessionFectory-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFectory"/><!--不太懂这里为什么要用value-->
<!--要扫描的dao包-->
<property name="basePackage" value="com.kuang.dao"/>
</bean>
他相当于把之前sqlSessionTemplate 的功能实现了,这样就不用了在写mapper的实现类了。