学习笔记之mybatis和Spring整合DAO模式和mapper代理模式

首先无论什么开发模式,都需要使用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这位博主的文章总结出来的。

每天学多少不重要,重要的是有多少转为自己的东西了。

 


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭