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

  • oppo reno 4se支持无线充电功能吗(opporeno4se支持nfc吗)

    oppo reno 4se支持无线充电功能吗(opporeno4se支持nfc吗)

  • 组网技术的问题包括哪些(组网解决方案)

    组网技术的问题包括哪些(组网解决方案)

  • 快手聊天记录如何删除(快手聊天记录如何迁移到新手机)

    快手聊天记录如何删除(快手聊天记录如何迁移到新手机)

  • 荣耀20可以插耳机吗(荣耀20插耳机没反应)

    荣耀20可以插耳机吗(荣耀20插耳机没反应)

  • 闲鱼小二介入成功技巧(闲鱼小二介入会影响店铺吗)

    闲鱼小二介入成功技巧(闲鱼小二介入会影响店铺吗)

  • 华为p10开发者选项在哪(华为p10设置中的开发者在什么位置)

    华为p10开发者选项在哪(华为p10设置中的开发者在什么位置)

  • 华为p40怎么返回(p40怎么设置返回键)

    华为p40怎么返回(p40怎么设置返回键)

  • k2t和k2p对比(k2p和k2c)

    k2t和k2p对比(k2p和k2c)

  • 快手保证金每个月都交吗(快手保证金505元)

    快手保证金每个月都交吗(快手保证金505元)

  • 微信删除账单怎么关闭人脸识别(微信删除账单怎么恢复人脸识别)

    微信删除账单怎么关闭人脸识别(微信删除账单怎么恢复人脸识别)

  • ups启程扫描是什么意思(ups抵达扫描就不动了)

    ups启程扫描是什么意思(ups抵达扫描就不动了)

  • qq扩列为啥这么多的机器人(qq扩列为啥这么多小妹妹)

    qq扩列为啥这么多的机器人(qq扩列为啥这么多小妹妹)

  • 华为右上角图标指南针(华为右上角图标两个勾)

    华为右上角图标指南针(华为右上角图标两个勾)

  • 华为p30刷新率是多少Hz(华为p30刷新率是多少赫兹)

    华为p30刷新率是多少Hz(华为p30刷新率是多少赫兹)

  • 淘宝直登号和自定义号有什么区别(淘宝直登号安全吗)

    淘宝直登号和自定义号有什么区别(淘宝直登号安全吗)

  • a12相当于骁龙多少(a12相当于骁龙多少和865)

    a12相当于骁龙多少(a12相当于骁龙多少和865)

  • 微信白屏不显示咋回事(微信界面白屏一片.什么也没有.怎么处理)

    微信白屏不显示咋回事(微信界面白屏一片.什么也没有.怎么处理)

  • 红米note8pro怎么导入联系人(红米note8pro怎么刷机)

    红米note8pro怎么导入联系人(红米note8pro怎么刷机)

  • x27有没有红外线(x27vivo有没有红外线)

    x27有没有红外线(x27vivo有没有红外线)

  • 抖音举报别人的作品会被对方看见吗(抖音举报别人的评论,成功评论能删掉吗)

    抖音举报别人的作品会被对方看见吗(抖音举报别人的评论,成功评论能删掉吗)

  • cr2023和cr2025通用吗(cr2023和cr2025的区别)

    cr2023和cr2025通用吗(cr2023和cr2025的区别)

  • 怎么用快手id直接登录(快手怎么才能用id登录)

    怎么用快手id直接登录(快手怎么才能用id登录)

  • pcs是什么(pcs是什么附加费)

    pcs是什么(pcs是什么附加费)

  • microchip是什么品牌(micro chip)

    microchip是什么品牌(micro chip)

  • 唯品会订单如何删除(唯品会订单如何改地址)

    唯品会订单如何删除(唯品会订单如何改地址)

  • 怎样投屏(怎样投屏到电视上去)

    怎样投屏(怎样投屏到电视上去)

  • 拼多多电子面单怎么申请(拼多多电子面单共享怎么设置)

    拼多多电子面单怎么申请(拼多多电子面单共享怎么设置)

  • 怎么禁止Win11自动更新驱动? 避免win11降级GPU的技巧(如何停止win11)

    怎么禁止Win11自动更新驱动? 避免win11降级GPU的技巧(如何停止win11)

  • vue项目网页自适应,等比例放大缩小(vue 网页)

    vue项目网页自适应,等比例放大缩小(vue 网页)

  • 计提所得税比实际缴纳的少
  • 增值税 普通税
  • 终止经营的会计处理
  • 其他业务收入冲应收账款
  • 审核通过的红字发票信息表可以撤销吗
  • 支付劳务派遣管理费现金流量表里放在哪里
  • 外经证预交几个点
  • 哪些依据属于会计凭证
  • 企业提供建筑服务,应向建筑服务发生地
  • 购进商品交印花税
  • 无形资产要入账吗
  • 哪家银行存款利率高2023
  • 收到违约金应缴增值税吗
  • 建筑公司收到工程服务发票怎么做会计分录
  • 劳务派遣公司一般纳税人税率是多少
  • 有线电视基本收视维护费免征增值税
  • 孵化器 怎么赚钱
  • 长期股权投资的初始计量
  • 企业所得税申报表在哪里打印
  • 小规模劳务公司税率是多少
  • 收到采购折扣的账务处理
  • 税局代开专票会计分录怎么写?
  • 年初未分配利润计算公式
  • 如何解决win7系统蓝牙接收模块影响电脑蓝屏
  • 代理买卖证券款是经纪业务费用吗
  • 免抵退税如何进账
  • 销售使用过的汽车会计分录
  • 转销坏账准备会影响账面余额吗
  • 海关进口增值税怎么认证抵扣
  • phpajax技术
  • 旧房屋转卖的协议怎么写
  • 核心概念英文翻译
  • 长期股权投资会减值吗
  • vue3响应式丢失
  • 抵扣认证发票统计确认后可以退回吗?
  • 前端跨域解决方案设计
  • 如何使用openAI总结小说内容
  • phpcms怎么用
  • 红字发票信息表编号
  • 发票税金计入什么会计科目
  • 固定资产的
  • 委托加工的材料成本是否含增值税
  • 进项票可以抵扣企业所得税吗
  • 凭证字号和凭证编号一样吗
  • 核定征收适用于什么税率
  • 商标权的入账价值有哪些
  • 预付检测费未收到发票
  • 行政事业单位拨付给企业的财政补助款用交增值税吗
  • 应交税金的负数重分类
  • 产权转移书据印花税减免政策
  • 出租使用权什么意思
  • 汇算清缴可以调整主营业务成本吗
  • 什么是开办费包括
  • 分析企业盈余状况
  • 发现以前的账做错了
  • 商品销售折让怎么计算
  • 劳动者权益包含哪些
  • sql 查询优化
  • freebsd 编译
  • 360win7
  • mac safemode
  • 原版windowsxp安装
  • 为什么好不容易瘦了两斤,两天吃好了又上来了?
  • centos7添加ip地址
  • linux简明教程
  • mac os 必装软件
  • HTML文档中的头部(head)内容一般包含什么
  • 不错的mod_perl编程的简单应用实例介绍
  • unity3D游戏开发
  • js中匿名函数的作用
  • vue-cli使用
  • linux bash中too many arguments问题的解决方法
  • js过滤filter
  • js关闭子窗口
  • python爬虫过程
  • javascript零基础入门书籍
  • jQuery Ajax 加载数据时异步显示加载动画
  • 谈谈我对中国传统文化的理解
  • 甘肃国家税务总局
  • 国网四川电力客户电话号码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设