首先无论什么开发模式,都需要使用spring装配sqlSessinFactory和数据源,这些本来是在类文件和sqlMapSession中设置的,在这里可以通过spring进行设置
数据源设置
<context:property-placeholder location="db.properties"/> //这里用来扫描db.properties文件的内容,传递给数据源使用
<!-- 配置c3p0文件,只用mybatis时数据库信息不在这里配置,而在sqlMapConfig -->
<bean id ="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}" ></property>
<property name="checkoutTimeout" value="30000"></property>
<property name="idleConnectionTestPeriod" value="30"></property>
<property name="initialPoolSize" value="10"></property>
<property name="maxIdleTime" value="30"></property>
<property name="maxPoolSize" value="100"></property>
<property name="minPoolSize" value="10"></property>
<property name="maxStatements" value="200"></property>
</bean>
配置sqlSessionFactory:
<bean id ="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> //通过整合包获取sqlSession
<!-- 配置mybatis配置文件 -->
<property name="configLocation" value="mybatis/sqlMapConfig.xml" />
<!-- 配置数据源 -->
<property name="dataSource" ref="dataSource" />
</bean>
原始DAO方法开发:
区别在于下面几点:
1.在applicationContext.xml文件中:
<bean id="userDao" class="com.ssm.dao.UserDaoImpl"> 装配这个java类,并且设置一个sql工厂,供新建sqlSession。
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
2.java实现接口的类中:
未整合方法:
//需要向dao实现类中注入SqlSessionFactory工厂
//这里我们暂时没用spring,我们通过构造方法注入
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory=sqlSessionFactory;
}
public User findUserById(int id) throws Exception {
SqlSession sqlSession=sqlSessionFactory.openSession();
User user=sqlSession.selectOne("test.findUserById",id);
//释放资源
sqlSession.close();
return user;
}
整合后:
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao { 继承这个类,可以使用提供的新建sqlSession方法
public User findUserById(int id) throws Exception {
//继承SqlSessionDaoSupport类,通过this.getSqlSession()得到sqlSession
SqlSession sqlSession=this.getSqlSession();
User user=sqlSession.selectOne("test.findUserById",id);
return user;
}
}
3.在sqlMapConfig中加载mapper:
<mappers>
<package name="包的路径名"
-->
<mapper resource ="mybatis/User.xml" />
</mappers>
4.test文件
public class DaoTest {
public static void main(String[] args) throws Exception {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
UserDaoImpl userDao=(UserDaoImpl)applicationContext.getBean("userDao"); //通过获得bean来获得对象
User user=userDao.findUserById(1);
System.out.println(user);
}
}
Mapper代理开发:
1.在applicationContext.xml文件中:
<!-- mapper配置
MapperFactoryBean根据mapper接口生成mapper代理对象-->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!-- mapperInterface指定mapper接口 -->
<property name="mapperInterface" value="com.ssm.mapper.UserMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
在sqlMapConfig中:
原本需要在sqlMapConfig加载UserMappper.xml文件,但是整合后,可以在applicationContext中扫描包文件
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定扫描的包名
如果扫描多个包,每个包中间使用半角逗号分隔 ,这里配置后就可以取消掉sqlMapConfig的扫描包文件-->
<property name="basePackage" value="com.ssm.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
2.在test类:
public class TestMapper {
private static ApplicationContext applicationContext;
public static void main(String[] args) throws Exception {
applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
UserMapper userMapper=(UserMapper) applicationContext.getBean("userMapper");//直接装配bean就行
User user=userMapper.findUserById(1);
System.out.println(user);
}
}
我是看https://blog.csdn.net/acmman/article/details/46906717这位博主的文章总结出来的。
每天学多少不重要,重要的是有多少转为自己的东西了。