Springmvc-Spring-Mybatis整合

1. Springmvc 操作流程分析:
    1. 入口是: DispatcherServlet 這個在web.xml中配置,用來攔截請求;同時在 DispatcherServlet 中設置初始化參數:
        contextConfigLocation 用來指定它的核心配置文件的路徑:classpath:spring/springmvc.xml; 
    2. 在覈心配置文件中配置有: 處理器映射器, 處理器適配器, 視圖解析器(在視圖解析器中配置前後綴,這樣我們就可以在
            controller的返回視圖中 簡化邏輯視圖的編寫;)
    3. 通過        

2. JDBC 操作流程分析:
    1.加載驅動:
        Class.forName("com.mysql.jdbc.Driver");
    2.獲得連接: 
        connection =  DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "123");                
    3.編寫sql語句 ?表示佔位符 : 
        String sql = "select * from user where username = ?";
    4.獲取預處理statement:
        preparedStatement = connection.prepareStatement(sql);
    5.設置參數,第一個參數爲sql語句中參數的序號(從1開始),第二個參數爲設置的參數值
        preparedStatement.setString(1, "王五");
    6.向數據庫發出sql執行查詢,查詢出結果集
        resultSet =  preparedStatement.executeQuery(); 
        
        
        
    
3. mybatis 傳統方式 操作流程分析:
    1.第一步:創建一個SQLSessionFactoryBuilder對象。
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    2.第二步:加載配置文件。
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");    
    3.第三步:創建SQLSessionFactory對象
        sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    4.第四步:創建SQLSession對象
        SqlSession sqlSession = sqlSessionFactory.openSession();    
    5.第五步:使用SqlSession對象執行查詢,得到User對象。
        //第一個參數:執行查詢的statementId ,這個地方使用了 mapper.xml中sql映射;
        User user = sqlSession.selectOne("getUserById", 10);
        
    6.第六步:打印結果
        System.out.println(user);
    7.第七步:釋放資源
        sqlSession.close();    
    
    簡單總結:mybatis單獨使用時,是直接使用 sqlSession 調用方法完成:CRUD操作;
        mapper.xml中的sql映射的使用是通過sqlSession調方法時的第一個參數來實現的;
    
4.     mybatis mapper代理方式 操作流程分析:
    1.第一步:創建一個SQLSessionFactoryBuilder對象。
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    2.第二步:加載配置文件。
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");    
    3.第三步:創建SQLSessionFactory對象
        sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);    
    4.第四步:創建SQLSession對象
        SqlSession sqlSession = sqlSessionFactory.openSession();        
    5.獲得代理對象 (這個地方使用了mapper.xml中的sql映射生成了代理對象)
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);    
    6.使用代理對象: userMapper 進行操作,其實這個 userMapper 就是mapper.xml中sql映射的java代碼形式;
        
        

        
5.    mybatis單獨使用終極總結: mybatis要解決的核心問題是,如何將mapper.xml中的sql映射利用起來;
    不論是"傳統方式" 還是"mapper代理方式" 核心問題是獲得:sqlSessionFactory ---> sqlSession---->
        ---->1.傳統方式:  
            User user = sqlSession.selectOne("getUserById", 10);
            List<User> list = sqlSession.selectList("getUserByName", "張");
            
                sqlSession直接調用方法:在方法中通過statementID 來找到指定 sql語句映射,這樣
            就使用了映射配置文件中的sql映射配置;
            
        ---->2.mapper代理方式: 
            <!-- mapper代理的開發規則:
                1、namespace必須時候接口的全限定名
                2、Statementid必須和接口的方法名稱一致
                3、接口方法的參數類型要和parameterType要一致
                4、接口方法的返回值類型要和resultType一致
             -->
            sqlSession.getMapper(UserMapper.class); 
            
6. spring與mybatis整合:
    思路分析: 將mybatis核心配置文件 SqlMapConfig.xml 中配置,遷移到applicationContext.xml中:    
        我們先來看看SqlMapConfig.xml中配置了什麼?
        SqlMapConfig.xml中配置的內容和順序如下:

            properties(屬性)    --------->我們會配置一些連接參數,整合時放入db.properties文件中;
            settings(全局配置參數)
            typeAliases(類型別名)-------->別名主要用在輸入輸出映射時,映射類型簡寫;這個不遷移;
            typeHandlers(類型處理器)
            objectFactory(對象工廠)
            plugins(插件)
            environments(環境集合屬性對象) 
                environment(環境子屬性對象)
                    transactionManager(事務管理) -------->遷移到applicationContext.xml中
                    dataSource(數據源)  -------->遷移到applicationContext.xml中
            mappers(映射器)     -------->遷移到applicationContext.xml中

            注意: 順序不能顛倒!!!
        
        applicationContext.xml 中的配置:
        
            <!-- 加載配置文件 -->
            <context:property-placeholder location="classpath:db.properties" />
            
            <!-- 數據庫連接池 -->
            <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
                destroy-method="close">
                <property name="driverClassName" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
                <property name="maxActive" value="10" />
                <property name="maxIdle" value="5" />
            </bean>
            
            <!-- sqlSessonFactory的配置 -->
            <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                <!-- 配置數據庫連接池 -->
                <property name="dataSource" ref="dataSource"></property>
                <!-- 加載配置文件 -->
                <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>
            </bean>
            
            <!-- 配置包掃描器 -->
            <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                <!-- 配置要掃描的包 ,如果掃描多個包使用半角逗號分隔-->
                <!-- <property name="basePackage" value="cn.itheima.mybatis.mapper,com.itheima.mybatis.mapper"/> -->
                <property name="basePackage" value="com.itheima.mybatis.mapper"/>
            </bean>
        
        上邊配置中: <!-- 加載配置文件 --> ,<!-- 數據庫連接池 -->,<!-- sqlSessonFactory的配置 -->這幾個都是基本配置,
        最關鍵的配置是: <!-- 配置包掃描器 --> 因爲這個配置用有一個 <!-- 加載配置文件 --> 這個配置文件下有連兩個東西:
            1. mapper接口
            2. mapper映射文件 (用來生成mapper接口的代理實現;)
        利用這兩個東西,生成了mapper接口的代理實現,這其實已經解決了mybatis的核心問題: 使外置sql語句生效;
        這個代理對象是由spring創建的,所以我們可以注入到servcie中;這樣就實現了 spring與mybatis整合;
        
        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章