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

  • 交管12123预约成功如何取消(交管12123预约成功可以取消吗)

    交管12123预约成功如何取消(交管12123预约成功可以取消吗)

  • 电视连wifi无法获取地址怎么办(电视连wifi无法连接到网关)

    电视连wifi无法获取地址怎么办(电视连wifi无法连接到网关)

  • 升降式摄像头手机有哪些(升降式摄像头手机)

    升降式摄像头手机有哪些(升降式摄像头手机)

  • 钉钉打印共享服务是什么意思(钉钉打印共享服务已离线这个怎么解决)

    钉钉打印共享服务是什么意思(钉钉打印共享服务已离线这个怎么解决)

  • 拼多多买东西怎么不让别人看到好友买过(拼多多买东西怎么设置别人看不到)

    拼多多买东西怎么不让别人看到好友买过(拼多多买东西怎么设置别人看不到)

  • vivo手机去过地方记录在哪(vivo手机有去过的位置显示从哪里关闭)

    vivo手机去过地方记录在哪(vivo手机有去过的位置显示从哪里关闭)

  • dbms提供的数据保护功能主要有(DBMS提供的数据控制功能包括)

    dbms提供的数据保护功能主要有(DBMS提供的数据控制功能包括)

  • 苹果手机送的苹果贴纸有什么用(苹果手机送的苹果贴纸是干嘛用的)

    苹果手机送的苹果贴纸有什么用(苹果手机送的苹果贴纸是干嘛用的)

  • 闲鱼提醒对方收货是什么方式(闲鱼提醒对方收货只能发一次吗)

    闲鱼提醒对方收货是什么方式(闲鱼提醒对方收货只能发一次吗)

  • 电脑上安装钉钉为什么打不开(电脑上安装钉钉很慢怎么回事)

    电脑上安装钉钉为什么打不开(电脑上安装钉钉很慢怎么回事)

  • 待机是关机的意思吗(待机和关机)

    待机是关机的意思吗(待机和关机)

  • 拼多多跑单是什么意思(拼多多打单员难吗)

    拼多多跑单是什么意思(拼多多打单员难吗)

  • 蓝牙耳机摔开了合不上(蓝牙耳机摔开了装回去了但是却不吻合)

    蓝牙耳机摔开了合不上(蓝牙耳机摔开了装回去了但是却不吻合)

  • 苹果付款方式验证不了(苹果付款方式验证不了微信)

    苹果付款方式验证不了(苹果付款方式验证不了微信)

  • 手机qq群缓存的图片在哪(手机qq群聊缓存图片保存在哪个文件夹)

    手机qq群缓存的图片在哪(手机qq群聊缓存图片保存在哪个文件夹)

  • 为什么后置拍脸不对称(为什么后置拍脸很大)

    为什么后置拍脸不对称(为什么后置拍脸很大)

  • 手机视频如何连接电视(手机视频如何连接投影仪播放)

    手机视频如何连接电视(手机视频如何连接投影仪播放)

  • 怎么退出多页面视图(怎么退出多页面视图模式)

    怎么退出多页面视图(怎么退出多页面视图模式)

  • vivo云相册怎么关闭(vivo云相册怎么删除)

    vivo云相册怎么关闭(vivo云相册怎么删除)

  • 录音不小心删了怎么找回(录音不小心删了怎么找回免费)

    录音不小心删了怎么找回(录音不小心删了怎么找回免费)

  • ipad六代叫什么(ipad六代百度百科)

    ipad六代叫什么(ipad六代百度百科)

  • 果园删除的好友怎么恢复(果园好友删除后怎么办)

    果园删除的好友怎么恢复(果园好友删除后怎么办)

  • 绘声绘影如何添加字幕(绘声绘影如何添加声音轨)

    绘声绘影如何添加字幕(绘声绘影如何添加声音轨)

  • 韩剧tv怎么看国产剧(韩剧tv怎么看国语版)

    韩剧tv怎么看国产剧(韩剧tv怎么看国语版)

  • 如何查看下载过的软件(如何查看下载过的软件华为)

    如何查看下载过的软件(如何查看下载过的软件华为)

  • iphone xr是什么基带(平果xr是什么基带)

    iphone xr是什么基带(平果xr是什么基带)

  • 如何制作电子相册视频(如何制作电子相册)

    如何制作电子相册视频(如何制作电子相册)

  • vue3 antd项目实战——Form表单的重置与清空【resetFields重置表单未生效(手写重置函数)】(antd-vue-pro)

    vue3 antd项目实战——Form表单的重置与清空【resetFields重置表单未生效(手写重置函数)】(antd-vue-pro)

  • 转让金融商品应交增值税计入
  • 进口货物账务如何处理
  • 建设工程的停工损失包括哪些内容
  • 收客户逾期利息账务处理怎么做?
  • 不开票不走公账的后果
  • 租车没有发票怎么入账
  • 民办非营利组织幼儿园清算时固定资产如何处理
  • 小规模纳税人需要每月清卡吗
  • 其他应收款怎么分析
  • 物业公司安装监控
  • 企业盈利所得税交多少
  • 公司注销还需要登报吗
  • 增值税专用发票校验码是哪个位置
  • 临时设施需要验收吗
  • 小规模农产品可以抵扣吗
  • 预付保险费属于什么会计科目
  • 公司做贷款
  • 理财认购申购
  • 游乐场门票收入发票品目
  • 未分配利润是怎么算出来的
  • 股利分配账务处理
  • 印花税的征收范围
  • 什么是冻结账户的情形
  • php字符串定义
  • 处理车辆违章送什么证件
  • 土地使用税滞纳金不得超过
  • lmgrd.exe是什么进程
  • 增值税流转税是什么意思
  • wordpress使用
  • java基础教程
  • 企业通讯费管理办法
  • 汇算清缴期结束后,税务机关发现企业
  • 赤狐 (© Yossi Eshbol/Minden Pictures)
  • yii2.0框架
  • 企业所得税季度申报表A类
  • 常用的成本计算方法有哪些
  • 动静结合会计等式的不会重复算利润吗
  • 多模手机
  • react脚手架搭建项目
  • ps闪退是什么原因win11
  • 本期应纳税额是怎么算
  • 如何利用口诀记住那字
  • 红字发票是不是就是红冲了
  • union ll
  • 营销策划合作协议
  • 购销合同印花税税率
  • 发票的类型分为哪几类
  • 累计扣除包括哪些
  • 餐饮行业购入农产品
  • 销售自行开发的房地产项目的增值税
  • 配件盘点出现盘盈盘亏后如何处理
  • 购进货物用于集体福利会计分录
  • 增值税版本升级
  • 固定资产折旧的会计凭证
  • 股权转让 会计
  • sqlserver性能优化方案
  • mysql数据库主从数据不一致
  • sql修改表的所属空间
  • 应用程序发生异常如何解决
  • 电脑xp系统如何
  • linux下nanosleep() & sleep()的区别
  • linux读取命令
  • win10插上耳机后电脑还是外放如何解决
  • win10自带microsoft office怎么用
  • 使用自带DISM工具修复Windows8.1映像
  • win7开始菜单没有搜索框
  • mac安装nodejs的权限问题
  • 非常好的成语
  • 学javascript有前途吗
  • jquery表单验证代码
  • python time.now
  • javascript 进阶篇1 正则表达式,cookie管理,userData
  • android下的单元测试要配置以下说法不正确的是
  • 如何解决android兼容问题
  • jquery的实现原理
  • js设计模式有什么用
  • 开增值税专用发票需要注意什么
  • 贵州电子税务局app下载
  • 税收优惠政策有哪些企业
  • 关于返回
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设