??xml version="1.0" encoding="utf-8" standalone="yes"?>国产无遮挡在线视频免费观看,九一国产在线,校园春色综合http://www.aygfsteel.com/tommyjian/category/23424.html生活是一个目标,接着一个目标?/description>zh-cnFri, 29 Jun 2007 16:45:55 GMTFri, 29 Jun 2007 16:45:55 GMT60译QiBATIS 3.0 草案——用标注进行配|?/title><link>http://www.aygfsteel.com/tommyjian/archive/2007/06/29/127054.html</link><dc:creator>Tommy Jian</dc:creator><author>Tommy Jian</author><pubDate>Fri, 29 Jun 2007 05:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/tommyjian/archive/2007/06/29/127054.html</guid><wfw:comment>http://www.aygfsteel.com/tommyjian/comments/127054.html</wfw:comment><comments>http://www.aygfsteel.com/tommyjian/archive/2007/06/29/127054.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/tommyjian/comments/commentRss/127054.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/tommyjian/services/trackbacks/127054.html</trackback:ping><description><![CDATA[<p><strong>使用标注q行配置</strong></p> <p>   标注现在已经很流行了(jin)Q许多h选择它作为XML的替代来q行元数据编E。标注中不应该包含配|信息,而iBATIS通过XML来进行的工作也不光是配置?/p> <p>   那么什么是配置Q什么又不是呢?目前QiBATIS的XML文g包含?jin)三斚wQ?/p> <ul> <li>配置信息</li> <li>元数据信?/li> <li>代码</li> </ul> <p>   当?zhn)把环境设|改变后Q?zhn)同时也需要更攚w|,例如数据库连接配|、事务管理配|等{。当(zhn)将应用分发C同的数据库,而且也用了(jin)一些专有的SQL语句后,配置中可能还要包含SQL方言的一些配|信息。在iBATIS 3.0中我们可以将q些信息包含q去Q因此,(zhn)需要针对多U方aq行~码Q当然这是手工的Q,为它们命名,q将它们配置到适当的位|。配|信息不应该被包含在Java源文件中?/p> <p>   元数据信息包括诸如结果映、参数映和~存模型之类的信息。这些信息控制iBATIS如何映射(zhn)的数据以及(qing)q些映射的具体表现?/p> <p>   ~码包括SQL以及(qing)动态的SQL语句?/p> <p>   那么标注应该承担什么样的职责呢Q?/p> <p>   一般情况下Q只有元数据信息比较适合使用标注来描q。配|应该通过属性文件或者XML文g来实现。编码也只能通过Java文g或者XML文g来实现。更q一步看Q标注只能用来描q相对较单的元数据信息。有Ӟ标注Q特别是在Java中)(j)也会(x)使事情变得更加复杂,使代码更加晦涩难懂?/p> <p>   因ؓ(f)上面的原因,所以我推荐只将标注作ؓ(f)U定配置的替代配|。这是_(d)使用q种配置方式可以辑ֈ一定的效果Q但是也仅仅限于此?/p> <p>   再一ơ强调,C#的Attribute在某些方面要ZJava的标注:(x)</p> <ul> <li>支持多行字符Ԍq得内嵌SQL~码令h感到愉快</li> <li>支持使用同一标注多次Q而在Java中则需要通过集合标注来实?/li> <li>支持序和命名参敎ͼq得代码变得更加简明扼?/li> </ul> <p>   下面q个例子展示?jin)如何用Java中的标注来完成配|:(x)</p> <div style="border: 2px dotted ; background-color: #99ccff; font-family: Courier New,Courier; font-size: small;">//<br>// Simple select, string concatenation, inline results(!) and inline parameters<br>//<br>@Select("SELECT #id(EMP_ID:NUMERIC), #firstName(FIRST_NAME:VARCHAR), #lastName(LAST_NAME:VARCHAR) " +<br>"FROM EMPLOYEE")<br>List<employee> selectAllEmployees();<br>//<br>// Alternative syntax using an array of strings instead of string concatenation...can be "smarter" than concatenation<br>//<br>@Select({"SELECT #id(EMP_ID:NUMERIC), #firstName(FIRST_NAME:VARCHAR), #lastName(LAST_NAME:VARCHAR) ",<br>"FROM EMPLOYEE",<br>"WHERE EMP_ID = @id"})<br>Employee selectEmployee(int id);<br>//<br>// Inserts look as you might expect. We can use getGeneratedKeys to get autogen key values, selectkey still supported<br>//<br>@Insert({"INSERT INTO EMPLOYEE (EMP_ID, FIRST_NAME, LAST_NAME)",<br>"VALUES (@id, @firstName, @lastName)"})<br>void insertEmployee(Employee emp);<br>//<br>// Nothing special about update<br>//<br>@Update({"UPDATE EMPLOYEE SET",<br>"EMP_ID=@id(NUMERIC:IN), FIRST_NAME=@firstName(VARCHAR:IN), LAST_NAME=@lastName(VARCHAR:IN)"})<br>void updateEmployee(Employee emp);<br>//<br>// Delete is obvious.<br>//<br>@Delete("DELETE EMPLOYEE WHERE EMP_ID = @id")<br>void deleteEmployee(int id);<br></employee></div> <br> <p>   下面q个例子要更加复杂一些,像这U用了(jin)如此多的标注的情况就应该考虑使用XML文g来进行配|。这U情况下Q我惌标注能够提供一切功能,即XML中实现的功能通过标注也能完成。然而,我们q是(zhn)在面对复杂的情冉|使用XML来进行配|。或许某些h不是特别在意使用XML配置Q所以我们ؓ(f)他们提供?jin)标注配|方式?/p> <div style="border: 2px dotted ; background-color: #99ccff; font-family: Courier New,Courier; font-size: small;">//<br>// complex stuff<br>//<br>@ResultClass (Company.class)<br>@ConstructorResults({<br>@Result(property="id", column="C.COMP_ID"),<br>@Result(property="name", column="C.NAME")<br>})<br>@PropertyResults({<br>@Result(property="departments.id", column="D.DEPT_ID"),<br>@Result(property="departments.name", column="D.NAME"),<br>@Result(property="departments.employee.id", column="E.EMP_ID"),<br>@Result(property="departments.employee.firstName", column="E.FIRST_NAME"),<br>@Result(property="departments.employee.lastName", column="E.LAST_NAME")<br>})<br>@Collections ({<br>@Collection(type=Department.class, property="departments", groupBy="id"),<br>@Collection(type=Employee.class, property="departments.employees", groupBy="departments.id")<br>})<br>@Select("SELECT #id, #name, " +<br>"#departments.id, #departments.name, " +<br>"#departments.employees.id, #departments.employees.firstName, " +<br>"#departments.employees.lastName " +<br>"FROM COMPANY C, DEPARTMENT D, EMPLOYEE E " +<br>"WHERE D.DEPT_ID = E.DEPT_ID " +<br>"AND C.COMP_ID = D.COMP_ID")<br>List<company> selectAllCompaniesWithJoin();<br>/*<br>* NESTED QUERIES<br>*/<br>@ResultClass (Company.class)<br>@FieldResults({<br>@Result(property="id", column="COMP_ID"),<br>@Result(property="name", column="NAME")<br>})<br>@PropertyResults({<br>@Result(property="departments",<br>nestedQuery=@QueryMethod(type=CompanyMapper.class, methodName="getDepartmentsForCompany", parameters="id"))<br>})<br>@Select("SELECT #id, #name FROM COMPANY C ")<br>List<company> selectAllCompaniesWithNestedQueries();<br>@ResultClass (Department.class)<br>@PropertyResults({<br>@Result(property="id", column="DEPT_ID"),<br>@Result(property="name", column="NAME"),<br>@Result(property="employees",<br>nestedQuery=@QueryMethod(type=CompanyMapper.class, methodName="getEmployeesForDeparment", parameters="id"))<br>})<br>@Select("SELECT #id, #name FROM DEPARTMENT WHERE COMP_ID = @id ")<br>List<department> getDepartmentsForCompany(int id);<br>@ResultClass (Employee.class)<br>@PropertyResults({<br>@Result(property="id", column="EMP_ID"),<br>@Result(property="firstName", column="FIRST_NAME"),<br>@Result(property="lastName", column="LAST_NAME")<br>})<br>@Select("SELECT #id, #firstName, #lastName FROM EMPLOYEE WHERE EMP_ID = @id ")<br>List<employee> getEmployeesForDepartment(int id);<br></employee></department></company></company></div><img src ="http://www.aygfsteel.com/tommyjian/aggbug/127054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/tommyjian/" target="_blank">Tommy Jian</a> 2007-06-29 13:35 <a href="http://www.aygfsteel.com/tommyjian/archive/2007/06/29/127054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>译QiBATIS 3.0 草案——约定俗成的配置方式http://www.aygfsteel.com/tommyjian/archive/2007/06/26/126256.htmlTommy JianTommy JianTue, 26 Jun 2007 01:47:00 GMThttp://www.aygfsteel.com/tommyjian/archive/2007/06/26/126256.htmlhttp://www.aygfsteel.com/tommyjian/comments/126256.htmlhttp://www.aygfsteel.com/tommyjian/archive/2007/06/26/126256.html#Feedback0http://www.aygfsteel.com/tommyjian/comments/commentRss/126256.htmlhttp://www.aygfsteel.com/tommyjian/services/trackbacks/126256.htmlU定俗成

   Clinton_(d)(x)q一Ҏ(gu)与我们以前所坚持的原则不相符合的。认识我的h都知道我基本上算是一个完的人。但是如果我们从最?jng)_늚角度去考虑Q我们必d解决复杂问题的时候也使用量单的解决Ҏ(gu)。当?dng)那些不太喜欢U定俗成式配|的人可以忽略这U配|方式。但是我怿q是非常有用的,特别是对插入、删除和更新操作来说。用这U配|方式,一些简单的查询也将从中受益?/p>

   默认情况下,iBATIS 3.0用约定俗成式的配|方式。Java 5的方法语义中已经包含?jin)生成SQL、进行参数和l果映射_的信息。例如:(x)

Employee getEmployee (int id);

   q些信息对于生成以下SQL已经_?jin)?x)

SELECT id, firstName, lastName FROM Employee WHERE id = ?

   l果cd与方法的q回值类型是一致的。因为方法的q回值类型不是集合类型,所以我们知道正在处?#8220;Select One”语义。表的名U被假定Zl果cd的名UC致。而查询参数就被假定ؓ(f)Ҏ(gu)对应的参数。在使用其他的配|方式的时候,我们可以更改默认ID参数的配|。SQL语句中的各数据列假定与方法返回类型的同名属性一一对应Q当然这些配|都是可以更改的?/p>

   集合cd也是以同L(fng)方式工作Q?/p>

List listAllEmployees ();

   q个例子生以下SQL语句Q?/p>

SELECT id, firstName, lastName FROM Employee

   我们可以这个例子叫?#8220;Select Many”Q因个方法返回了(jin)一个集合类型。我们知道Where子句为空Q因个方法没有Q何参数?/p>

   如果我们想用参数式查询Q我们可以这h做:(x)

List findEmployeesLike(Employee employee);

   假设只有参数的lastNameQ而其他引用类型都为null|原始cd都被讄为非法无意义的|比如-1Q,我们得C下的SQL语句Q?/p>

SELECT id, firstName, lastName FROM Employee WHERE lastName = 'Begin'

   或者可以直接按参数来进行:(x)

List findEmployeeByLastNameAndFirstName (String last, String first);

   q将生成以下的SQL语句Q?/p>

SELECT id, firstName, lastName FROM Employee WHERE lastName = 'Begin' AND firstName = 'Clinton'

   因ؓ(f)C#支持参数名称的反,所以C#对这U方法提供了(jin)更好的支持。Ş式上也变得相Ҏ(gu)晎ͼ当然实质是一L(fng)Q?/p>

// C#
IList FindEmployeesLike(string lastName, string firstName);
// And in C# 3.0, we can use anonymous types:
IList FindEmployeesLike(object obj);
//...
IList employees = mapper.FindEmployeesLike(new {LastName="Begin", FirstName="Clinton"});

   更新操作也以相同的方式操作:(x)

void insertEmployee (Employee emp);
void updateEmployee (Employee emp);
void deleteEmployee (Employee emp);

   也可以自动接受集合参敎ͼ(x)

int insertEmployee (List emps); // returns rows inserted
int updateEmployee (List emps); // returns rows updated
int deleteEmployee (List emps); // returns rows deleted

   生成器相当的灉|Q而且可以为大多数删除甚至更新操作生成一条SQL语句?/p>

Tommy Jian 2007-06-26 09:47 发表评论
]]>
译QiBATIS 3.0 草案——多U配|方?/title><link>http://www.aygfsteel.com/tommyjian/archive/2007/06/22/125784.html</link><dc:creator>Tommy Jian</dc:creator><author>Tommy Jian</author><pubDate>Fri, 22 Jun 2007 03:23:00 GMT</pubDate><guid>http://www.aygfsteel.com/tommyjian/archive/2007/06/22/125784.html</guid><wfw:comment>http://www.aygfsteel.com/tommyjian/comments/125784.html</wfw:comment><comments>http://www.aygfsteel.com/tommyjian/archive/2007/06/22/125784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/tommyjian/comments/commentRss/125784.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/tommyjian/services/trackbacks/125784.html</trackback:ping><description><![CDATA[<p><strong>多种配置方式</strong></p> <p>   iBATIS中最古老的是光|方式。在目开始的时候,XML被认为最好的配置方式。事实上QXML现在q是比较好的配置Ҏ(gu)Q因为它是进行复杂的多行SQL配置的最x式。因此,XML的配|方式将予以保留。但是它不再是默认的配置方式Q而且也不见得是大多数应用的首选?/p> <p>   iBATIS 3.0用多U配|方式。这是说iBATIS可以用多U方式进行配|,而且q些方式可以协同工作。按照实用性排序,有以下四U方法:(x)</p> <ul> <li>U定俗成</li> <li>Java的标识(可以覆盖前一U配|的配置信息Q?/li> <li>XMLQ可以覆盖前两种配置的配|信息)(j)</li> <li>Java APIQ可以覆盖以上配|的配置信息Q?/li> </ul><img src ="http://www.aygfsteel.com/tommyjian/aggbug/125784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/tommyjian/" target="_blank">Tommy Jian</a> 2007-06-22 11:23 <a href="http://www.aygfsteel.com/tommyjian/archive/2007/06/22/125784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>译QiBATIS 3.0 草案——事务、会(x)话和工厂cZ—MapperFactoryhttp://www.aygfsteel.com/tommyjian/archive/2007/06/20/125358.htmlTommy JianTommy JianWed, 20 Jun 2007 08:00:00 GMThttp://www.aygfsteel.com/tommyjian/archive/2007/06/20/125358.htmlhttp://www.aygfsteel.com/tommyjian/comments/125358.htmlhttp://www.aygfsteel.com/tommyjian/archive/2007/06/20/125358.html#Feedback0http://www.aygfsteel.com/tommyjian/comments/commentRss/125358.htmlhttp://www.aygfsteel.com/tommyjian/services/trackbacks/125358.html事务、会(x)话和工厂cZ—MapperFactory

   我们应该在何处获?#8220;Mapper”的实例呢Q我们仍焉要一个核?j)类来完成iBATIS的配|和控制。这个核?j)类的名U尚在争Z中,但是我们不妨先叫它MapperFactory?/p>

   通常情况下,MapperFactory负责构徏事务和映类的实例。而MapperFactory本n由某个配置cL构徏?/p>

MapperFactory factory = someConfiguration.buildMapperFactory();
EmployeeMapper employeeMapper = factory.getMapper (EmployeeMapper.class);

   对于q种方式是不是会(x)使事情变得简?..或许?x)吧Q至于事务,Clinton是这栯的:(x)“?x)话的概念应该和事务的进行合q。在iBATIS中,?x)话和事务很多时候是一致甚x一L(fng)。但是它们因Z些h为的架构斚w的原因而被分开?jin)。会(x)话或许能够完成不Q务,但是其中?0%q不适合用会(x)话来解决。同L(fng)Q批处理操作也从事务中分d来,因ؓ(f)事务在提供批处理功能是往往?x)导致o(h)人生厌的try/finally的多重嵌套。因此在我们发现真实的需求之前应该尽量避免这些?#8221;?/p>

   iBATIS或者其他第三方库及(qing)容器都可以进行事务处理。目前,事务的处理是由SqlMapClient实例中的ThreadLocal实例来处理的。因U处理方法,我们配到?jin)不问题。不是出于技术的原因而是因ؓ(f)代码更加清晰Q我们可以用以下的Ҏ(gu)Q?/p>

Transaction tx = factory.startTransaction();
try
{
  // do work
  tx.commit();
}
finally
{
  tx.end();
}

   批处理操作可以简单地通过启动支持批处理操作的事务来进行:(x)

Transaction tx = factory.startBatch();
try
{
  // do work
  // balk executes current batch immediately, returns total rows updated
  // (balks on non-batched transactions)
  int totalRowCount = tx.flush();
  // commit executes batch too, returns total rows updated and commits
  totalRowCount = tx.commit();
}
finally
{
  tx.end();
}

   与现在的事务的APIcMQ我们对事务的隔ȝ别以?qing)其他选项提供支持?/p>

Transaction tx = factory.startTransaction(isolationLevel);
try
{
  // do work
  tx.commit();
}
finally
{
  tx.end();
}

   如果W三方的库提供了(jin)事务处理的支持,那么受托理的连接对象可以作为参C入:(x)

// Can be handled by encapsulating framework (e.g. Spring)
Transaction tx = factory.useConnection(conn);
try
{
  //...do work...
  tx.flush(); // executes batched updates immediately
  // commit simply calls commit on the connection
  // if local commits are allowed, otherwise it is ignored.
  tx.commit();
}
finally
{
  tx.end(); // Can also be handled by encapsulating framework (e.g. Spring)
}

   MQ这L(fng)API十分的简z,而且易于与诸如Springq样的第三方框架集成。MapperFactory可以被注入到需要事务管理、批处理和隔ȝ别的Spring的DAO对象中。ؓ(f)?jin)进一步进行必要的分离Q我们可以将事务理功能从MapperFactory中分d来,甚至于允许开发者定义自q事务理接口Q同时将事务理的功能绑定到cMQ这h供了(jin)更加松耦合的架构)(j)?/p>

Tommy Jian 2007-06-20 16:00 发表评论
]]>
译QiBATIS 3.0 草案——接口绑?/title><link>http://www.aygfsteel.com/tommyjian/archive/2007/06/19/125161.html</link><dc:creator>Tommy Jian</dc:creator><author>Tommy Jian</author><pubDate>Tue, 19 Jun 2007 09:40:00 GMT</pubDate><guid>http://www.aygfsteel.com/tommyjian/archive/2007/06/19/125161.html</guid><wfw:comment>http://www.aygfsteel.com/tommyjian/comments/125161.html</wfw:comment><comments>http://www.aygfsteel.com/tommyjian/archive/2007/06/19/125161.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.aygfsteel.com/tommyjian/comments/commentRss/125161.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/tommyjian/services/trackbacks/125161.html</trackback:ping><description><![CDATA[<p><strong>接口l定</strong></p> <p>   随着Java 5的推q,我们有机?x)来改善用户体验。其中最重要的是借助Java 5可以消除令h生惑的类型{换,可以消除SQL映射Z字符的调用方式。D例来_(d)现在在调用SQL映射的时候是q样的:(x)</p> <div style="border: 2px dotted ; background-color: #99ccff; font-family: Courier New,Courier; font-size: small;">Employee employee = (Employee)sqlMapper.queryForList("getEmployee", 5);<br>//...and...<br>List employees = sqlMapper.queryForList("listAllEmployees");</div> <p>   问题是很明显的。第一Q上面的两个例子中被映射的语句的名称都是Z字符串的Q而这很容易导致错误。这U方式也不会(x)得到IDE工具、编译器的支持和理?/p> <p>   W二个问题是存在参数和返回值类型安全问题。在W一个例子中Q谁能保证参数的cd一定是IntegerQ而谁又能保证(zhn)得到的q回g定是Employeecd呢?q里Q编译器也不?x)给ZQ何偿错误报告和提C。而只有运行时异常?x)被抛出?/p> <p>   最后,在集合的例子中问题也是相同的。在q行前,(zhn)可能会(x)获得Dogs的集合,而不是Employees?/p> <p>   MQ这U方式虽然比JDBC强,但是也让人倍感隑֏Q还是存在改善的I间?/p> <p>   在Java 5中我们可以充分用范型来规范集合cd。这P我们不需要进行特D的配置可以ؓ(f)集合cd建立一致的API。我们不需要在XML文g中声明类型,不需要通过字符名称来调用被映射的语句,相反Q我们可以充分利用表辑֥且类型安全的接口cd。没有什么新东西需要学?fn),只是普通的接口可以了(jin)?/p> <div style="border: 2px dotted ; background-color: #99ccff; font-family: Courier New,Courier; font-size: small;">public interface EmployeeMapper <br>{  <br>  Employee getEmployee (int employeeId);  <br>  List<employee> listAllEmployees();<br>}</employee></div> <p>   q就够了(jin)QiBATIS来帮我们实现q个接口?/p> <p>   现在我们可以以一U更加简z和安全的方式来调用被映的语句?jin)?/p> <div style="border: 2px dotted ; background-color: #99ccff; font-family: Courier New,Courier; font-size: small;">Employee emp = empMapper.getEmployee(5);<br>//...and...<br>List<employee> employees = empMapper.listAllEmployees();</employee></div> <p>   在上面的调用中没有类型{换、没有字W串Q而且参数和返回值的cd是、安全的。额外的代码是针对接口使用XML或者Java的标识进行配|。最多我们只需要配|SQL语句、需要进行重载的参数或者返回值类型?/p> <p>   接口描述?jin)所需要的一切?/p> <ul> <li>语句的名Uͼ默认情况下与Ҏ(gu)的名字一_(d)(j)</li> <li>参数cdQ如果存在的话)(j)</li> <li>q回值类型(包括范型集合的元素的cdQ?/li> </ul> <p>   而其中最有趣的就是我们可以基于方法名U这L(fng)U定来生成SQL映射。以后关于配|的章节中将详细讨论q些l节?/p> <p>   接口l定的方法得诸如Springq样的框架将映射cL入其他类变得Ҏ(gu)Q同时也不需要将事务理的过多细节公开?/p><img src ="http://www.aygfsteel.com/tommyjian/aggbug/125161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/tommyjian/" target="_blank">Tommy Jian</a> 2007-06-19 17:40 <a href="http://www.aygfsteel.com/tommyjian/archive/2007/06/19/125161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">鶴</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">봨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ʶ</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ҧ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank">Ԫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ᶼ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ζ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">֯</a>| <a href="http://" target="_blank">Ʊ</a>| <a href="http://" target="_blank">ƶ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͺ</a>| <a href="http://" target="_blank">˶</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͤ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>