位置: IT常识 - 正文

Mybatis 入门实战(1)--简介(mybatis入门菜鸟教程)

编辑:rootadmin
1、Mybatis 是什么 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain ... 1、Mybatis 是什么

推荐整理分享Mybatis 入门实战(1)--简介(mybatis入门菜鸟教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mybatis?,mybatis?,mybatis基本步骤,mybatis?,mybatis入门案例,mybatis操作步骤,mybatis操作步骤,mybatis入门菜鸟教程,内容如对您有帮助,希望把文章链接给更多的朋友!

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2、Mybatis 配置

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

configuration(配置)properties(属性)settings(设置)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)environments(环境配置)environment(环境变量)transactionManager(事务管理器)dataSource(数据源)databaseIdProvider(数据库厂商标识)mappers(映射器)2.1、属性(properties)

这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。例如:

<properties resource="org/mybatis/example/config.properties"> <property name="username" value="root"/> <property name="password" value="123456"/></properties>

设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值。

如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:

首先读取在 properties 元素体内指定的属性。然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。2.2、设置(settings)

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。

设置名描述有效值默认值cacheEnabled全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。true | falsetruelazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。true | falsefalseaggressiveLazyLoading开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载(参考lazyLoadTriggerMethods)。true | falsefalse (在 3.4.1 及之前的版本中默认为 true)multipleResultSetsEnabled是否允许单个语句返回多结果集(需要数据库驱动支持)。true | falsetrueuseColumnLabel使用列标签代替列名。实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察。true | falsetrueuseGeneratedKeys允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。true | falseFalseautoMappingBehavior指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示关闭自动映射;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。 FULL 会自动映射任何复杂的结果集(无论是否嵌套)。NONE, PARTIAL, FULLPARTIALautoMappingUnknownColumnBehavior指定发现自动映射目标未知列(或未知属性类型)的行为。

NONE: 不做任何反应WARNING: 输出警告日志('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior'的日志等级必须设置为WARN)FAILING: 映射失败 (抛出SqlSessionException)NONE, WARNING, FAILINGNONEdefaultExecutorType配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。SIMPLE REUSE BATCHSIMPLEdefaultStatementTimeout设置超时时间,它决定数据库驱动等待数据库响应的秒数。任意正整数未设置 (null)defaultFetchSize为驱动的结果集获取数量(fetchSize)设置一个建议值。此参数只可以在查询设置中被覆盖。任意正整数未设置 (null)defaultResultSetType指定语句默认的滚动策略。(新增于 3.5.2)FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(等同于未设置)未设置 (null)safeRowBoundsEnabled是否允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为 false。true | falseFalsesafeResultHandlerEnabled是否允许在嵌套语句中使用结果处理器(ResultHandler)。如果允许使用则设置为 false。true | falseTruemapUnderscoreToCamelCase是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。true | falseFalselocalCacheScopeMyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存。SESSION | STATEMENTSESSIONjdbcTypeForNull当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类型。 某些数据库驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。JdbcType 常量,常用值:NULL、VARCHAR 或 OTHER。OTHERlazyLoadTriggerMethods指定对象的哪些方法触发一次延迟加载。用逗号分隔的方法列表。equals,clone,hashCode,toStringdefaultScriptingLanguage指定动态 SQL 生成使用的默认脚本语言。一个类型别名或全限定类名。org.apache.ibatis.scripting.xmltags.XMLLanguageDriverdefaultEnumTypeHandler指定 Enum 使用的默认TypeHandler。(新增于 3.4.5)一个类型别名或全限定类名。org.apache.ibatis.type.EnumTypeHandlercallSettersOnNulls指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这在依赖于 Map.keySet() 或 null 值进行初始化时比较有用。注意基本类型(int、boolean 等)是不能设置成 null 的。true | falsefalsereturnInstanceForEmptyRow当返回行的所有列都是空时,MyBatis默认返回null。 当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集(如集合或关联)。(新增于 3.4.2)true | falsefalselogPrefix指定 MyBatis 增加到日志名称的前缀。任何字符串未设置logImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找。SLF4J | LOG4J(3.5.9 起废弃) | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING未设置proxyFactory指定 Mybatis 创建可延迟加载对象所用到的代理工具。CGLIB (3.5.10 起废弃) | JAVASSISTJAVASSIST (MyBatis 3.3 以上)vfsImpl指定 VFS 的实现自定义 VFS 的实现的类全限定名,以逗号分隔。未设置useActualParamName允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 Java 8 编译,并且加上-parameters选项。(新增于 3.4.1)true | falsetrueconfigurationFactory指定一个提供Configuration实例的类。 这个被返回的 Configuration 实例用来加载被反序列化对象的延迟加载属性值。 这个类必须包含一个签名为static Configuration getConfiguration()的方法。(新增于 3.2.3)一个类型别名或完全限定类名。未设置shrinkWhitespacesInSql从SQL中删除多余的空格字符。请注意,这也会影响SQL中的文字字符串。 (新增于 3.5.5)true | falsefalsedefaultSqlProviderType指定一个拥有 provider 方法的 sql provider 类 (新增于 3.5.6). 这个类适用于指定 sql provider 注解上的type(或value) 属性(当这些属性在注解中被忽略时)。 (e.g.@SelectProvider)类型别名或者全限定名未设置nullableOnForEach为 'foreach' 标签的 'nullable' 属性指定默认值。(新增于 3.5.9)true | falsefalseargNameBasedConstructorAutoMapping当应用构造器自动映射时,参数名称被用来搜索要映射的列,而不再依赖列的顺序。(新增于 3.5.10)true | falsefalse2.3、类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:

<typeAliases> <typeAlias alias="Author" type="domain.blog.Author"/> <typeAlias alias="Blog" type="domain.blog.Blog"/></typeAliases>2.4、类型处理器(typeHandlers)

MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。Mybatis 内置了默认的类型处理器,如果不满足需求,还可以自定义类型处理器;具体做法为:实现org.apache.ibatis.type.TypeHandler接口, 或继承一个很便利的类org.apache.ibatis.type.BaseTypeHandler, 并且可以(可选地)将它映射到一个 JDBC 类型。

2.5、对象工厂(objectFactory)

每次 MyBatis 创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成实例化工作。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认无参构造方法,要么通过存在的参数映射来调用带有参数的构造方法。 如果想覆盖对象工厂的默认行为,可以通过创建自己的对象工厂来实现;具体做法为:继承org.apache.ibatis.reflection.factory.DefaultObjectFactory类并覆盖相应的方法。

2.6、插件(plugins)

MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:

Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)ParameterHandler (getParameterObject, setParameters)ResultSetHandler (handleResultSets, handleOutputParameters)StatementHandler (prepare, parameterize, batch, update, query)

通过 MyBatis 提供的强大机制,使用插件是非常简单的,只需实现 Interceptor 接口,并指定想要拦截的方法签名即可。

2.7、环境配置(environments)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。

Mybatis 入门实战(1)--简介(mybatis入门菜鸟教程)

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。

2.7.1、事务管理器(transactionManager)

在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):

JDBC – 这个配置直接使用了 JDBC 的提交和回滚功能,它依赖从数据源获得的连接来管理事务作用域。MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。

注:如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

2.7.2、数据源(dataSource)

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):

UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。

POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。

JNDI– 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。

2.8、数据库厂商标识(databaseIdProvider)

MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的databaseId属性。 MyBatis 会加载带有匹配当前数据库databaseId属性和所有不带databaseId属性的语句。 如果同时找到带有databaseId和不带databaseId的相同语句,则后者会被舍弃。databaseIdProvider 对应的 DB_VENDOR 实现会将 databaseId 设置为DatabaseMetaData#getDatabaseProductName()返回的字符串。 由于通常情况下这些字符串都非常长,而且相同产品的不同版本会返回不同的值,你可能想通过设置属性别名来使其变短:

<databaseIdProvider type="DB_VENDOR"> <property name="SQL Server" value="sqlserver"/> <property name="DB2" value="db2"/> <property name="Oracle" value="oracle" /></databaseIdProvider>2.9、映射器(mappers)

我们需要告诉 MyBatis 到哪里去找SQL 映射语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括file:///形式的 URL),或类名和包名等。例如:

<!-- 使用相对于类路径的资源引用 --><mappers> <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> <mapper resource="org/mybatis/builder/BlogMapper.xml"/></mappers><!-- 使用完全限定资源定位符(URL) --><mappers> <mapper url="file:///var/mappers/AuthorMapper.xml"/> <mapper url="file:///var/mappers/BlogMapper.xml"/></mappers><!-- 使用映射器接口实现类的完全限定类名 --><mappers> <mapper class="org.mybatis.builder.AuthorMapper"/> <mapper class="org.mybatis.builder.BlogMapper"/></mappers><!-- 将包内的映射器接口全部注册为映射器 --><mappers> <package name="org.mybatis.builder"/></mappers>3、作用域(Scope)和生命周期3.1、对象生命周期和依赖注入框架

依赖注入框架可以创建线程安全的、基于事务的 SqlSession 和映射器,并将它们直接注入到你的 bean 中,因此可以直接忽略它们的生命周期。 如果对如何通过依赖注入框架使用 MyBatis 感兴趣,可以研究一下 MyBatis-Spring 或 MyBatis-Guice 两个子项目。

3.2、SqlSessionFactoryBuilder

这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但最好还是不要一直保留着它,以保证所有的 XML 解析资源可以被释放给更重要的事情。

3.2、SqlSessionFactory

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏习惯”。因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

3.3、SqlSession

每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中,比如 Servlet 框架中的 HttpSession。 如果你现在正在使用一种 Web 框架,考虑将 SqlSession 放在一个和 HTTP 请求相似的作用域中。 换句话说,每次收到 HTTP 请求,就可以打开一个 SqlSession,返回一个响应后,就关闭它。

3.4、映射器实例

映射器是一些绑定映射语句的接口。映射器接口的实例是从 SqlSession 中获得的。虽然从技术层面上来讲,任何映射器实例的最大作用域与请求它们的 SqlSession 相同。但方法作用域才是映射器实例的最合适的作用域。 也就是说,映射器实例应该在调用它们的方法中被获取,使用完毕之后即可丢弃。 映射器实例并不需要被显式地关闭。尽管在整个请求作用域保留映射器实例不会有什么问题,但是你很快会发现,在这个作用域上管理太多像 SqlSession 的资源会让你忙不过来。 因此,最好将映射器放在方法作用域内。

更多详细说明请参考官网文档:https://mybatis.org/mybatis-3/zh。

本文链接地址:https://www.jiuchutong.com/zhishi/313206.html 转载请保留说明!

上一篇:dedecms如何设置首页滚动显示?(dedecms配置)

下一篇:DEDECMS技巧:网站评论QQ邮箱实时接收(dedecmsv6)

  • 小米手机按键怎么调出来(小米手机按键怎么设置)

    小米手机按键怎么调出来(小米手机按键怎么设置)

  • 快手如何去水印保存视频(快手如何去水印保存视频到手机)

    快手如何去水印保存视频(快手如何去水印保存视频到手机)

  • 手机设置时间和日期在哪里(手机的时间设置在哪里设置)

    手机设置时间和日期在哪里(手机的时间设置在哪里设置)

  • 抖音视频为什么加载不了(抖音视频为什么突然没有浏览量)

    抖音视频为什么加载不了(抖音视频为什么突然没有浏览量)

  • 华为荣耀20Pro手机手机桌面怎么设置天气日期时间(华为荣耀20pro手机)

    华为荣耀20Pro手机手机桌面怎么设置天气日期时间(华为荣耀20pro手机)

  • 相机拍出来脸是歪的(相机拍出来脸是歪的怎么办)

    相机拍出来脸是歪的(相机拍出来脸是歪的怎么办)

  • 抖音和b站的区别(抖音和b站哪个机会更大)

    抖音和b站的区别(抖音和b站哪个机会更大)

  • 微信好友辅助怎么取消(微信好友辅助怎么取消验证)

    微信好友辅助怎么取消(微信好友辅助怎么取消验证)

  • 华为手机怎么隐藏app软件(华为手机怎么隐藏图片和视频)

    华为手机怎么隐藏app软件(华为手机怎么隐藏图片和视频)

  • b站收藏的视频失效找回(B站收藏的视频为啥会失效)

    b站收藏的视频失效找回(B站收藏的视频为啥会失效)

  • 抖音不够1000粉丝怎么开橱窗(抖音不够1000粉丝可以挂小黄车)

    抖音不够1000粉丝怎么开橱窗(抖音不够1000粉丝可以挂小黄车)

  • 快看点提现失败是什么原因(快看点为什么提现被退回)

    快看点提现失败是什么原因(快看点为什么提现被退回)

  • 小米6屏幕刷新率(小米6屏幕刷新率在哪里设置)

    小米6屏幕刷新率(小米6屏幕刷新率在哪里设置)

  • 苹果11用一会就发热(苹果11用一会就烫手)

    苹果11用一会就发热(苹果11用一会就烫手)

  • 飞利浦手机恢复出厂设置密码(飞利浦手机恢复出厂密码多少)

    飞利浦手机恢复出厂设置密码(飞利浦手机恢复出厂密码多少)

  • 华为mate30pro防抖怎么设置(华为mate30pro防抖吗)

    华为mate30pro防抖怎么设置(华为mate30pro防抖吗)

  • 抖音里的抖币怎么兑换现金(抖音里的抖币怎么换成钱)

    抖音里的抖币怎么兑换现金(抖音里的抖币怎么换成钱)

  • 嵌入式系统由哪几部分组成

    嵌入式系统由哪几部分组成

  • word2003稿纸设置在哪(word2016稿纸设置)

    word2003稿纸设置在哪(word2016稿纸设置)

  • 荣耀v20怎么查看后台(荣耀v20怎么查看手机温度)

    荣耀v20怎么查看后台(荣耀v20怎么查看手机温度)

  • 如何关闭蓝牙呼吸灯(怎么关闭蓝牙唤醒)

    如何关闭蓝牙呼吸灯(怎么关闭蓝牙唤醒)

  • oppo支持红外线遥控吗(OPPO支持红外线的5g手机有哪些)

    oppo支持红外线遥控吗(OPPO支持红外线的5g手机有哪些)

  • cad改线宽没反应(cad2016改线宽没反应)

    cad改线宽没反应(cad2016改线宽没反应)

  • 如何从零开始制作一个linux iso镜像(图文教程)(如何从零开始制作地下偶像)

    如何从零开始制作一个linux iso镜像(图文教程)(如何从零开始制作地下偶像)

  • 农产品抵扣怎么算
  • 经营所得和企业所得
  • 简单的记账方法明细表格怎么做
  • 个税漏申报了一个月在哪里申报
  • 民间非营利组织会计制度最新版
  • 非营利组织的项目管理流程包括
  • 企业股东分红所得税税率表
  • 房屋租赁需要交税吗?
  • 托收承付和委托收款的含义和相同之处
  • 企业税收标准是多少
  • 当月勾选认证的原材料与当月领用的原材料区别
  • 企业外购固定资产的成本包括购买价款和相关税费
  • 境外企业国内签订合同如何缴纳印花税?
  • 异地上班员工报销路费
  • 土地流转承包费拖欠
  • 收到凭证的收据
  • 以前年度的收入怎么调整
  • 事业单位库存现金
  • 销售货物类型
  • 小微企业差旅费可以税前扣除吗
  • 年金的缴费基数
  • 固定资产大修理怎么界定
  • 金银首饰的消费税税务处理
  • 物业预收停车费不退费
  • 月末结转增值税凭证
  • 企业合并无形资产摊销
  • 1697510021
  • 怎样查一个银行的行号
  • 电脑文件启用宏是什么意思
  • element plus 虚拟化表格
  • 电脑每次开机都要选择系统怎么办
  • win11镜像文件怎么复制到系统U盘
  • 企业清算所得税申报
  • 无形资产摊销是按原值吗
  • 印花税减免一半
  • php判断https
  • 设备租赁费怎么入账
  • showmount命令安装
  • sybaris插件包
  • 城建税退回与不退税区别
  • python tle
  • 报销还款人民币是什么意思
  • 500元以下开收据要交税吗
  • 应税工资和实发工资区别
  • 应收股利的明细科目
  • 基于法律行为的物权变动模式包括
  • 邮电通信企业业务收入包括哪些内容?
  • 购买税控盘的费用怎么抵减
  • 印花税是如何计征的
  • 利息支出的纳税调整计算公式
  • 应付账款的账务怎么处理
  • 电子发票开票方怎么做账?
  • 影响折旧的因素有哪三个方面
  • 金蝶kis专业版怎么备份账套
  • 会计往来账如何记账
  • 差旅费报销单怎么填写
  • mysql 生成guid
  • 几个比较重要的家风
  • mysql声明全局变量
  • 并发控制三个问题
  • windowsxp文件夹里面的文件突然消失
  • linux arp -n
  • 在centos上安装pycharm
  • Win10系统下怎么将韩语切换成简体中文?
  • 侠客驱动是什么意思
  • javascript字面量
  • js中的函数
  • css中div怎么用
  • unity2020商店
  • vuerouter嵌套路由
  • 如何改变this指向
  • shell命令大全shell脚本编程100例
  • vbs运行cmd命令
  • js中改变css文件中的样式
  • jquery弹出窗口
  • js 类继承
  • 专票购买方是对方公司吗
  • 甘肃省国家励志奖学金证书打印网址
  • 中关村税务所上班时间
  • 企业将持有的交易性金融资产售出,实际收到出售价款
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设