mybatis 高级映射和spring整合之与Spring整合(6)

来源:互联网 发布:java使用的字符码集 编辑:程序博客网 时间:2024/05/16 07:05

mybatis 高级映射和spring整合之mybatis与Spring整合

3.0 mybatis和spring整合(掌握)    3.1 整合思路    需求spring通过单例方式管理SqlSessionFactory。    spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)    持久层的mapper都需要有spring进行管理。     3.2 整合环境    创建一个新的java工程(接近实际开发的工程结构)    jar包:    mybatis3.2.7的jar包    spring3.2.0的jar包    mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供的,mybatis和spring整合由mybatis提供。    3.3 sqlSessionFactory                在applicationContext.xml配置sqlSession 和 数据源        sqlSessionFactory在mybatis 和spring的整合包下        applicationContext.xml        <!-- 加载配置文件 -->        <context:property-placeholder location="classpath:db.properties">        <!-- 数据源,使用dbcp -->        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destory-method="close">            <property name="driverClassName" value="${jdbc.driver}"/>            <property name="url" value="${jdbc.driver}"/>            <property name="username" value="${jdbc.username}"/>            <property name="password" value="${jdbc.password}"/>            <property name="maxActive" value="10"/>            <property name="maxIdle" value="5"/>        </bean>        <!-- sqlSessionFactory -->        <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">            <!-- 加载mybatis的配置文件 -->            <property name="configLocation" value="mybatis/SqlMapConfig.xml"/>            <!-- 数据源 -->            <property name="dataSource" ref="dataSource">            </property>        </bean>    3.4 原始dao开发(和spring整合后)         3.4.1 User.xml (mapper映射文件)        User.xml        <mapper namespace="test">            <select id="findUserById" parameterType="int" resultType="com.demo.mybatis.ssm.po.User">                SELECT * FROM USER WHERE id=#{value}            </select>        </mapper>        在SqlMapconfig.xml中加载User.xml            <!-- 加载映射文件 -->            <mapper>                <mapper resource="sqlmap/User.xml">        3.4.2 dao(实现类继承SqlSessionDaoSupport)        public interface UserDao {            //根据id查询用户信息            public User findUserById(int id) throws Exception;        }        dao接口实现类需要注入SqlSessionFactory,通过spring进行注入。        这里使用spring的声明配置方式,配置dao的bean        让UserDaoImpl实现类继承SqlSessionDaoSupport            UserDaoImpl.java            public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{                //继承 SqlSessionDaoSupport,通过 this.getSqlSession()得到sqlSession                SqlSession sqlSession = this.getSqlSession)();                User user = sqlSession.select("test.findUserById",id);                return user;            }        3.4.3 配置dao        在applicationContext.xml中配置dao。             applicationContext.xml            <!-- 原始的dao接口-->            <bean id="userDao" class="com.demo.ssm.dao.UserDaoImpl">                <property name="sqlSessionFactory" ref="sqlSessionFactory"/>            </bean>        3.4.4 测试程序            package com.demo.ssm.dao;            public class UserDaoImplTest{                //private ApplicationContext applicationContext;                //在setUp这个方法得到spring容器                @Before                public void setUp() throws Exception{                    applicationContext =  new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml")                }                @Test                public void testFindUserByID(){                    UserDao userDao = applicationContext.getBean("userDao");                    //调用userDao的方法                    User user = userDao.findUserById(1);                    System.out.println(user);                }            }        3.5 mapper代理开发            3.5.1 mapper.xml和mapper.java            3.5.2 spring通过MapperFactoryBean来创建代理对象            <!-- mapper配置                mapperFactoryBean:根据mapper接口生成代理对象            -->            <bean id="userMapper" class="org.mybatis.spring.MapperFactoryBean">                <!-- mapperInterface指定mapper接口 -->                <property name="mapperInterface" value="com.demo.ssm.mapper.UserMapper"/>                <property name="sqlSessionFactory" ref="sqlSessionFactory"/>            </bean>            此方法问题:            需要针对每个mapper进行配置,麻烦。            所以 解决办法3.5.3(屏蔽3.5.2)            3.5.3 通过MapperScannerConfigurer进行mapper扫描(建议使用)            <!-- mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册            遵循规范:将mapper.java 和 mapper.xml 映射文件名称保持一致,且在一个目录中。            自动扫描出来的mapper的bean的id为mapper类名(首字母小写)            -->            <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">                <!-- 指定扫描的包名                    如果扫描多个包,每个包中间使用半角逗号分隔                 -->                <property name="basePackage" value="com.demo.ssm.mapper"/>                <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>            </bean>            3.5.4 测试代码            @Test            public void testFindUserByID() throws Exception{                UserMapper userMapper = (UserMapper) applicationContext.getBean("userBean");                System.out.println(user);            }
0 0