![java微技術(shù)javaee企業(yè)級分布式高級架構(gòu)師二期專題詳解mybatis講義_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b1.gif)
![java微技術(shù)javaee企業(yè)級分布式高級架構(gòu)師二期專題詳解mybatis講義_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b2.gif)
![java微技術(shù)javaee企業(yè)級分布式高級架構(gòu)師二期專題詳解mybatis講義_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b3.gif)
![java微技術(shù)javaee企業(yè)級分布式高級架構(gòu)師二期專題詳解mybatis講義_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b4.gif)
![java微技術(shù)javaee企業(yè)級分布式高級架構(gòu)師二期專題詳解mybatis講義_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1 學(xué)習(xí)目標(biāo)l 理論知識(去和別人說明白這個技術(shù)是個什么東西,解決的是什么問題)l 會用l 深入了解底層原理l 會安裝2 Mybatis 需要關(guān)注的文件l POJO 類(DTO、VO、PO 等)l Mapper 接口(就是 dao 接口)l Mapper文件l 全局配置文件3 框架概述什么是框架,它為構(gòu)件復(fù)用提供了上下文(Context)。因此構(gòu)件庫的大規(guī)模重用也需要框架。協(xié)作構(gòu)件之間的依賴、責(zé)任分配和流程,表現(xiàn)為一組抽象類以及其實例之間協(xié)作的可以說,一個框架是一個可復(fù)用的設(shè)計構(gòu)件,它規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個設(shè)計、為什么使用框架開發(fā)的三層結(jié)構(gòu)我們用三層結(jié)構(gòu)主要是使項目結(jié)構(gòu)更清楚,分工更
2、明確,有利于后期的維護(hù)和升級三層結(jié)構(gòu)包含:表現(xiàn)層,業(yè)務(wù)層,持久層題太多。* 在某些方面使用別人成熟的框架,就相當(dāng)于讓別人幫你完成一些基礎(chǔ)工作,你只需要集中精力完成系統(tǒng)的業(yè)務(wù)邏輯設(shè)計。* 而且框架是成熟,穩(wěn)健的,它可以處理系統(tǒng)很多細(xì)節(jié)問題,比如,事務(wù)處理,安全性, 數(shù)據(jù)流等問題。* 還有框架都經(jīng)過很多人使用,所以結(jié)構(gòu)很好,所以擴展性也很好,而且它是不斷升級的,你可以直接享受別人升級代碼帶來的好處。* 因為系統(tǒng)發(fā)展到已經(jīng)很復(fù)雜了,特別是服務(wù)器端,涉及到的知識,內(nèi)容,問4 Mybatis什么是 mybatismybatis 參考:l Mybatis 是什么?l Mybatis 的由來?* MyBat
3、is 本是 apache 的一個開源項目 iBatis* MyBatis 是一個優(yōu)秀的持久層框架,它是一個半自動化的 ORM 框架* 它對使用操作數(shù)據(jù)庫的過程進(jìn)行 ,使開發(fā)者只需要關(guān)注 SQL 本身,而不需要花費精力去處理例如 驅(qū)動、創(chuàng)建 connection、創(chuàng)建 statement、手動設(shè)置參數(shù)、結(jié)果集檢索等 繁雜的過程代碼。l Mybatis 在哪寫 SQL 語句?如何設(shè)置 SQL 參數(shù)和結(jié)果?示例代碼public classTest public static void main(String args) Connection connection = null;PreparedSta
4、tement preparedStatement = null; ResultSet resultSet = null;try / 加載數(shù)據(jù)庫驅(qū)動Class.forName(com.mysql.Driver);/ 通過驅(qū)動管理類獲取數(shù)據(jù)庫鏈接 connection = DriverManager connection = DriverManager.getConnection(:mysql:/localhost:3306/mybatis?characterEncoding=utf-8, root,root);/ 定義sql 語句 ?表示占位String sql = select * from
5、user where username = ?;/ 獲取預(yù)處理 statementpreparedStatemnt、CallableStatement)配置起來。* 并通過 java 對象和 statement 中的 sql 進(jìn)行生成最終執(zhí)行的 sql 語句,最后由mybatis 框架執(zhí)行 sql 并將結(jié)果成 java 對象并返回。* Mybatis 通過 XML 或注解的方式,將要執(zhí)行的各種 statement(statement、* 2010 年這個項目由 apache software foundation 遷移到了 google code,并且改名為MyBatis 。* 2013 年
6、11 月遷移到。preparedStatement = connection.prepareStatement(sql);/ 設(shè)置參數(shù),第一個參數(shù)為 sql 語句中參數(shù)的序號(從 1 開始),第二個參數(shù)為設(shè)置的preparedStatement.setString(1, );/ 向數(shù)據(jù)庫發(fā)出 sql 執(zhí)行,出結(jié)果集resultSet = preparedStatement.executeQuery();/ 遍歷結(jié)果集while (resultSet.next() System.out.println(resultSet.getString(id)+ +resultSet.getString(u
7、sername); catch (Exception e) e.printStackTrace(); finally /資源if (resultSet != null) try resultSet.(); catch (SQLException e) e.printStackTrace();if (preparedStatement != null) try preparedStatement. catch (SQLException e) e.printStackTrace();if (connection != null) try ();connection.(); catch (SQLE
8、xception e) / TODO Auto-generated catch block e.printStackTrace();Mybatis 如何解決代碼中的問題1、 創(chuàng)建數(shù)據(jù)庫連接相關(guān)操作,硬編碼a)解決方案:通過 Mybatis 全局配置文件,對數(shù)據(jù)庫連接進(jìn)行配置2、 statement 相關(guān)操作,硬編碼a)解決方案:通過 Mapper文件,對 statement 相關(guān)處理進(jìn)行配置。3、 頻繁開啟數(shù)據(jù)庫連接,會降低數(shù)據(jù)庫處理性能。a)解決方案:通過 Mybatis 全局配置文件,配置連接池。Mybatis 架構(gòu)原理我們要找出的就是:從 XML 配置文件到數(shù)據(jù)庫的距離有多長?MyBat
9、is配置文件數(shù)據(jù)庫說明:MappedStatementExecutor輸入PojoString、Integer等基礎(chǔ)數(shù)據(jù)類型Map輸出ListPojoString、Integer等基礎(chǔ)數(shù)據(jù)類型MapSqlSessionSqlSessionFactoryMappern xmlMapper2 xmlMapper1.xmlSqlMapConfig.xml1、 mybatis 配置文件a)SqlMapConfig.xml,此文件作為 mybatis 的全局配置文件,配置了 mybatis 的運行環(huán)境等。b)Mapper.xml,此文件作為 mybatis 的 sql文件,文件中配置了操作數(shù)據(jù)庫的sql
10、 語句。此文件需要在 SqlMapConfig.xml 中加載。2、 SqlSessionFactory通過 mybatis 環(huán)境等配置構(gòu)造 SqlSessionFactory,即會話工廠。3、 sqlSession通過會話工廠創(chuàng)建 sqlSession 即會話,程序員通過 sqlsession 會話接口對數(shù)據(jù)庫進(jìn)行增刪改查操作。4、 Executor 執(zhí)行器mybatis 底層自定義了 Executor 執(zhí)行器接口來具體操作數(shù)據(jù)庫,Executor 接口有兩個實現(xiàn),一個是基本執(zhí)行器(默認(rèn))、一個是緩存執(zhí)行器,sqlsession 底層是通過executor 接口操作數(shù)據(jù)庫的。5、 Mappe
11、d Statement它也是 mybatis 一個底層對象,它包裝了 mybatis 配置及 sql等。mapper.xml 文件中一個 selectinsertupdatedelete對應(yīng)一個 MappedStatement 對象,selectinsertupdatedelete的 id 即是 Mapped statement的 id。a)Mapped Statement 對 sql 執(zhí)行輸入?yún)?shù)進(jìn)行定義,HashMap、基本類型、pojo,Executor 通過 Mapped Statement 在執(zhí)行 sql 前將輸入的 java對象至 sql 中,輸入?yún)?shù)就是編程中對 prepared
12、Statement設(shè)置參數(shù)。b)Mapped Statement 對 sql 執(zhí)行輸出結(jié)果進(jìn)行定義,HashMap、基本類型、pojo,Executor 通過 Mapped Statement 在執(zhí)行 sql 后將輸出結(jié)果至 java 對象中,輸出結(jié)果過程相當(dāng)于編程中對結(jié)果的處理過程。5 Mybatis 入門需求1、根據(jù)用戶id一個用戶2、根據(jù)用戶名稱模糊用戶列表3、添加用戶4、更新用戶5、刪除用戶Mybatis 開發(fā)框架搭建l 創(chuàng)建 maven 工程:mybatisl POM 文件org.mybatismybatis3.4.6l SqlMapConfig.xmll UserMapper.xm
13、lmysqlmysql-connector-java5.1.35junitjunit4.12l PO 類需求實現(xiàn)根據(jù) id用戶文件lparameterType:定義輸入到 sql 中的類型,#id表示使用 preparedstatement 設(shè)置占位號并將輸入變量 id 傳到 sql。resultType:定義結(jié)果類型。#:相當(dāng)于中的?占位l 測試代碼public class MybatisFirst /會話工廠private SqlSessionFactory sqlSessionFactory; select * from user where id = #idpublic class U
14、ser private int id;private String username; private Date birthday; private String sex; private String address;/gettersetterBeforepublic void createSqlSessionFactory() throws IOException / 配置文件String resource = SqlMapConfig.xml;InputStream inputStream = Resources.getResourceAsStream(resource);/ 使用Sql
15、SessionFactoryBuilder從xml配置文件中創(chuàng)建SqlSessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);/ 根據(jù) id用戶Testpublic void testFindUserById() / 數(shù)據(jù)庫會話實例SqlSession sqlSession = null;try / 創(chuàng)建數(shù)據(jù)庫會話實例sqlSessionsqlSession = sqlSessionFactory.openSession();/單個,根據(jù)用戶id用戶User user = sqlSe
16、ssion.selectOne(test.findUserById, 10);根據(jù)用戶名模糊用戶列表文件lparameterType:定義輸入到 sql 中的類型,$value表示輸入?yún)?shù)將$value替換,做字串的拼接。注意:如果是取簡單數(shù)量類型的參數(shù),括號中的參數(shù)名稱必須為 valueresultType:定義結(jié)果類型。l 測試代碼select * from user where username like %$value%/ 輸出用戶System.out.println(user); catch (Exception e) e.printStackTrace(); finally if
17、(sqlSession != null) sqlSession.();/ 根據(jù)用戶名稱模糊用戶Testpublic void testFindUserByUsername() / 數(shù)據(jù)庫會話實例SqlSession sqlSession = null;try / 創(chuàng)建數(shù)據(jù)庫會話實例sqlSessionsqlSession = sqlSessionFactory.openSession();/單個,根據(jù)用戶id用戶List list = sqlSession.selectList(test.findUserByUsername, 小明);System.out.println(list.size(
18、); catch (Exception e) e.printStackTrace(); finally if (sqlSession != null) sqlSession.();#和$區(qū)別區(qū)別 1l#:相當(dāng)于SQL 語句中的占位? (PreparedStatement)$: 相當(dāng)于SQL 語句中的連接合 + (Statement)區(qū)別 2l#: 進(jìn)行輸入的時候,會對參數(shù)進(jìn)行類型(如果是 String 類型,那么 SQL 語句會自動加上)$:進(jìn)行輸入的時候,將參數(shù)原樣輸出到 SQL 語句中l(wèi) 區(qū)別 3# : 如果進(jìn)行簡單類型(String、Date、8 種基本類型的包裝類)的輸入時,#中參數(shù)名
19、稱可以任意$: 如果進(jìn)行簡單類型(String、Date、8 種基本類型的包裝類)的輸入時,$中參數(shù)名稱必須是 valuel$ :SQL 注入問題 ,使用 OR 1=1 關(guān)鍵字將條件忽略添加用戶文件l insert into user(username,birthday,sex,address) values(#username,#birthday,#sex,#address)l 測試代碼/ 添加用戶Testpublic void testInsert() / 數(shù)據(jù)庫會話實例SqlSession sqlSession = null; try / 創(chuàng)建數(shù)據(jù)庫會話實例sqlSessionsqlSe
20、ssion = sqlSessionFactory.openSession();/ 添加用戶User user = new User(); user.setUsername(); user.setAddress(河南鄭州); user.setSex(1); user.setPrice(1999.9f);sqlSession.insert(test.insertUser, user);/提交事務(wù)sqlSmit(); catch (Exception e) e.printStackTrace(); finally l 主鍵返回select LAST_INSERT_ID()insert into u
21、ser(username,birthday,sex,address)values(#username,#birthday,#sex,#address);添加 selectKey實現(xiàn)主鍵返回。* keyProperty:指定返回的主鍵,在 pojo 中的哪個屬性* order:selectKey中的 sql 的執(zhí)行順序,是相對與 insert 語句來說。由于 mysql 的自insert 語句之后主鍵生成,所以這里 selectKey 的執(zhí)行順序為after。* resultType:返回的主鍵對應(yīng)的 JAVA 類型* LAST_INSERT_ID():是 mysql 的函數(shù),返回 auto_i
22、ncrement 自增列新id 值。OGNL對象導(dǎo)航圖語言|-User(參數(shù)值對象)|-username-張三|-birthdayif (sqlSession != null) sqlSession.();|-sex-男|-dept - Department|-name|-noOGNL 表去獲取 Department 對象的 name 屬性:刪除用戶文件ll 測試代碼/ 根據(jù)id刪除用戶Testpublic void testDelete() / 數(shù)據(jù)庫會話實例SqlSession sqlSession = null; try / 創(chuàng)建數(shù)據(jù)庫會話實例sqlSessionsql
23、Session = sqlSessionFactory.openSession(); delete from user where id=#id修改用戶文件ll 測試代碼/ 更新用戶Testpublic void testUpdate() update user setusername=#username,birthday=#birthday,sex=#sex,address=#address where id=#id/ 刪除用戶sqlSession.delete(test.deleteUserById,18);/ 提交事務(wù)sqlSmit(); catch (Exception e) e.pr
24、intStackTrace(); finally if (sqlSession != null) sqlSession.();/ 數(shù)據(jù)庫會話實例SqlSession sqlSession = null;try / 創(chuàng)建數(shù)據(jù)庫會話實例sqlSessionsqlSession = sqlSessionFactory.openSession();/ 添加用戶User user = new User();user.setId(16);user.setUsername();user.setAddress(河南鄭州);user.setSex(1);user.setPrice(1999.9f);sqlSes
25、sion.update(test.updateUser, user);/ 提交事務(wù)sqlSmit(); catch (Exception e) e.printStackTrace(); finally if (sqlSession != null) sqlSession.();6 Mybatis 開發(fā)Dao 層原始 dao 開發(fā)方式說明:該種方式來說只會出現(xiàn)在那些從 ibatis 項目遷移過來的項目。生命周期(作用范圍)l1.sqlsession:級別2.sqlsessionFactory:全局范圍(應(yīng)用級別)3.sqlsessionFactoryBuilder:級別dao 接口和實現(xiàn)類lpu
26、blic interface UserDao public User findUserById(int id) throws Exception;public void insertUser(User user) throws Exception;public class UserDaoImpl implements UserDao /注入SqlSessionFactorypublic UserDaoImpl(SqlSessionFactory sqlSessionFactory)this. sqlSessionFactory = sqlSessionFactory;private SqlSe
27、ssionFactory sqlSessionFactory;Overridepublic User findUserById(int id) throws Exception SqlSession session = sqlSessionFactory.openSession();User user = null;try /通過sqlsession調(diào)用selectOne獲取一條結(jié)果集/參數(shù)1:指定定義的statement的id,參數(shù)2:指定向statement中傳遞的參數(shù)user = session.selectOne(test.findUserById, id);System.out.pr
28、intln(user); finallysession.();return user;Override文件lselect * from user where id = #idPublic void insertUser(User user) throws Exception SqlSession sqlSession = sqlSessionFactory.openSession(); try sqlSession.insert(insertUser, user); sqlSmit(); finallysession.();l 測試代碼private SqlSessionFactory sql
29、SessionFactory;Beforepublic void init() throws Exception SqlSessionFactoryBuildersessionFactoryBuilder=newSqlSessionFactoryBuilder();InputStreaminputStream= Resources.getResourceAsStream(SqlMapConfig.xml);sqlSessionFactory = sessionFactoryBuilder.build(inputStream); select LAST_INSERT_ID()insert int
30、o user(username,birthday,sex,address) values(#username,#birthday,#sex,#address)mapper開發(fā)方式(JDK 的方式)動態(tài)分為兩種方式:基于 JDK 的動態(tài)-有接口的類進(jìn)行動態(tài)基于 CGLIB 的動態(tài)-通過子類繼承父類的方式去進(jìn)行。XML 方式l 使用只需要開發(fā) Mapper 接口(dao 接口)和 Mapper 約束文件,不需要編寫實現(xiàn)類。l 開發(fā)規(guī)范Mapper 接口開發(fā)需要遵循以下規(guī)范:1、 Mapper 接口的類路徑與 Mapper.xml 文件中的 namespace 相同。2、 Mapper 接口名稱和
31、Mapper.xml 中定義的每個 statement 的 id 相同。Testpublic void testFindUserById() UserDao userDao = new UserDaoImpl(sqlSessionFactory); User user = userDao.findUserById(22); System.out.println(user);l mapper文件l mapper 接口/* 用戶管理mapper*/public interface UserMapper /根據(jù)用戶id用戶select * from user where id = #id3、 Map
32、per 接 口的 輸 入 參 數(shù) 類 型 和 mapper.xml 中 定 義 的 每 個 sql 的parameterType 的類型相同。4、 Mapper 接口的返回值類型和 mapper.xml 中定義的每個 sql 的 resultType 的類型相同。l 加載文件l 測試代碼public class UserMapperTestprivate SqlSessionFactory sqlSessionFactory;Beforepublic void setUp() throws Exception /mybatis配置文件String resource = SqlMapConfig
33、.xml;InputStream inputStream = Resources.getResourceAsStream(resource);/使用SqlSessionFactoryBuilder創(chuàng)建sessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);Testpublic void testFindUserById() throws Exception public User findUserById(int id) throws Exception;注解方式(后續(xù)講解)7 全局
34、配置文件配置內(nèi)容SqlMapConfig.xml 中配置的內(nèi)容和順序如下:properties(屬性)settings(全局配置參數(shù))/獲取sessionSqlSession session = sqlSessionFactory.openSession();/獲取mapper接口的對象UserMapper userMapper = session.getMapper(UserMapper.class);/調(diào)用對象User user = userMapper.findUserById(1); System.out.println(user);/關(guān)閉session session.();prop
35、ertiesSqlMapConfig.xml 可以java 屬性文件中的配置。1、在 classpath 下定義 perties 文件,.driver=com.mysql.Driver.url=:mysql:/localhost:3306/ssm?characterEncoding=utf-8.username=root.password=roottypeAliases(類型別名)typeHandlers(類型處理器)-Java 類型-類型-數(shù)據(jù)庫類型轉(zhuǎn)換objectFactory(對象工廠)plugins(插件)-可以在 Mybatis 執(zhí)行 SQL 語句的流程中,一腳去實現(xiàn)一些
36、功能增強,比如 PageHelper 分頁插件,就是第實現(xiàn)的一個插件 environments(環(huán)境集合屬性對象)environment(環(huán)境子屬性對象) tranionManager(事務(wù)管理) dataSource(數(shù)據(jù)源)mappers(器)2、在 SqlMapConfig.xml 文件中,perties 中的屬性,具體如下:properties除了可以使用 resource 屬性,properties 文件中的屬性。還可以在properties內(nèi)定義 property 子來定義屬性和屬性值,具體如下:typeAlias別名的作用:就是為了簡化文件中 parameterTyp
37、e 和 ResultType 中的 POJO 類型名稱編寫。默認(rèn)支持別名別名的類型_bytebyte_longlong_shortshort_intint_integerint_doubledouble_floatfloat_booleanbooleanstringString注意: MyBatis 將按照下面的順序來加載屬性:u properties 元素體內(nèi)定義的屬性。u properties 元素中 resource 或 url 加載的屬性,它會覆蓋已的同名屬性。自定義別名在 SqlMapConfig.xml 中進(jìn)行如下配置:byteBytelongLongshortShortintIn
38、tegerintegerIntegerdoubleDoublefloatFloatbooleanBooleandateDatedecimalBigDecimalbigdecimalBigDecimalmapMapmappers使用相對于類路徑的資源如:使用絕對路徑加載資源如:使用 mapper 接口類路徑,加載文件。如:注意:此種要求 mapper 接口名稱和 mapper文件名稱相同,且放在同一個目錄中。指定包下的所有 mapper 接口,來加載文件。如:注意:此種要求 mapper 接口名稱和 mapper文件名稱相同,且放在同一個目錄中。8 輸入和輸出parameterType(輸入類型
39、)parameterType 屬性可以的輸入?yún)?shù)類型有:l Map 類型和POJO 類型的用法類似,本課程只講 POJO 類型的相關(guān)配置。l List 類型在動態(tài) SQL 部分進(jìn)行講解。傳遞簡單類型參考入門案例中的根據(jù)用戶 ID用戶的案例。傳遞 pojo 對象l 參考入門案例中的添加用戶的案例。l 參數(shù)的獲取是通過 OGNL 表進(jìn)行獲取的簡單類型、POJO 類型、Map 類型、List 類型(數(shù)組)。傳遞 pojo 包裝對象l 包裝對象:pojo 類中包含 pojo。l OGNL 表會隨著對象的嵌套而相應(yīng)的發(fā)生層級變化 需求l 在綜合的場景中,需要根據(jù)不同的條件進(jìn)行用戶列表的。l
40、 這些條件中,可能會用戶中的用戶名稱,還可能商品的商品名稱。 分析1、通過 mybatis 傳遞多個條件時,需要使用 pojo 或者 map 來傳遞。2、通過 pojo 傳遞參數(shù)的話,需要定義一個包裝對象,該對象用戶數(shù)據(jù)或者商品數(shù)據(jù)。 QueryVO定義包裝對象 QueryVOpublic class QueryVO private User user; SQL 語句SELECT * FROM user where username like %小明%Mapper 文件Mapper 接口測試在 UserMapp
41、erTest 測試類中,添加以下測試代碼:Testpublic void testFindUserList() throws Exception SqlSession sqlSession = sqlSessionFactory.openSession();/* 用戶管理mapper*/public interface UserMapper /根據(jù)用戶id用戶public User findUserById(int id) throws Exception;/用戶列表public List findUserByUsername(String username) throws Exception;/添加用戶public void insertUser(User user)throws Exception;/綜合用戶列表public List findUserL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工日志填寫樣本的格式要求
- 設(shè)計思維在醫(yī)療技術(shù)創(chuàng)新中的應(yīng)用
- 智能科技在家?;又械膽?yīng)用與前景展望
- DB4415T 50-2025黑芝麻種植技術(shù)規(guī)程
- 個人貸款合同協(xié)議書范本
- 親屬間房產(chǎn)贈與合同
- 二手建筑設(shè)備買賣合同樣本
- 乒乓球館租賃合同書范本
- 不可撤銷勞動合同案例析:勞動者權(quán)益保障
- 專業(yè)工作室服務(wù)合作合同樣本
- 香港朗文4B單詞及句子
- 數(shù)據(jù)中心運維方案
- 小龍蝦啤酒音樂節(jié)活動策劃方案課件
- 運動技能學(xué)習(xí)與控制課件第五章運動中的中樞控制
- 財務(wù)部規(guī)范化管理 流程圖
- 蘇教版2023年小學(xué)四年級數(shù)學(xué)下冊教學(xué)計劃+教學(xué)進(jìn)度表
- 小學(xué)作文指導(dǎo)《難忘的一件事》課件
- 斷絕關(guān)系協(xié)議書范文參考(5篇)
- 量子力學(xué)課件1-2章-波函數(shù)-定態(tài)薛定諤方程
- 最新變態(tài)心理學(xué)課件
- 【自考練習(xí)題】石家莊學(xué)院概率論與數(shù)理統(tǒng)計真題匯總(附答案解析)
評論
0/150
提交評論