BIND(berkely Internet name Directory)

博客未介绍Bind和Windows DNS Server的配置,仅给出BIND 9做主DNS、windows DNS Server做辅助DNS并同步数据的例子。包括配置/etc/resolv.conf和/etc/named.conf文件、创建/var/named/example.net文件、重启BIND及测试等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BIND 9 例子

目前我不打算介绍如何配置Bind,Windows DNS Server,主要是没有时间去写,以后我会加上.

我做过Bind 9做主DNS,windows DNS Server 做辅助DNS,让他们同步数据. 这样可以在WIN DNS看到域名信息,比较直观,也很方便。如果你有兴趣可以自己做试验

这里我只给出一个例子。首先配置/etc/resolv.conf文件

[root@linux src]# cat /etc/resolv.conf
nameserver 127.0.0.1
nameserver 202.96.128.68
nameserver 218.30.103.50
nameserver 202.106.169.100
[root@linux src]#
		

配置/etc/named.conf文件

[root@linux src]# cat /etc/named.conf
// generated by named-bootconf.pl

options {
        directory "/var/named";
        /*
         * If there is a firewall between you and nameservers you want
         * to talk to, you might need to uncomment the query-source
         * directive below.  Previous versions of BIND always asked
         * questions using port 53, but BIND 8.1 uses an unprivileged
         * port by default.
         */
        // query-source address * port 53;
};

//
// a caching only nameserver config
//
controls {
        inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN {
        type hint;
        file "named.ca";
};

zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};
zone "example.net" IN {
        type master;
        file "example.net";
        allow-update { none; };
};
include "/etc/rndc.key";
		

创建文件/var/named/example.net

[root@linux src]# cat /var/named/example.net
@ IN SOA        example.net. root.example.net. (
                          200211131 ; serial, todays date + todays serial #
                          28800 ; refresh, seconds
                          7200 ; retry, seconds
                          3600000 ; expire, seconds
                          86400 ) ; minimum, seconds
        NS ns.example.net.
@       IN A         192.168.0.1
www     IN A         192.168.0.1
mail    IN A         192.168.0.1
@       MX 10 mail.example.net.
[root@linux src]#
		

重新启动BIND(DNS 服务器)

[root@linux src]# service named restart
Stopping named:
[root@linux src]#                                          [  OK  ]
		

测试

[root@linux src]# ping example.net
PING example.net (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0.030 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=0.018 ms

--- example.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 7201ms
rtt min/avg/max/mdev = 0.018/0.024/0.030/0.007 ms


[root@linux src]# ping mail.example.net
PING mail.example.net (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=0.032 ms

--- mail.example.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.022/0.030/0.036/0.005 ms
		
<think>首先,用户的问题是关于MyBatis中的`bind`标签,具体是关于如何动态设置`name`属性。用户引用了几个站内引用,其中引用[3]提到了`bind`标签,解释它是用于绑定表达式结果到一个变量上。用户问题:"我想了解MyBatis中bind标签动态name属性的用法请问MyBatisbind动态设置name属性方法及示例"用户提到了"动态设置name属性",但从引用[3]中,"name属性"可能指的是`bind`标签的`name`属性本身。在`bind`标签中,`name`属性是用来定义变量名的,而不是动态设置某个字段的name。回顾引用[3]:"bind标签可以使用OGNL表达式创建一个变量并将其绑定到上下文中"。所以,`bind`标签有两个属性:`name`和`value`。-`name`:指定变量名,这个似乎是静态的,不是动态的。-`value`:使用OGNL表达式动态计算值。用户可能误解了"name属性"。在上下文中,"name属性"可能指的是实体对象中的一个属性,比如在SQL中动态设置一个字段的值。但从用户的问题来看:"bind标签动态name属性的用法",意思是使用`bind`标签来动态设置`name`属性。但根据MyBatis文档,`bind`标签的`name`属性是静态的字符串,用于定义变量名,而`value`属性是动态的表达式。所以,我需要澄清什么是动态的。用户可能想动态设置`value`部分,而`name`是固定用于变量名的。在用户提供的引用中:-引用[3]:解释了`bind`标签用于创建变量。-引用[1]和[2]:涉及到动态SQL的其他部分,比如使用标签。-引用[4]:列出了动态SQL的元素:if,where,choose,trim,set,foreach。用户上次的问题是:"我想了解MyBatis中bind标签动态name属性的用法",在对话历史中没有之前的对话,这似乎是首次交互。在系统指令中提到"用户上一次的问题和你的回答",但在这个上下文中,似乎没有先前的历史。我的回答应该:-基于引用提供准确信息。-解释`bind`标签的正确用法。-澄清关于动态name属性的误解。-提供示例。`bind`标签的标准用法:```xml<bindname="variableName"value="OGNLexpression"/>```-`name`:是字符串常量,指定变量名。这个不是动态的。-`value`:是动态的OGNL表达式,计算结果被绑定到`variableName`。用户提到的"动态name属性",可能是指在使用`bind`时,变量名基于某种逻辑,但MyBatis本身不支持动态设置`name`属性;`name`必须是静态的。在实际应用中,`bind`常用于:-在SQL中重用复杂的表达式。-动态创建字符串,如模糊查询。-示例:`<bindname="pattern"value="'%'+name+'%'"/>`用于like查询。所以,在回答中,我需要解释:-`bind`标签的基本结构。-`name`属性是静态的。-如何动态设置变量的值通过`value`属性。-如果用户是想动态设置某个字段的name,如列名,应该使用其他标签,如`<foreach>`或动态表名映射(引用[2]中提到)。引用[2]:"通过注解方式实现动态SQL,提高代码的简洁性和可读性。"示例中使用了@SelectProvider和动态表名映射。所以,或许用户混淆了动态设置字段名(如列名)和`bind`标签。在MyBatis中,动态设置列名或表名可以使用:-`<if>`标签-或通过注解或Provider类动态生成SQL。但对于`bind`标签,它主要是用于定义局部变量。在回答中:1.解释`bind`标签的用途:创建绑定变量。2.说明`name`属性是静态的:它是一个字符串字面值,用于命名变量。3.`value`属性是动态的:可以使用参数、OGNL表达式。4.提供示例:如何用`bind`在SQL中动态生成值。5.如果用户意指动态列名或属性名,建议其他方法。最终,回答问题:"MyBatisbind动态设置name属性方法及示例"由于`name`属性本身不能动态设置,回答可以解释清楚并提供替代方案。示例使用场景:```xml<selectid="findUsers"resultType="User"><bindname="searchPattern"value="'%'+name+'%'"/>SELECT*FROMuserWHEREusernameLIKE#{searchPattern}</select>```这里,`name`是"searchPattern",静态;`value`是动态的。现在,回答结构:-澄清概念。-提供正确用法和示例。-根据引用添加引用标记。-在末尾生成相关问题。系统指令:生成相关问题。回答结尾加相关问题。完整回答:-开始解释。-代码示例。-相关问题。</think> ### MyBatis中bind标签动态设置变量值的方法及示例 在MyBatis中,`bind`标签用于创建变量并将其绑定到SQL上下文中,但它的`name`属性本身是**静态**的(用于定义变量名),而`value`属性支持**动态表达式**(基于OGNL)。用户提到的“动态设置name属性”可能存在误解:`name`属性用于指定变量名(静态字符串),核心动态功能是通过`value`实现的OGNL表达式计算结果。以下详细说明用法并提供示例。 #### 1. **`bind`标签的核心用法** - **语法**:`<bind name="自定义变量名" value="OGNL表达式" />` - `name`:必须是静态的字符串字面值(不能是动态生成的变量名),用于在SQL中引用该变量(如`${variableName}`或`#{variableName}`)。 - `value`:支持动态OGNL表达式,可引用方法参数、对象属性等。 - **作用**:将复杂表达式的结果绑定到一个临时变量,简化SQL中的重复计算或逻辑处理[^3][^4]。 - **局限性**:MyBatis不允许动态设置`name`属性(如基于参数生成变量名)。动态字段名(如列名或实体属性名)需使用其他动态SQL标签(如`<if>`或`<foreach>`)[^2][^4]。 #### 2. **动态设置变量值(value属性的示例)** `value`属性支持OGNL表达式,可根据参数动态计算值。以下是典型场景的代码示例: **场景:动态生成模糊查询条件(LIKE子句)** 假设需要根据输入参数`name`生成模糊匹配的模式字符串(如`%keyword%`)。 ```xml <!-- DynamicSqlObjectMap.xml --> <select id="getObject" resultType="DynamicSqlObject"> <!-- 创建变量 pattern,其值动态计算(如果参数为 null,则设为默认值 "%%") --> <bind name="pattern" value="name != null ? '%' + name + '%' : '%%'" /> SELECT id, name, grade, age, phone FROM dynamic_sql_object WHERE name LIKE #{pattern} </select> ``` - **解释**: - `name="pattern"`:静态定义变量名。 - `value="name != null ? ... : ..."`:使用三元运算符动态计算值(基于方法参数`name`)。 - 在SQL中通过`#{pattern}`引用变量值。 **场景:动态计算数值表达式** 假设需要根据年龄参数动态调整查询条件。 ```xml <select id="getObject" resultType="DynamicSqlObject"> <bind name="adjustedAge" value="age * 2 + 10" /> <!-- 动态计算新年龄值 --> SELECT * FROM dynamic_sql_object WHERE age > #{adjustedAge} </select> ``` #### 3. **如需动态设置属性名(如列名),替代方案** 如果用户的意图是**动态设置实体属性名或列名**(如让`name`字段在SQL中可变),`bind`标签无法实现。此时应使用其他动态SQL标签: - **使用`<if>`标签动态切换列名**(假设参数`fieldName`指定要查询的字段): ```xml <select id="getObject" resultType="DynamicSqlObject"> SELECT id, <if test="fieldName == 'name'">name</if> <if test="fieldName == 'phone'">phone</if> FROM dynamic_sql_object </select> ``` - 参数`fieldName`用于动态选择返回的字段。 - **使用注解方式动态生成SQL**(简化复杂逻辑): ```java // 定义接口方法 @SelectProvider(type = DynamicSqlProvider.class, method = "buildQuery") DynamicSqlObject getObject(@Param("field") String fieldName); ``` ```java // Provider类实现 public class DynamicSqlProvider { public String buildQuery(@Param("field") String fieldName) { return "SELECT id, " + fieldName + " FROM dynamic_sql_object"; } } ``` 这种方式避免XML配置,直接通过Java代码生成SQL[^2]。 #### 4. **注意事项** - **OGNL表达式限制**:`value`属性中的表达式只能访问方法参数(通过`@Param`注解)或全局变量(如`_parameter`),无法直接访问数据库元数据[^3][^4]。 - **性能优化**:`bind`创建的变量仅在当前SQL片段有效,避免在循环中滥用以减少解析开销。 - **防注入**:动态字段名需手动过滤(如避免拼接未经验证的用户输入)[^4]。 通过`bind`标签,您能高效地动态计算SQL变量值,但动态属性名需依赖其他动态SQL功能。如需进一步探讨,请参考以下相关问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值