版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章SpringBoot访问
SQL数据库第5章SpringBoot访问SQL数据库5.1
配置数据源5.2
使用JdbcTemplate5.3
使用SpringDataJPA5.4
整合MyBatis25.1配置数据源数据库分为两种,即关系型数据库和非关系型数据库。关系型数据库是指通过关系模型组织数据的数据库,并且可以利用外键等保持一致性,如MySQL、Oracle、SQLServer等;而非关系型数据库其实不像是数据库,更像是一种以key-value模式存储对象的结构,如Redis、MangoDB等。
SpringFramework为访问SQL数据库提供了广泛的支持。从直接使用JdbcTemplate进行JDBC访问到完全的对象关系映射(objectrelationalmapping)技术,比如Hibernate、Mybatis。SpringData提供了更多级别的功能,直接从接口创建的Repository实现,并使用了约定从方法名生成查询。本节讲解SpringBoot如何使用MySQL、SQLServer、Oracle等不同的关系型数据库。
35.1配置数据源1.使用MySQL数据库在SpringBoot中使用MySQL数据库,以MySQL8.0为例,在pom.xml文件中添加依赖,并在perties文件中配置数据源信息。(1)在pom.xml文件中添加MySQL依赖,代码如下所示。
(2)在perties配置文件中配置数据源信息,代码如下所示。4<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope></dependency>
#数据库驱动spring.datasource.driver-class-name=
com.mysql.cj.jdbc.Driver#数据库地址spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC#数据库用户名spring.datasource.username=root#数据库密码spring.datasource.password=1234565.1配置数据源2.使用SQLServer数据库
在SpringBoot中使用SQLServer数据库。(1)在pom.xml文件中添加SQLServer依赖,代码如下所示。
(2)在perties配置文件中配置数据源信息,代码如下所示。5<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope></dependency>
spring.datasource.driver-class-name=
com.microsoft.sqlserver.jdbc.SQLServerDriverspring.datasource.url=jdbc:sqlserver://localhost:1433;DatabaseName=testspring.datasource.username=saspring.datasource.password=1234565.1配置数据源3.使用Oracle数据库在SpringBoot中使用Oracle数据库。(1)在pom.xml文件中添加Oracle依赖,代码如下所示。
(2)在perties配置文件中配置数据源信息,代码如下所示。6<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<scope>runtime</scope></dependency>
spring.datasource.driver-class-name=
oracle.jdbc.driver.OracleDriverspring.datasource.url=jdbc:oracle:thin:@localhost:1521:testspring.datasource.username=adminspring.datasource.password=1234565.2使用JdbcTemplate
JDBC(JavaDataBaseConnectivity)是用于连接数据库的规范,也就是用于执行数据库SQL语句的JavaAPI。JdbcTemplate是Spring对JDBC的封装,目的是让JDBC更加易于使用,替我们完成所有的JDBC底层工作。因此,对于数据库的操作,不再需要每次都进行连接、打开、关闭了。通过JdbcTemplate不需要进行全局修改,就可以轻松地应对开发人员常常要面对的增删改查的操作。更为关键的是,JdbcTemplate对象也是通过自动配置机制注册到Ioc容器中,自动化配置类是JdbcTemplateAutoConfiguration。在JdbcTemplate中,提供了大量的查询和更新数据库的方法,SpringJDBC就是使用这些方法来操作数据库的,使用JdbcTemplate类可实现对数据表的数据进行增删改查操作。75.2.1JdbcTemplate增删改的操作
update()方法可以完成增加、修改和删除操作,其常用方法具体介绍如下。intupdate(Stringsql):该方法是最简单的update方法重载形式,可以直接传入SQL语句并返回受影响的行数。intupdate(PreparedStatementCreatorpsc):该方法执行从PreparedStatementCreator返回的语句,然后返回受影响的行数。intupdate(Stringsql,PreparedStatementSetterpss):该方法通过PreparedStatementSetter设置SQL语句中的参数,并返回受影响的行数。intupdate(Stringsql,Object...args):该方法使用Object...args设置SQL语句中的参数,要求参数不能为空,并返回受影响的行数。85.2.1JdbcTemplate增删改的操作下面通过示例讲解使用JdbcTemplate的update()方法实现对MySQL数据库中的数据表进行增删改的操作,步骤如下。
(1)在MySQL数据库中,新建一个chapter05的数据库,并在新建user数据表,输入几条记录,其表结构如图5-1所示。(2)新建一个SpringBoot工程chapter05jdbctemplate,Group和Packagename为com.yzpc,在Dependencies依赖中选择Web节点下的SpringWeb依赖和SQL节点下的JDBCAPI、MySQLDriver依赖,单击Finish按钮,如图5-2所示。pom.xml文件中添加的依赖代码,代码如下所示。9<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>5.2.1JdbcTemplate增删改的操作
在项目的perties配置文件中配置数据库基本连接信息,这样JdbcTemplate才能正常连接到数据库,如下所示。(3)在项目src/main/java/路径下的com.yzpc包中,新建一个pojo包,并在该包中新建User实体类,代码如下所示。(4)在项目src/main/java/路径下的com.yzpc包中,新建一个dao包,并在该包中新建UserDao接口,并在接口中定义添加、修改、删除用户的方法,代码如下所示。在com.yzpc.dao包中,新建一个impl包,在该包中创建UserDao接口的实现类UserDaoImpl,并在类中实现添加、修改和删除的方法,这里已添加为例,代码如下所示。10spring.datasource.driver-class-name=
com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/chapter05?&serverTimezone=UTCspring.datasource.username=rootspring.datasource.password=123456packagecom.yzpc.pojo;publicclassUser{
privateintid;
privateStringusername;
privateStringpassword;
//此处省略构造方法
//此处省略相应属性的setter/getter方法
//重写toString方法
@Override
publicStringtoString(){
return"User{"+"id="+id+",username='"+username+'\''+",password='"+password+'\''+'}';}}packagecom.yzpc.dao;importcom.yzpc.pojo.User;publicinterfaceUserDao{
publicintaddUser(Useruser);
publicintupdateUser(Useruser);
publicintdeleteUser(intid);}@RepositorypublicclassUserDaoImplimplementsUserDao{
@Autowired
privateJdbcTemplatejdbcTemplate;
@Override
publicintaddUser(Useruser){
returnjdbcTemplate.update("insertintouser(username,password)values(?,?)",user.getUsername(),user.getPassword());}
//省略updateUser()、deleteUser()方法}5.2.1JdbcTemplate增删改的操作(5)在src/main/java/路径下的com.yzpc包中,新建一个controller包,在该包中新建UserController类,并在该类中添加增加、删除、修改的方法,这里以添加用户功能为例,代码如下所示。
(6)启动项目,在浏览器中访问http://localhost:8080/addUser,插入数据成功的话,可以看到控制台输出了相应的提示信息,如图5-3所示。在浏览器的页面上也输出了同样的提示信息,如图5-4所示。11@RestControllerpublicclassUserController{//使用@Autowired注解实现UserController对UserDao的依赖注入
@Autowired
privateUserDaouserDao;
@GetMapping("/addUser")
publicStringaddUser(){
intresult=userDao.addUser(newUser("yzpc1","yzpc1"));
Stringmessage;
if(result>0){
message=“成功往数据表中插入了
"+result+"条数据!";}else{
message="插入数据失败!";}
System.out.println(message);
returnmessage;}
//省略updateUser()、deleteUser()方法}5.2.2JdbcTemplate查询的操作JdbcTemplate对JDBC的流程做了封装,提供了大量的query()方法来处理各种对数据库表的查询操作,常用的query()方法如下:Listquery(Stringsql,PreparedStatementSetterpss,RowMapperrowMapper)
Listquery(Stringsql,Object[]args,RowMapperrowMapper)
queryForObject(Stringsql,Object[]args,RowMapperrowMapper)
queryForList(Stringsql,Object[]args,class<T>elementType)125.2.2JdbcTemplate查询的操作下面我们尝试一下从user表中查询数据,在UserDao接口中增加按照id查询用户的方法和查询所有用户的方法,在UserDaoImpl中具体实现两个方法,其实现步骤如下:(1)在UserDao接口中,分别创建一个通过id查询单个用户信息和查询所有用户信息的方法,代码如下所示。(2)在UserDao接口实现类UserDaoImpl中,实现接口中的方法,并使用query()方法分别进行查询,代码如下所示。(3)在UserController类中,添加查询方法getUserById()、getAllUser()来进行查询,代码如下所示。13publicUsergetUserById(intid);publicList<User>getAllUser();//实例化BeanPropertyRowMapper对象,将结果集通过Java的反射机制映射到Java对象中RowMapper<User>rowMapper=newBeanPropertyRowMapper<User>(User.class);@OverridepublicUsergetUserById(intid){
Stringsql="select*fromuserwhereid=?";
returnjdbcTemplate.queryForObject(sql,rowMapper,id);}@OverridepublicList<User>getAllUser(){
Stringsql="select*fromUser";
returnjdbcTemplate.query(sql,rowMapper);}@GetMapping("/getUserById")publicUsergetUserById(intid){
Useruser;
user=userDao.getUserById(id);
if(user!=null){
System.out.println("查询id为"+id+"的User对象为:"
+user);}
returnuser;}@GetMapping("/getAllUser")publicList<User>getAllUser(){
List<User>users=userDao.getAllUser();
if(users!=null){
System.out.println("所有User对象列表为:");
for(Useruser:users){//循环输出结集合中对象
System.out.println(user);}}
returnusers;}5.2.2JdbcTemplate查询的操作
(4)重新运行项目,在浏览器中访问http://localhost:8080/getUserById?id=10001,根据id查询用户控制台输出结果,如图5-9所示。
访问http://localhost:8080/getAllUser,查询所有用户控制台输出结果,如图5-10所示。
如果查询一个不存在的数据,例如http://localhost:8080/getUserById?id=10006,控制台抛出了错误异常,如图5-11所示。145.2.2JdbcTemplate查询的操作
查看DataAccessUtils源代码,看到nullableSingleResult在查到空集合的时候,默认抛出了EmptyResultDataAccessException异常,代码如下所示。修改getUserById()方法代码,在方法体内捕获EmptyResultDataAccessException异常,代码修改如下所示。重新启动项目,测试方法和前面一致。同样,对于getAllUser()方法,去执行查询查询操作时,假设数据表中没有数据,也会抛出EmptyResultDataAccessException,在getAllUser()方法体内补获异常的方法和在getUserById()方法体中基本一致。15@Nullablepublicstatic<T>TnullableSingleResult(@NullableCollection<T>results)throwsIncorrectResultSizeDataAccessException
{
if(CollectionUtils.isEmpty(results)){
thrownewEmptyResultDataAccessException(1);}elseif(results.size()>1){
thrownewIncorrectResultSizeDataAccessException(1,results.size());}else{
returnresults.iterator().next();}}@GetMapping("/getUserById")publicUsergetUserById(intid){
Useruser=null;
try{user=userDao.getUserById(id);
if(user!=null){
System.out.println("查询id为"+id+"的User对象为:"+user);}}catch(EmptyResultDataAccessExceptione){
System.err.println("未查询到id为
"+id+"的记录!");
returnnull;}
returnuser;}5.3使用SpringDataJPA
5.3.1SpringDataJPA介绍
SpringData是Spring的一个子项目,旨在统一和简化各类型数据的持久化存储方式,而不局限于是关系型数据还是非关系型数据库。JPA(JavaPersistenceAPI)即Java的持久层的API,用于对象的持久化,它是一个非常强大的ORM持久化的解决方案。JPA是一个规范化接口,封装了Hibernate的操作作为默认实现,让用户不通过任何配置即可完成数据库的操作。SpringData在JPA规范的基础上,充分利用其优点,提出了SpringDataJPA模块对具有ORM关系数据进行持久化操作。JPA、SpringData和Hibernate关系,如图5-12所示。165.3.1SpringDataJPA介绍
SpringDataJPA是Spring在ORM框架、JPA规范的基础上封装的一套新的JPA应用规范,也是靠Hibernate等ORM框架实现的一种解决方案。它提供了增删改查等功能,可以使用较少的代码实现数据操作,同时还易于扩展。SpringDataJPA是Spring提供的一套对JPA操作更加高级的封装,是在JPA规范下的专门用来进行数据持久化的解决方案。SpringDataJPA通过基于JPA的Repository极大地简化了JPA的写法,在几乎不写实现的情况下,实现数据库的访问和操作。使用SpringDataJPA建立数据访问层十分方便,只需要定义一个继承JpaRepository接口的接口即可。继承了JpaRepository接口的自定义访问接口,具有JpaRepository接口的所有数据访问操作方法,JpaRepository接口的源代码如下所示。17@NoRepositoryBeanpublicinterfaceJpaRepository<T,ID>extendsPagingAndSortingRepository<T,ID>,QueryByExampleExecutor<T>{List<T>findAll(); //查找所有实体List<T>findAll(Sortvar1); //排序、查找所有实体List<T>findAllById(Iterable<ID>var1);//返回指定一组ID实体<SextendsT>List<S>saveAll(Iterable<S>var1);//保存集合
voidflush(); //执行缓存与数据库同步<SextendsT>SsaveAndFlush(Svar1);//强制执行持久化
voiddeleteInBatch(Iterable<T>var1);
//删除一个实体集合
voiddeleteAllInBatch(); //删除所有实体TgetOne(IDvar1);//返回ID对应的实体。若不存在,则返回空值
//查询满足Example的所有对象<SextendsT>List<S>findAll(Example<S>var1);
//查询满足Example的所有对象,并且进行排序返回<SextendsT>List<S>findAll(Example<S>var1,Sortvar2);}5.3.1SpringDataJPA介绍
JpaRepository接口继承了PagingAndSortingRepository接口、QueryByExampleExecutor接口,JpaRepository接口的继承关系,如图5-13所示。JpaRepository接口继承关系中涉及的接口进行说明:Repository接口是SpringDataJPA提供的用于自定义Repository接口的顶级父接口,该接口中没有声明任何方法。CrudRepository接口是Repository的继承接口之一,包含了一些基本的CRUD方法。PagingAndSortingRepository接口继承CrudRepository接口的同时,提供了分页和排序两个方法。QueryByExampleExecutor接口是进行条件封装查询的顶级父接口,允许通过Example实例执行复杂条件查询。185.3.2整合SpringDataJPA下面通过示例来讲解SpringBoot整合SpringDataJPA,步骤如下:(1)新建一个SpringBoot工程chapter05jpa,Group和Packagename为com.yzpc,在Dependencies依赖中选择Web节点下的SpringWeb依赖和SQL节点下的SpringDataJPA、MySQLDriver依赖,单击Finish按钮,如图5-14所示。pom.xml中自动添加的依赖代码,如下所示。
(2)在perties配置文件中加入数据库配置,与5.2.1小节第(2)步中介绍的一致。新建一个chapter05jpa的数据库,接下来设置JPA的基本配置,如下所示。19<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!--省略Web中SpringWeb依赖和SQL中的MySQlDriver依赖代码-->#省略数据库配置的设置,参看5.2.1小节第(2)步,数据库使用chapter05jpa#JPA对应的数据库类型spring.jpa.database=mysql#在控制台打印SQLspring.jpa.show-sql=true#update:项目启动,加载Hibernate时,根据实体类类更新数据库中的表#validate:在加载Hibernate时,验证创建数据表的结构#create:每次加载Hibernate时,重新创建数据表结构,造成数据丢失#create-drop:加载Hibernate时创建,退出时删除表结构#none:启动时不做任何操作spring.jpa.hibernate.ddl-auto=create5.3.2整合SpringDataJPA
(3)在项目的src/mian/java/路径下的com.yzpc包中,新建一个pojo包,并在该包中新建一个User实体类,添加JPA对应的注解进行映射配置,代码如下所示。(4)在项目的src/mian/java/路径下的com.yzpc包中,新建一个repository包,并在该包中新建一个用于对数据库表user进行操作的接口UserRepository,代码如下所示。(5)在项目的src/mian/java/路径下的com.yzpc包中,新建一个controller包,并在该包中新建一个用于测试的类UserController,这里以存储用户和添加用户为例,代码如下所示。205.3.2整合SpringDataJPA(6)启动项目,在控制台输出Hibernate的相关语句,如图5-15所示。这是因为,在perties配置文件中spring.jpa.hibernate.ddl-auto的值设置为create,即通过Hibernate实现数据表单的创建。通过SQLyog工具,查看数据库,发现user数据表已经创建,但并没有记录,下面分别来测试相应的方法实现。访问http://localhost:8080/saveUser,查看控制台,如图5-16所示;查看数据表,如图5-17所示。
访问http://localhost:8080/addUser?username=sj&password=sj,查看控制台输出。就可以看到一条insert的插入语句,查看数据表,发现增加了一条记录,查看数据表,如图所示。215.3.2整合SpringDataJPA
访问http://localhost:8080/updateUser?id=4&username=sss&password=sss,查看数据表发现id为4的记录的username和password字段都已经修改为sss,如图所示。
访问http://localhost:8080/deleteUser?id=4,查看数据表,id为4记录已经被删除,如图所示。
访问http://localhost:8080/getUserById?id=3,网页页面输出id为3的记录,如图所示;查看控制台,输出相关信息,如图所示。
访问http://localhost:8080/getAllUser,查询所有用户信息,网页页面显示查询的所有用户,如图所示;控制台输出查询的所有用户,如图所示。225.3.2整合SpringDataJPA
访问http://localhost:8080/findUserById?id=2,这里调用的是UserRepository接口中的自定义的方法,查询id为2的用户信息,控制台输出该用户,如图所示。
访问http://localhost:8080/findUserByName?username=admin,查询username为admin的用户信息,控制台输出,如图所示。
访问http://localhost:8080/findMaxIdUser,查询最大id号的用户信息,控制台输出,如图所示。
如果数据表中没有记录,或者要操作的条件不存在,可能会出现异常,大家可以参考5.2小节中对于相关异常的处理。235.4整合MyBatisMyBatis和JPA一样,也是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。5.4.1基于XML配置的方式整合MyBatis下面通过具体的示例来讲解SpringBoot整合MyBatis,具体步骤如下。(1)新建一个SpringBoot工程chapter05mybatis,Group和Packagename为com.yzpc,在Dependencies依赖中选择Web节点下的SpringWeb依赖和SQL节点下的MyBatisFramework、MySQLDriver依赖。pom.xml中自动添加的依赖代码,如下所示。
在perties配置文件中加入数据库连接配置,与5.2.1小节第(2)步中介绍的一致。24<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!--省略Web中SpringWeb依赖和SQL中的MySQlDriver依赖代码-->5.4.1基于XML配置的方式整合MyBatis(2)在MySQL中,创建一个名为chapter05mybatis的数据库,在该数据库中创建user数据表,并预先插入几条测试数据,相应的SQL语句如下所示。(3)在项目的src/mian/java/路径下的com.yzpc包中,新建一个pojo的包,并在该包中新建与数据表user对应的实体类User,代码如下所示。(4)在项目的src/mian/java/路径下的com.yzpc包中,新建一个mapper的包,在并在该包中新建UserMapper的接口,代码如下所示。25#创建数据库CREATEDATABASEchapter05mybatis;#选择使用数据库USEchapter05mybatis;#创建user数据表并插入相关数据DROPTABLEIFEXISTSUSER;CREATETABLEUSER(idINT(10)NOTNULLAUTO_INCREMENT,usernameVARCHAR(20)DEFAULTNULL,passwordVARCHAR(20)DEFAULTNULL,PRIMARYKEY(id))ENGINE=INNODBDEFAULTCHARSET=utf8;INSERTINTOUSERVALUES(1,'admin','admin');INSERTINTOUSERVALUES(2,'yzpc','yzpc');INSERTINTOUSERVALUES(3,'my','my');packagecom.yzpc.pojo;publicclassUser{
privateintid;
privateStringusername;
privateStringpassword;
//此处省略相应属性的setter/getter方法
//此处省略构造方法
//重写toString方法}packagecom.yzpc.mapper;importcom.yzpc.pojo.User;importorg.apache.ibatis.annotations.Mapper;importjava.util.List;@Mapper //表明该接口是一个MyBatis中的MapperpublicinterfaceUserMapper{
publicintaddUser(Useruser);
publicintupdateUser(Useruser);
publicintdeleteUser(intid);
publicUsergetUserById(intid);
publicList<User>getAllUser();}5.4.1基于XML配置的方式整合MyBatis(5)在src/main/resources/路径下新建mapper目录,并在该目录下,新建UserMapper.xml文件,对应前面UserMapper接口的方法,#{}用来代替接口中的参数,实体类中的属性可以直接通过#{实体类属性名}获取,内容如下所示。UserMapper.xml放在resources目录下,这样就不用担心打包时被忽略了,但是放在resources目录下,又不能自动被扫描到,此时在perties中添加mybatis扫描mapper的路径,需要在perties配置文件中指定位置,代码如下所示。UserMapper.xml除了放在resources目录下,还可以是直接放在UserMapper所在的com.yzpc.mapper包下,该包下的UserMapper.xml会被自动扫描到,需要在pom.xml文件中再添加如下配置。26<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC“-////DTDMapper3.0//EN”
“/dtd/mybatis-3-mapper.dtd”>
<!--此处与接口类地址对应-->
<mappernamespace=“com.yzpc.mapper.UserMapper”>
<!--此处与接口方法名对应,指定参数类型与返回结果类型-->
<insertid=“addUser”parameterType=“com.yzpc.pojo.User”>
insertintouser(username,password)values(#{username},#{password})
</insert>
<!--省略updateUser、deleteUser、getUserById--
>
<selectid="getAllUser"resultType="com.yzpc.pojo.User">
select*fromuser
</select>
</mapper>#指定映射xml文件位置#classpath对应resources,*.xml表示配置mapper下所有xml文件mybatis.mapper-locations=classpath:mapper/*.xml<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory></resource></resources></build>5.4.1基于XML配置的方式整合MyBatis(6)在项目的src/mian/java/路径下的com.yzpc包中,新建controller包,在该包中新建UserController类,并在该类中添加增删改查的方法,这里增加用户为例,代码如下所示。(7)启动项目,在浏览器地址栏中,依次访问增删改查的请求,相应请求如下。增加用户:http://localhost:8080/addUser修改用户:http://localhost:8080/updateUser删除用户:http://localhost:8080/deleteUser/4查询用户:http://localhost:8080/getUserById?id=3查询所有用户:http://localhost:8080/getAllUser
浏览器和控制台上输出了相应信息,控制台的运行结果,如图所示。27@RestControllerpublicclassUserController{
@Autowired
User
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智控教育校区介绍
- 2025湖北恩施州宣恩县第六次事业单位选聘2人考试笔试备考题库及答案解析
- 功能性训练课件
- 晚晚破船课件
- 晚学自建房课件
- 武汉某国企市场拓展专员招聘笔试考试参考题库及答案解析
- 心脏外科恢复评价专家共识解读及量表选择指南
- 2025浙江杭州技术转移转化中心招聘笔试考试参考试题及答案解析
- 2025版整形外科疾病治疗及术后护理措施
- 如何找领导要项目介绍
- 2025年期货从业资格考试题库及完整答案(夺冠)
- 2025年医疗器械监督管理条例培训试题及参考答案
- 《军用关键软硬件自主可控产品名录》(2025年v1版)
- 数字逻辑星明著课后习题答案华中科技
- HXD1C型电力机车的日常检修工艺设计
- GA/T 1088-2013道路交通事故受伤人员治疗终结时间
- ALCATEL 交换机配置手册(中文)new
- 专升本《模拟电子技术》模拟的题目试卷
- 山东省水利水电工程施工企业安全生产管理三类人员考试题库-上(单选、多选题)
- SAP财务管理大全电子版本
- 山东建筑电气与智能化疑难问题分析与解答
评论
0/150
提交评论