




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1框架介绍
2回顾
2.1JDBC
Jdbc
〃1注册出动“〃
Class,forName(*com.nysql.jdbc.Driver");
//2获得连接
java.sql.Connectionconn=DriverManager.getConnection(url,user,password)
*url请求路径(设置数据库)
jdbc:nrysql://localhost:3305/数括库名称
*user数据库账号
*password密码
//3处理sql语句Statement、PrepsreStatement
PrepareStatementpsrot=conn.preparedStatement("select*froint_userwhereuserid=?")
insertintot_user(userid,username,password)values(?,?,?)
//4设置实际参数
psRt.setString(1,"uOOl")
1/5执行
ResultSetrs=psmt.executeQuery0;〃执行查询DQL(数据查询语言)
intr=psmt.executeUpdateO;/施行增删改DHL(数据榛纵语言)
2.2DBUtils
3ORM框架
ORM,册
对象关系映射(英语:ObjectRelationalMapping,简称ORM,或O/RM,s^O/Rmapping),是一种程序技术,用于实
现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的-虚拟对象数据
库一。
hibernate就是一个ORM框架
4hibernate介绍
版木:hibernate-distribution-3.6.lO.Fina1—dist
4.1分析
t_user表(关系)
hibernate框架
m
hlibe
驱fg.核儿包置文件
动at
*名
连
*接
用
*户username
密
*玛
方
*言
映射
User.hbro.xml
<classname="cn・itcast・User“table=^t_uscrv>
…映射
'>;Book.hbro.xml
I
4.2什么是hibernate
•Hibernale是轻量级JavaEE起用的持久层解决方案,是一个关系数据库ORM框架
轻量级:使用hibernatc较少的依赖hibernate框架,只使用少量的api进行操作。
•Hibemale提供了对关系型数据库增删改查操作
•流行数据库框架
1JPAJavaPersistenceAPLJPA通过JDK5.()注解或XML描述对象一关系表的映射关系(只有接口规
范)
gsun对ORM框架推出一个规范(接口,没有实现),hibernatc支持jpa
,2Hibemale最流行ORM框架,通过对象-关系映射配置,可以完全脱离底层SQL
。3MyBads本是apache的一个开源项目iBatis,支持普通SQL查询,存储过程和高级映射的优秀持
久层框架
4ApacheDBUtils、SpringJDBCTemplate
4.3优点
为什么要使用Hibernate
•Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据
访问层繁琐的重复性代码
•Hibernate是一个基于jdX的主流持久化框架,是一个优秀的QWX)
实现,它很大程度的简化了da。层编码工作
•Hibemate使用java的反射机制
•Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵
活性很出色。它支持很多关系型数据库,从一对一到多对多的各
种复杂关系
5he1loworld(重要)
5.1编写流程
•导入jar包
•核心配置文献:hibernaie.cfg.xml
•java对象:javabean
•映射文献:*.hbm.xml
。需要将hbm.xm1映射文献添加到核心配置hibernate.cfg.xml中
•操作api,进行添加操作:save
5.2导入jar包
jar►ssh,hibernate-distribution-3.6.10.Final►
i►hibernate-distribution-3.6.10.Final►lib►
fc(H)
刻录新建文件夹
帮助(H)
名称惨改日期
刻录新建文咛夹
Xdocumentation2012/2/81£
lib2012/2/81«名称修改日期
上
project2012/2/8li
口
2012/2/8U
手2012/2/8
hibernateloqo.qif2012/2/8If
两个文件夹中的所有2012/2/8
hibemate3.jar2012/2/8
Whibernate-testing.jar2012/2/81«2012/2/8
.Igpl-txt2012/2/8If2012/2/8
■0叱
包antlr-2.7.6.jarhibernate将HQL语句解析成SQL
幅commons-collections-3.1.jarjdk集合增强包
但dom4j-1.6.1.jar解析xm戳置文件
ahibernate-jpa-2.0-api-1.0.1.Final.jarsun提供规范
鼠hibernate3jar核心ja包
域javassist-3.12Q.GA.jar用于生成代理类(字节码增强)工具包
也jta-l.l.jarjavatransactionapi,java事务叩i(分布式事务管理)
.mysql-connector-java-5.1.28-bin.jar数据库mysq驱动
的slf4j-api-1.6.1.jar日志框架
—4b
5.3核心配置文献
•位置:src
•名称:hibemate.cfg.xmi
•约束:
u_hibernate3.jar\org\hibernate-ZIP压缩文件解包大4
名称O
g)FlushMode,class
j]hibernate-configuration-3.0.dtd
j]hibernate-mapping-3.0.dtd
J凶hibernate.cfg.xml但hibernate-configuration-3.0.dtd
1-<!--Hibernatefile-basedconfigurationdocument.
2
3<!DOCTYPEJiibernate-configurationPUBLIC
4"-//Hibernate/HibernateConfigurationDTD3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6
<!DOCTYPEhibernate-configurationPUBLIC
//Hibernate/HibernateConfigurationDTD3.0//EN"
“http://www.hibernate.org/dtd/hibernate-configuration-
3.O.dtd">
•正文内容
<?xmlversion=Ml.0nencoding=Mt/7F-<^"?>
<!DOCTYPEhibemate-configurationPUBLIC
"-//Hibernate/HibernateConfigurationDTD3.0//EN*'
"http://www.hibernate.org/dtd/hibernate-configuration-3.
0.dtd">
<hibernate-con-Figuration>
o<session-factory>
。<!--#1基本4项
*注意:必须手动创建数据库,createdatabaseh_day01;
0——
o®<propertyname="力iber”ate.connection.driver_cLass">com.mysq
1.jdbc.Driver</property>
«><propertyname=11hibernate,connection.urL">jdbc:mysq1://localh
ost:3306/h_day01</property>
«<propertyname="h/bemate,connection.usernamen>root</pro
perty>
oo<propertyname=',hibernate.connection.password”>1234</propert
y>
。<!--#2方言-->
。。<propertyname=11hibernate.diaLect">org.hibemate,dialect.MyS
QL5Dia1ect</property>
30
。<!--#3自动创建表
一*假如表不存在,抛异常:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxE
rrorException:Tab1e'h_day01.t—book'doesn'texist
00一一〉
。<propertyname=Hhibernate.hbm2dd1.auto”>update</property>
<!--添加映射文献一》
。<mappingresource=ucn/itcost/a_heLLo/Book.hbm.xmL"/>
00
J</session-factory>
V/hibernate-configuration>
5.4java对象:JavaBean
packagecn.itcast.a_hello;
publicclassBook{
privateIntegerbid;。//注意:类型必须是整形
privateStringtitle;
privateStringauthor;
5.5映射文献
•位置:和javabean同包
・名称:Book.hbm.xm1
•约束:
xhibernate.cfg.xml团Bookjava区)Book.hbm.xml@hibernate-mapping-3.0.dtd^3
1■<!--HibernateMappingDTD.
2
3<!DOCTYPEhibernate-mappingPUBLIC
4"-//Hibernate/HibernateMappingDTD3.0//EN"
5"http://www.hibernate.Org/dtd/hibRrnate-mapping-3.0.dtcT>
<!DOCTYPEhibernate—mappingPl)BLIC
//Hib/rnate/HibernateMappingDTD3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
•E文内容:
<?xmlversion="1.0"encoding="UTF—SM?>
<!DCX2TYPEhibernate-mappingPUBLIC
"-//Hibernate/HibemateMappingDTD3.0//ENn
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
。〈classname=Hcn.itcast.a_he11o.Book'12345table=Ht_book">
ooV!・一用于配置数据库中表的主键的・一>
。<idname="bid">
。<!--固定值一)
。。<generatorclass="native"></generator>
。</id>
<!--其他属性配置一一>
。。<propertyname="tit1e"></property>
<propertyname="author">V/property>
</c1ass>
</hibernate-mapping>
•注意:
将映射文献添加到核心配置文献(hibemate.cfg.xm1)中
<!一添加映射文献一)
Vmappingresource="cn/itcast/ahelLo/Booh.hbm.xm/"/>
5.6操作api
@Test
。pub1icvoiddemo01(){
Bookbook=newBook();〃注意:必须要手动bid的值
obook.setTitle(“宝典”);
0book.setAuthor("关系");
0
0
。//I加载核心配置文献
。Configurationconfig=newConfiguration().configure();
。〃2获得sessionFactory,相称于连接池
。SessionFactoryfactory=config.bui1dSessionFactory();
。//3获得session,相称于idbc连接
。Sessionsession=factory.opensession();
。//4启动事务
Transactiontransact!on=session.beginTrans
action();
00
。。//操作:添加
。session.save(book);
//5提交或回滚commit()Irol1back()
6otransaction,commit();
。//6释放资源
oosession.c1ose();
factory.close();
}
6整合日记1og4j
6-1java项目提醒
底Problems[■:WebBrowserConsole渝Servers')飞Progress]网JUnit|■X%|Ini
<terminated>TestApp.demoOl[JUnit]D:\iava\jdk\jdkl.7.0_04\bin\javaw.exe(2015-2-27上午10:39:06)
SLF43:Failedtoloadclass"org.slf4j.impl.StaticLoggerBinder".
SLF4J:Defaultingtono-operation(NOP)loggerimplementation
SLF4J:Seehttp://www.slf4j.org/codes.html#StaticLoggerBinderforfurtherdetails.
•日记没有生效
6.2日记框架介绍
6.3整合Iog4j
•log4j核心jar
•过滤jar
•log4j核心配置文献
注意:只需要添加文献,不需要读懂内容,之后讲解。
§slf4j-1.7.5.zip-WinRAR
文件(F)命令(C)IM(S)收藏夫(0)选项(N)帮助(H)
§logq-1.2.17.zip-WinRAR
由文件(F)命令(QTM(S)物多善嗡出愉胭《
添加解压到测试查看删除查找
:;睿困嗡国港slf4j-1.7.5.zip\slf4j-1.7.5-ZIP压缩文伟解包大小3
;lf激口解庭I」蜘
名称O
图9Iog4j-1.2.17.zip\a
|1>1slf4j-jd-1.7.5jar
名称Q
修Islf4j-jdkl4-1.7.5-sources.jar
srcI<>jslf4j-jdkl4-1.7.5.iar
tests国slf4j-log4jl2-1.7.5-sources.jar过遐ja能源码
*Iog4j-1.2.17.jar
3slf4j-log4jl2-1.7.5.jar
囱perties.sample(*>Jslf4j-migrator-1.7.5.jar
/Ic7hibernate_day01
/0src
田cn.itcast.a_hello
Qhibernate.cfg.xml
t>loiocommons-collections-3.1.jar
t>§dom4j-1.6.1.jar
t>oiihibernate-jpa-2.0-api-1.0.1.FinalJar
>@hibernate3.jar
逅javassist-3.12.0.GA.jar
>§jta-l.l.jar
t>遍mysql-connector-java-5.1.28-binjar
t>@slf4j-api-1.6.1.jar
t>昼Iog4j-1.2.17.jar
»@slf4j-log4jl2-1.7.5.jar
三川向■-----------------------
.〜i:i_
7CURD操作
7.1添加
。@Test
«publicvoiddemo01(){
。//添加
Bookbook=newBook();〃注意:必须要手动bid的值
。book.setTitle("宝典,,);
abook.setAuthor("关系");
0
6//I加载核心配置文献
Configurationconfig=newConfiguration().configure
();
//2获得sessionFact。ry,相称于连接池
。SessionFactoryfactory=config.bui1dSessionFactory();
//3获得session,相称于[dbc连接
。。SRSSi。nsession=factory.openSession();
。。//4启动事务
。Transactiontransaction=session,beginTransaction();
00
。//操作:添加
session.save(book);
。//5提交或回滚commit()|rollback()
。transaction.commit();
。。//6释放资源
。session.close();
。。factory,close();
。}
7.2更新
@Test
publicvoiddemo02(){
//更新bid=3葵加
。Bookbook=newBook();
。book.setBid(3);
。book.setTitle("葵花");
。Configurationconfig=newConfiguration().configure();
。。SessionFactoryfactory=config.buildSessionFactory();
oSessionsession=factory.openSession();
Transact!ontransaction=session.beginTransaction();
//操作
osession.update(book);〃通过id更新所有的数据,假如没TF设立值,将更新
默认值
«transaction.commit();
。。session.c1ose();
oofactory,close();
}
7.3删除
@Test
®publicvoiddemo03(){
//删除bid=2
。Bookbook=newBook();
oobook.setBid(2);
。Configurationconfig=newConfiguration().configure();
。SessionFactoryfactory=config.bui1dSessionFactory();
Sessionsession=factory.openSession();
oTransactiontransaction=session.beginTransaction();
。〃删除,通过id删除
。session.de1ete(book);
transaction.commit();
s。session.close();
。。factory.close();
0
0}
7.4通过id查询
@Test
。publicvoiddemo04(){
。6//通过bid=4
。。Integerbid=4;
。Configurationconfig=newConfiguration().configure();
®®SessionFactoryfactory=config,bui1dSessionFactory();
Sessionsession=factory.openSession();
Transactiontransaction=session.beginTransaction();
0
。。//通过id查询
ooBookbook=(Book)session,get(Book.class,bid);
。System.out.println(book);
00
。transact!omit();
o®session.close();
factory.c1ose();
3}
7.5查询所有
@Test
pub1icvoiddemo35(){
。//查询所有
。。Configurationconfig=newConfiguration().configure();
。SessionFactoryfactory=config.bui1dSessionFactory();
◎Sessionsession=factory.openSession();
Transactiontransaction=session.beginTransact
ion();
00
。〃需要hibernate提供也1语句进行查询
*hq1:hibernatequery1anguage查询语言,面向对象的查询语言,类似
与sql语句。
。。〃*sq1语句查询所有:se1ect*fromt_book--sql语句使用的表
。。//*也1语句查询所有:fromBook。。。--hq1语句使用的对象
oQueryquery=session.ereateQuery("fromBook");
6oList<Book>a11Book=query.1ist();
0
»for(Bookbook:a1iBook){
®System.oi/1.printIn(book);
°}
0
3transaction.commit();
。session.close();
。factory.close();
7.6分页查询
@Test
opublicvoiddemo06(){
°〃分页杳询
。//*sq1语句分页:select*fromt_book1imit?,?
。。//*开始索引:start工ndex,从0开始。算法:startindex=(pageNum-1)
pageSize
o。//*每页显示个数:pageSize
。Configurationconfig=newConfiguration().configure();
。SessionFactoryfactory=config.buildSessionFactory();
。Sessionsession=factory.openSession();
doTransactiontransaction=session.beginTnansaction();
。//分页,在查询所有基础I-.
。Queryquery=session.createQuery(HfromBook");
60//###第一页
。//*设立开始索引
。。//query.setFirstResult(0);
-//*设立每页显示个数
。。//query.setMaxResu1ts(2);
。〃###第二页
//*设立开始索引
^query.setFirstResult(2);//(2—1)*2
。。〃*设立每页显示个数
。query.setMaxResu1ts(2);
0
List<Book>a11Book=querv.lis[();
for(Bookbook:a1IBook){
。。System.out.print1n(book);
6}
00
«>otransaction.commit。;
。session,close();
oofactory.close();
0
8api详解
8.1体系结构
O
java应用程月
Application
PersistentObjects
P。;持久对象--------
HIEMATE
XMLMapping
properties
*新版本使用xml/
hibernate.cfg.xml/
Database
VO:Valueobject,值对象,使用在web®,用于显示数据。
boibusii心sobjccl,业务对象,使用在servi。e层,根据不同页面封装对象,也许包含多个PO。
po:persistentobject,持久对象,与数据库进行数据交互的。
一般情况使用Javabean将三个对象统一。
8.2Configuration对象
8.2.1构造
newConfiguration();
•月于加载src下的hibernale.properties文献,此文献为hibernate老版本中的核心配置文献,但现在
已经不使用。
内容:Properties中key=value方式
。例如:/libernote.connection.driver_cLass=com.mysq1.jdbc.Driver
•hibernate提供参考文献
4%hiberante%/project/etc/hibernate.properties
►hibernate-distribution-3.6.10.Final►project►etc
帮助(H)
刻录新建文件夹
宜1
名称修改日期
CacheSequences.xml2012/2/818:26XMI
,cvs-dup-eol-fixer2012/2/818:26文件
ehcache.xml2012/2/818:26XMI
hihArn^tArf5Mmi2012/2/818:26XMI
flperties2014/6/1715:29PRC
LJ
8.2.2方法
•核心配置文献
//1.1加载核心方n]配置文件
config.configure();加载的src下,hibemate.cfg.xml
jp.java团hibernate.cfg.xmlRConfiguration.class眼
*/
publicConfigurationconfigure()throwsHibernateException{
configure("/hibernate.cfg.xml");
returnthis;
S「C下的文件,名称固定
}
configured/资源文献途径”),加载指定目录下的资源文献
•映射文献
//*加载指定类目录下的hbm.xml文件
config.addClass(Book.class);
publicConfiguration|addCla^^ClasspersistentClass)throwsMappingException{
StringmappingResourceName=persistentClass.getName().replace('.','/')+".hbm.xml";
Log.info("Readingmappingsfromresource:"+mappingResourceName);
returnaddResource(mappingResourceName,persistentClass.getClassLoader());
)getWame。->cnitcast.a_helo.Book(全限定类名)
replace替拯cn^rtca$t/a_helo/Book
固定字符由hbm.xrri->cn/itca$t/a_helo/8ook.hbm.xmi
*Readmetadatafromtheannotationsassociatedwiththisclass.
hbm.xml后缀固定的,必须与javabean同包。
addResource("xml文献")加载指定位置的映射文献
<!--添加映射文件
<mappingresource="cn/itcast/ahello/Book.hbm.xml"/>
核心配置加载时,hibemale将执行addResource加载配置的映射文献
8.2.3总结
开发中,必须将hbm.xml配置到hibernate.cfg.xml文献中
学习中,使用addClass加载执行类的hbm.xml文献,简化配置操作。
8.3SessionFactory对象
•SessionFactory相称于连接池,可以提供操作数据的Session对象。
•SessionFactory是线程安全,及不同的线程都可以使用。且可以保存,不同的线程获得session必须不
同。
8.3.1获得方式
SessionFactoryfactory=config.buiIdSessionFactory();
8.3.2方法
//3.1获得一个新的session,每执行一次openSession()将获得一个新的s
ession
Sessionsession=factory.openSession();
〃3.2获得当前线程中绑定的session,同一个线程共享一个sessi。n
//*注意:默认情况下不能使用,必须进行配置(暂时不用)
Sessionsession2=factory.getCurrentSession();
8.3.3工具类
pub1icclassH3Utils{
o
。//获得SessionFactory。相称于连接池,只有■—个
oprivatestaticSessionFactoryfactory;
ostatic{
sory=newConfiguration().configure().bui1dSe
ssionFactory();
。)
3/女*
o*获得一个新的session
。*@return
*/
publicstaticSessionopenSession(){
oreturnfactory.o[)enSession();
°}
/**
火获得线程中绑定的session
o*@return
3*/
publicstaticSessiongetCurrentSession(){
◎returnfactory.getCurrentSession();
)
}
8.4Session对象
•相称于JDBC的连接Connection,用于操作PO(持久)对象
•session线程不安全的,及不同的线程必须使用不同的session。
♦常用方法:
save:将指定PO保存数据库,底层将触发一条insert语句。
persist是jpa提供的保存对象的方法,与savc等效的。
。updale:通过id更新所有的数据,底层将触发一条update语句。
savcOrUpdatc:假如没有id值,将执行save及insert语句。
假如有id值,将执行update及update语句。
deIctc:通过id删除
get:通过id查询对象,立即查询,当执行get方法之后,立即触发seleci语句。假如没芍查询到,返回
null
load:通过id查询对象,延迟查询,当执行I。ad方法之后,不触发select语句,直到使用了查询对象
的具体的数据时,才触发select语句。假如没有查询到,将抛异常。
&createQuery:执行HQL语句
ereateSQLQuery:执行sq1语句
crcatcCritcria:hibernate提供QBC语句。(不研究)
snerge:与save0rUpdale非常相似,假如没有id值将执行inserl语句
假如有id值,将执行seiect语句,假如数据没有变化,将不触发任何语句。
。。。假如数据变化了,将触发updale语句。
8.5事务transaction对象
•启动事务:session.bcginTransaction();
•提交事务:lransactimit();
■回滚事务:transaction.rollback();
•获得当前事务:session.geiTransaction();
//启动
session.beginTransaction();
〃获得当前事务并提交
session.getTransaction().commit();
9核心配置文献详解
•位置:src
•名称:hibernate.cfg.xml
9.1创建数据基本配置
##MySQL
#hibernate.dialectorg.hibemate.diaIect.MySQL5DiaIect
#hibemate.connection.driver_cIasscom.niysqI.jdbc.Driver
#hibernate.connection.urljdbc:mysql://locaIhost:3306/test
#hibernate.connection.usernamegavin
#hibernate.connection.password
##0raclc
#hibernate.dialectorg.hibernate.diaIect.Oracle8iDiaIect
#hibernate.dialectorg.hibernate.dialect.OracIe9iDiaIect
#hibernate.dialectorg.hibemate.dialect.Oracle1OgDia1ect
#hibernate.connection.driver_classoracle.jdbc.driver.OradeDriver
#hibernate.connection.usemameora
#hibemate,conncction.passwordora
#hibcmate.connection.utijdbc:oraclc:thin:@localhost:l521:orc1
9.2内容
<?xmlversion-7.0"encoding="UTF-8”?>
<!DOCTYPEhibernate-configurationPUBLIC
*1-//Hibernate/HibernateConfigurationDTD3.0//EN"
。“http://www.hibernate.org/dtd/hibernate-configuration-3.0,dtd
>
<hibernate-configuration>
®<session-factory>
。<!--#1基本4项
。。。*注意:必须手动创建数据库,createdatabaseh_day01;
3-——>
<propertyname=11hibernate.connection.driver_cLass">c
om.mysql.jdbc.Driver</property>
。<propertyname=uhibemate.connection.urLn>jdbc:mysq1:/
/locaIhost:3306/h_day01</property>
。〈propertyname=n/7ibernote.connection.username">root</propert
y>
3<propertynam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 完整版中考必读名著傅雷家书必读名著试题试题及答案
- 高三数学模拟试卷理科版
- 物业费收缴及催缴流程规范
- 2025年保亭上半年招聘公办学校学科教师28人考前自测高频考点模拟试题及答案详解(必刷)
- 医疗器械使用操作手册
- 情感文学作品《初恋别嚣张》解析
- 宫颈癌规范诊疗指南解析
- 物业管理人员绿色环保工作指南
- 2025水晶琥珀画加工合同范本
- 2025餐饮企业采购合同范本
- 2025重庆市勘测院有限公司招聘6人考试参考题库及答案解析
- 钢厂安全教育培训课件
- 第一部分 第七章 第41课时 气象灾害(重难课时)2026年高考地理第一轮总复习
- 2025年中考数学真题知识点分类汇编之二次函数(四)
- 2025年注册会计师题库带答案分析
- 呼吸科出科考试题临床及答案2025版
- 设计管控管理办法
- 物流月结合同协议书范本
- 过敏性皮炎的治疗及护理
- 房颤内科护理学
- 政策变迁课件
评论
0/150
提交评论