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整合;