位置: 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)

  • 手机淘宝投诉在哪个位置(手机淘宝投诉在哪个地方?)

    手机淘宝投诉在哪个位置(手机淘宝投诉在哪个地方?)

  • 苹果手机突然无法完成面容ID设置该怎么办(苹果手机突然无服务是因为什么)

    苹果手机突然无法完成面容ID设置该怎么办(苹果手机突然无服务是因为什么)

  • 腾讯视频手机怎么下载电视剧没有网络可以看(腾讯视频手机怎么登录)

    腾讯视频手机怎么下载电视剧没有网络可以看(腾讯视频手机怎么登录)

  • 苹果手机打电话屏幕不亮怎么设置(苹果手机打电话就没信号怎么回事)

    苹果手机打电话屏幕不亮怎么设置(苹果手机打电话就没信号怎么回事)

  • 电脑点不亮风扇都在转(电脑点不亮风扇狂转)

    电脑点不亮风扇都在转(电脑点不亮风扇狂转)

  • 2个微信号可以绑定一个手机号码吗(2个微信号可以合并一个吗)

    2个微信号可以绑定一个手机号码吗(2个微信号可以合并一个吗)

  • oppo与存在不兼容不能安装(oppo存在不兼容怎么解决)

    oppo与存在不兼容不能安装(oppo存在不兼容怎么解决)

  • 电池损耗多少要更换(电池损耗多少算严重)

    电池损耗多少要更换(电池损耗多少算严重)

  • 快手切换账号影响上热门吗(快手切换账号影响吗)

    快手切换账号影响上热门吗(快手切换账号影响吗)

  • 摄像头权限被关闭请开启权限在哪里(摄像头权限被关闭请开启权限在哪里苹果)

    摄像头权限被关闭请开启权限在哪里(摄像头权限被关闭请开启权限在哪里苹果)

  • 海航通信是什么手机卡(海航通信属于)

    海航通信是什么手机卡(海航通信属于)

  • 苹果8p左上角阴影什么原因(苹果8p左上角阴影扩散么)

    苹果8p左上角阴影什么原因(苹果8p左上角阴影扩散么)

  • oppo双卡的怎么有一个卡不能用了(oppo双卡怎么设置用哪个卡打电话)

    oppo双卡的怎么有一个卡不能用了(oppo双卡怎么设置用哪个卡打电话)

  • iphone8可不可以人脸识别(iphone8可不可以录屏)

    iphone8可不可以人脸识别(iphone8可不可以录屏)

  • 苹果11是双面屏吗(iphone 11双屏)

    苹果11是双面屏吗(iphone 11双屏)

  • 骁龙6150是什么处理器(高通骁龙6150)

    骁龙6150是什么处理器(高通骁龙6150)

  • 拼多多为什么卸载不了(拼多多为什么卸不掉)

    拼多多为什么卸载不了(拼多多为什么卸不掉)

  • 拼多多怎么用支付宝付款(拼多多怎么用支付宝支付先用后付)

    拼多多怎么用支付宝付款(拼多多怎么用支付宝支付先用后付)

  • qq怎么把文件发到手机(qq怎么把文件发送到邮箱)

    qq怎么把文件发到手机(qq怎么把文件发送到邮箱)

  • oppor11通话设置在哪(oppor11手机的通话设置在哪里设置)

    oppor11通话设置在哪(oppor11手机的通话设置在哪里设置)

  • 微信文案置顶怎么弄(微信文案置顶怎么取消)

    微信文案置顶怎么弄(微信文案置顶怎么取消)

  • 淘宝支持银联云闪付吗(淘宝支持银联云支付吗)

    淘宝支持银联云闪付吗(淘宝支持银联云支付吗)

  • 拼多多砍价审核能通过吗(拼多多砍价审核不通过)

    拼多多砍价审核能通过吗(拼多多砍价审核不通过)

  • qq特别关心铃声修改(QQ特别关心铃声怎么取消)

    qq特别关心铃声修改(QQ特别关心铃声怎么取消)

  • drvlsnr.exe进程安全吗 drvlsnr是什么进程(drvmgr.exe)

    drvlsnr.exe进程安全吗 drvlsnr是什么进程(drvmgr.exe)

  • 财务记录软件
  • 个税汇算清缴包括劳务报酬吗
  • 个体工商户网上注销
  • 法人的垫资在现金流量表中怎么填写
  • 企业社会保险登记表
  • 上月已收款,本月开的票怎么做分录
  • 广告公司会议记录内容
  • 进项税额加计抵扣账务处理
  • 个税申报包含哪些
  • 转账支票支付购货款填制什么凭证
  • 进项税额留底月底销项税金如何结转?
  • 股权转让后没有给转让费怎么办
  • 企业借个人款该交税吗
  • 股权转让有溢价怎么做账
  • 合伙企业购买股票产生的收益需要缴纳税款吗
  • 物业公司场地租赁费怎么开票
  • 小规模纳税人免税怎么做账
  • 公务用车用油
  • 房地产预收房款怎么开票
  • 药材种植政策
  • 应付职工薪酬计入现金流量表哪里
  • 转让地下建筑物交土地增值税吗
  • 收代扣代缴个税手续费会计分录
  • 公司股权转让协议标准范本
  • 初始投资成本与可辨认净资产公允价值
  • 跨年的工会经费怎么做分录
  • 终于找到修改mac的方法了!
  • 销售净利率如何分析出来
  • 移动网速测试软件
  • 如何进行降压治疗
  • 处置固定资产简易计税怎么申报
  • 出差补贴算工资薪金吗
  • 增值税税率调整差额怎么计算
  • 出差人员差旅费作细的说明叫什么
  • 手动ghost还原硬盘
  • win11系统怎么进入运行界面
  • 给客户赠送的礼物叫什么
  • 商业企业会计科目表
  • 公司未成立,发起人的责任
  • thinkphp教程
  • 企业年度报告内容
  • react函数组件useeffect
  • yolov5tiny
  • 自动化测试是怎样的
  • elementui的upload组件详解
  • prompt命令用法
  • sosreport命令收集详细信息
  • 什么是变动成本率
  • Ant Design-vue 解决input前后空格问题(推荐)
  • 哪些情形需要办理会计工作交接
  • 周转材料包装箱属于存货分类的
  • 小规模纳税人免征增值税的账务处理
  • 购买税控设备的分录怎么做
  • 摄影属于哪种服务业
  • sql表添加字段
  • 外购商品发放给员工 进项税额能不能抵扣
  • 对公账户里的钱怎么转出来合法
  • 企业固定资产可以不提折旧吗
  • 出口转内销补交进口增值税时间
  • 本月无进项发票需要去增值税发票认证平台吗
  • 实际到货跟采购不一致
  • 首先要知道什么英语
  • 资本公积金什么时候提取
  • 免激活合法使用的软件
  • 传统与现代的结合英文
  • win10以管理员身份登录电脑
  • ubuntu系统安装谷歌浏览器
  • 电脑w7系统怎么保存图片
  • 怎么激活win7旗舰版系统
  • js 判断一个数字是否相等
  • math和maths哪个对
  • 网页标准化技术有哪些
  • unity projector
  • jquery插件使用教程
  • nodejs+websocket实时聊天系统改进版
  • js能实现的简单效果
  • js基本代码
  • 浅谈如何实现乡村振兴论文
  • 税控系统技术维护费每年都要交吗
  • 许昌祥和小区二手房出售
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设