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


    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);
                }
  • 相关阅读:
    SpringBoot中如何优雅的使用多线程
    ASP.NET MVC经典项目ProDinner项目解析(5)
    ASP.NET MVC经典项目ProDinner项目解析(4)
    ASP.NET MVC经典项目ProDinner项目解析(1)
    ASP.NET MVC经典项目ProDinner项目解析文章索引
    致我们工作中的设计模式之备忘录模式
    致我们工作中的设计模式之适配器模式
    ASP.NET MVC经典项目ProDinner项目解析(3)
    童话进行中的Silverlight
    致我们工作中的设计模式之基本原则职责单一原则
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468014.html
Copyright © 2020-2023  润新知