一对多在现实生活中很常见,今天做了个Hibernate的一对多的实例,也是个入门过程,写下来跟大家分享。
最重要的是xml配置文件,之前因为把英文"(引号)错误的复制成中文的“”(引号),导致后面编译各种出问题,排查了好久,也百度了各种博客,最后发现是引号的问题。
在现实生活中,部门和员工的关系属于一对多的,一个部门有多个员工,一个员工属于一个部门。
第一步,创建Java工程,名字为HibernateMapping,把Hibernate的jar包和sql server的jar包(或者mysql的jar包)导入进来,并创建Employee,Department实体类和xml配置文件。目录结构和hibernate包如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPgAAADMCAIAAADRWPnnAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAReElEQVR42u1dbXBU1Rnmj//50Rn1R6fW2mlap1JRsIxU/eNnZ0rrVEc7Ojhara12FFo1FCiIhgZRoXzEYCFE5CMBEiMWCB/Kh0OMHaaQoBjAaRICEvKBm5DsbjbL3L67Fzfr7r3nvufcu/fevfd55p0zd8/93L3PPvves+c5Z5xmjq01qzSHUPJ4hQYA3mGcO6cB0QH/El1K0VvqZmUCRAeCqehHt8769stSEB3wNdEbDh4rrdyeH1Sfv/PKlxelozxxvooi2l7R17K468DcE9tmUCVtMO3vtQKij0vDcNlwGw8+nW/O7shlePhGgNyPnjhtuJ1h/aLZb5T9s1kbOGgcWfw2U3RDcrvJD/HBnSU64C+iJ5Ojly5dDlpOJhOx6EWzL8DMGcu13g+MQ9O2HPyCKE6xdncLiA74i+ix2HA6hiii0aGBSO/ZzpNmRH/iD6u0s+tNg5cbmOUwOdtYpj05C+K91I5sto24RnBqszeL71XBiT48PDDu22g/1aoTXW+HyS4fnF6ltVdQTH9yzWO/p6hKl6mYTuWT6ZKW02uZip5/7zkLCntZniu/VF5Qe19AAYk+OHghEunr7z/X1/tVz/muro4Tp44fNlP0+363QTu5SI/7H133fucls/jNI+86SPR8EWUeOV9ZBYJqSPT84zhFdORIrhL9TOeJL9uOtB379IvWT463NLUe3n+keY8Z0W//7Wbt87kUdz5YU3s8Xvt5vPb4SGohVWYifucDNfwcna98glTbJvnMdN0dRQfcIHrr4X1NH9UfbKw50LiJYv/OjR/v3mxG9Em/qtNaXpgyra7q0CDFmqbBqqbUApVr0iXFlF9vFT/qGabXnEyas4ty9sxRdP41m+XxnEcLwHmiS7WjE264t2HCfe8v296Xih29y7b3LtvRly579ZoJ9zUE/0Nk/MLIHgdcLyzRFVBy1weCCAPLOT9BykcDCk50B3svAkDRKzoAgOgAENzUBTkPAEUHACj6N3jqtom4N0BwFP3jxZMzQS8X3H11fuAmAT5SdNl/mgh1z16X/bLryC6idSK6u7tpxeuP3qUvgOiAvxRdyrGR0vKyyfHuSopI29Luo+Ud+0u/bm8iWhO5W7fMp9RFXwDRAX8puqxjY2/ZxHikOTtmTbuDaE1aTizXg5apBvk64C9Fl3Js7J03Md7dkB3JaHsmdSFyi1MXw25VGs9aAYDothRdyrHxbyJ6R3Um6mZOEIQh0Q2pb7gNiA44qehSjo26mdfH25bqQVSOd1QaBqXvhkQ3FG/LLwMAojug6FKOjQ3PXhdvK6dIsTy9kB8ClnNkG0QHCqLoUo6NqunfjR8tTbH86HzDELPc0vqAHB0oiKLLtqMvuf/qNMtLDYOj5QDggaIroOqpHwkC9wbwo6I7siMABFDRAaC4FR0AkLog5wGQugAAFF2AGVOvxL0EAqjo+xbceOBvP83E8ge+l/2S1uLWAv5SdAXHBuHAS9ef2ld19tN3KP67ZXHV8w9lv6S1Tn5GJv+tYnBQKLoEZB0blxX9hZ8Qp0cG9vS3bPyi8S0ievZLWuvwx8QgsYcTFhTvuUKk6LKODR17ZqSITrROMXtXpU70zEtaC6KD6L5TdCnHho6dfy6hFIXEm2j9SfWCWdPuyH5Jay1TEakBbC3H4NU8nZmDk3Q5OwuI7DZm4xuHS9GlHBt6Gws9fZKK60Es1yNTQ2vN2mHU5pnw+cwcyu/U81lAwqXoUo4NHfVP/DD76ZNYnv2S1vJ/lwtKdHdm5rBDdM65LImusWcB8Sov8oWiSzk2dNQ+9gPBwyit9QnRFc6uMDOHfUUXHNwpRfe2bcoXii7l2NCx4ZFrBQ+jtFY2R89JncXbaz6bmUNAWcssmZ+4m9E9/5oF5wpvq4taO/q6h6/Nfvokome/pLVoOfZj04c/ie5nHHplYvXD388EPX1mv6S1YJXfKO5tqyX6ugDh+KbhIwDCTnR0KwdAdC0YOwIgejCx7bWfGQaoAEUPlKK/V37jSCKZE59t+yO4DkUPFLb+Y2I+0U9+OOdzcB2K7k9FV/unqWbhTbGRpB6fdPaXPF7xzNK9Hc1LiOufbXu6tuwm44+J18mxaO56+DwiRfyG1Rwb61+5eTg2ShGNj2aIPhxPvaRyw6s3W5KjECxx6phwOQVQ0bMdG3SDmY6NtQsmXYyOUgxGx4h+cXg0FdHR6gWTQHQouu8UPePYoBvMdGysnjcpcnE0cjERGRojemQoQZVfD42unjdZiuhqjgRN2K1KzdmgsYcOZh7Z7Mqh6B4ouqxjg/DW3Fv6BhP9A4m+wZEM0fsGEv2DI/2DiYo5t/CJrrwg7r5rsx+srPD73zMBRR9zbNANYDo2ls3++fmvR1IRGSM6LfdEUjXLZ0+RIrql20Bj96e1JDrzXAoZjuGROUZBKLrbjg26AUzHxpsvTfnqQpwo/qfqQxQ60b/qH6HKc/3xN16SI7od1VdTdMtUyr6ia+bT5kDRvVF0BcdG+Yu3dvWmiH7bzE06y8/0xqmmq4/KkUUv3irIay0N0eJtxG2UObYPsVdN4DXmGB0sjXmCuUOKlOuha0cv+8vUzvPxzp74ztYzFLRA0UFlqjL26l+nhqHRA+3owcfLM6a2d8f+1x2nsv1yGUvXpGLBjKl22ONzwQvzjE6h6+sy7/lfzH7utjnPp2J2VjnnuVTQWg2AogMAFN3LHQEAqQsAwHgB4wWIDuMFAEUvVsB4AaIXmaJ7Zbzgt0N70m6NnrpBU/RiMV6AeVB0Wzt6YrxQYC2IDkW3q+guGy+YkzpYDvGsZnSAqSK8iu6+8UI8erKDE2NYLnB+QEJiqgi+ontivCgQ0c3GGhf/XHCuM/CmiuAruofGCweJrpkbHRQS/RCaKoKv6J4YL8REN5NhyxntxI8EGs+Sp4XSVBFwRQ+S8cJBhqGRJ2iKrga/GS+c0tEwmyoCruhqO8J4AaIDABTd34oOAEhdAADGCxgvQHQYLwAoerECxgsQvcgU3X3jhcZo9rZcW+i/IdGUHjRFd9N4wSc6h4VqXdvB4JAqupvGC6eIboeyIHp4Fd014wVn6Fqzl7JWDE3YTdfyywDjRQAV3TXjheOdcsXbWI6hzhR+GC8CouiuGS84Y5bbIbpaV15OhgPjRRAU3TXjhTuKzpRnO4quwXhRjIrupvFCY3jeBIm12TZmusuZmE5K0WG8KFZF96Hxwhd3FI0zAVN0NRTOeOE5v2G8CKaiq+0I4wWIDgBQdH8rOgAgdQGA8KUu+3aUGwaoAEUPlKLv3f6aofECXIeiBwq7tr1uZrwA16HowVH07Q1L4iNJPWIjo+kymTFe7Gh40+LzKua2arWhqO2cyz+fVegUvaFu2XDaY/Hje5555uVVw7EklbQ8HE9G48lt9cs4t7AQtHDnOHaGL/XwfUHRpXfcUluRNl4kFlZuIX4PRlOMp2XdjVG3ZSWIHjqiBxIbNq2KDI2mI6FTnMqU8SJdU1NTKfVzrNATy8z3oHAc8XC7Um9BaiB2QU81ta7FUHS5HcWljrXvru4fTOihs5xK3XVBsW79vyzFyf6CWFaZXYI5HYAV3gXT1cqZ/wOK7iXerq7uSdssKDKK3hNJ6DVV69ZKUcSsB6zsuOYcojPP5Q7ROdcMRfdyx5Vr1p+7MEKhU/zchbhOd72ysmqdAkXUVF9N0QXngqJD0cew9O1NZ/riZ/tG9FaXM30jeqvLmf441a9YvYGT4Fqm12Z7CdJf8VwampGNw9KvLbB3CMwill8zw4Pkl77yc4RO0d94a/PpnvjptN/idC8txE73xlL2i3S5ZFVNMBoZgLArennF1vbzMT060tF+Pp55+XrFZjssh/WhKIkeSEVfuKJ+4fL6suX1tFC2Qi/f0yspFq3YCk5A0QEAil6cOwIgOogOIHUpWsB4AaKHQtFhvADRQwEYL0D0UCi6TeOF3IfrYst6mE0VUHQD2DdeKNDCpXsZ1r7mUHQD2DdegOhBI3ogYd94kfPzzTFMcI6jWc1CAVMFFN0D44WDI6Y7NS9FaLvgQtENYMd4kaO+zhKdOYeRC0TXis1UESJF58O+8UJw++3MgSHmEIdVUHQo+hgcMV5oVoa3fBmWnZ+Ik3ALri1UpgoougH8abxAL3YousPwm/ECXg0oekEA4wWIDgBQ9KAoOgCig+gAUhefAf4JIBSKDv8EEApFh38CCIWiq/knBMPBWW7jx5vn9H+TAR6DqVjfkrJ/QqrTSIHY6avjuPz2oehyOyr7J0B0EL2YoOyfYHaxkp24gjNNBefIzMsWz3hhOVpvkBwVRazoLk9coal6IxT20ni9dh25ZrPjBKz/bcAV3cGJK5hEt5y4gjPdhWbevZZDdHEl85fBkPehJnqw/RNqii7mmR1Fl02alY8DRS8mqPknOO4EzWriCstdmMm0IP9WyNEtf3OC6qgIuKIX1D9RlDcy6JIcUkUvnH+iqLkOG0fQFB3+CSAUig4AoVB0AADRAQCpCwCi+0TRI22NHdXjqcTtAYKs6CmWN5dQidvjPlbOvVuPgL0FxxS94eCx0srt+UH1shd6dP54YrlY1MeZw3ADznHc1hiT83rrAsnhR4Y0NtmfcxD+YS1PanYQCaJLgTgtVT/uycbJc+onzP+g5JVdVy0+NH7Jf65YeYwqx1KX/SUdleMtuZK/zB9q2c6/iY7wz/PO8Uxi2RT47N0zy/kLZiTmHNkW0aUUnQidTI5eupQKuje0nEwmYtGLZkS/8u45hpER9cj+a9qWOkB02V6BIHpBiZ5TyRFstbUFVPRYbDgdQ3RvotGhgUjv2c6TZkQn3LDyMbPQsxciuviR1LJDLHOWCMNdBAYFpjODc3bx9Wgm3bnMrtxsG7M+Z2pEzxba/ITEUIzztTkn5TBLZiyJ7kDqIqvow8MDOZlx+6lWneiG/okr5t9T2jgnP6ie+H20fHx34zVt5eOlFF1cYzMFEnDUzkjkUkfW2J4PBWcGh+iC3MMyLck/joOKLjiXw4o+OHghEunr7z9HH2XP+a6ujhOnjh8WKDoR2iz07IWITqWzBLU8lCE7Lf1mnPkwHCS65aOt2TOu5WfCV/QcNou34WTVnhFdVtHPdJ74su1I27FP6dM83tLUenj/keY9ZkQ/MPN2cejZy9FSi7aXQjyMMkfFsGSnFNEF/cgt347Ul8Em0Q2ZapZv5H8HpB5GfarorYf3NX1Uf7Cx5kDjJor9Ozd+vHuzGdE/fPrmk+/MMAtaS/xuLh3f3XAVlZz7aphSixNlpjtYwfjMIbrhRfJnluO0tyo811py2jAzNlRuw5BqteSk7G7n6LLt6Dseuu6z136px7FvL1BJa2kbAdEL2sAc1C7dTKLnt3YX19uU/sOooGi49zt6vE/lPd9Eelmv0Ymuh5tUCKZjMvSGDPReBEJPdACAogMAUhd8QwCkLgAARU8BxgsgFIoO4wXgX0V303gh5Zbwdlgfzv+y+fWc3dUuBkS3C5eNF8yeW364tTY7xGPkLX8pusvGCxAd8EzR3TReSPWy4hsUzLbhzIrBnDlDTOICGS/MsiCpOTOg6JeJ7qbxQjCqt8II/5bbOLLAVOsCGS801Z7uUPRcortpvOBMSqExOtyK+7vyCcHZy0GiW/7EMY/M+V2CoucS3U3jhU3Dm1qNzQkwxJfnjvHCwYeH8Cq6m8YL8fQSlopl5nIQbyM2QKhNE+ea8YJTiRzdGm4aLwDAM0WXhT+NF0AYiY7eiwAUHQBCr+gAgNQFAJC6AEB4FB3GCyAUig7jBeBfRffDjBfZqwQ7Kn5S6C4LRdd8OeOFgwzGSFdQ9DFC+23GC6eIzh9nHQiFons+40UOLx3xRoDoUPRcovthxgvNqs+q7GDKYTAlQNHlFN23M17YIboW6M6rILqKohfFjBdqw+ND0aHoY0T3cMaL/BRcPL+cQqMKFB2KnkKQZrwAoOiOAcYLoCgVHQCg6AAARQeAwuP/lw3JdNjBhrIAAAAASUVORK5CYII=" alt="" />
第二步,编辑Employee和Department实体类,代码如下:
package cn.hibernate.onetomany; public class Employee {
private int empNo;//工号
private String empName;//姓名
private Department dep;//部门
public int getEmpNo() {
return empNo;
}
public void setEmpNo(int empNo) {
this.empNo = empNo;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public Department getDep() {
return dep;
}
public void setDep(Department dep) {
this.dep = dep;
}
public Employee(int empNo, String empName, Department dep) { this.empNo = empNo;
this.empName = empName;
this.dep = dep;
} public Employee(){ }
}
Employee.java
package cn.hibernate.onetomany; import java.util.HashSet;
import java.util.Set; public class Department {
private int depId;//部门号
private String depName;//部门名
private Set<Employee> emps = new HashSet<Employee>();
public int getDepId() {
return depId;
}
public void setDepId(int depId) {
this.depId = depId;
}
public String getDepName() {
return depName;
}
public void setDepName(String depName) {
this.depName = depName;
}
public Set<Employee> getEmps() {
return emps;
}
public void setEmps(Set<Employee> emps) {
this.emps = emps;
} public Department(int depId, String depName, Set<Employee> emps) {
this.depId = depId;
this.depName = depName;
this.emps = emps;
} public Department(){ }
}
Department.java
两个实体类的代码要注意的是它们要有属性的get和set方法,而且在部门类中有员工的集合,员工类中有部门的属性。
第三步,编辑hibernate的核心配置文件hibernate.cfg.xml,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory> <property name="hibernate.connection.dialect">
org.hibernate.dialect.SQLServer2005Dialect
<!--mysql的方言:org.hibernate.dialect.MySQLDialect-->
</property> <property name="hibernate.connection.driver_class">
com.microsoft.sqlserver.jdbc.SQLServerDriver
<!--mysql的驱动:com.mysql.jdbc.Driver-->
</property> <property name="hibernate.connection.url">
jdbc:sqlserver://10.86.57.121:1433;DatabaseName=HibernateDemo;
<!--mysql的数据库:jdbc:mysql:///hibernate_demo-->
</property> <property name="hibernate.connection.username">sa<!--mysql的登录名:root --></property>
<property name="hibernate.connection.password">123456</property> <!--
<property name=“hibernate.show_sql”>true</property>
<property name=“hibernate.format_sql”>true</property>
<property name=“hibernate.hbm2ddl.auto”>create</property>
-->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property> <mapping resource="cn/hibernate/onetomany/department.hbm.xml" />
<mapping resource="cn/hibernate/onetomany/employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>
hibernate.cfg.xml
这个配置文件很重要,我出的各种问题都在这里,比如中文引号和约束文件:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
有的博客写的是http://www.hibernate.org/hibernate-configuration-3.0.dtd什么的,结果导致hibernate无法加载,所以还是用http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd更靠谱
第四步,编辑hibernate的映射文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="cn.hibernate.onetomany.Employee" table="t_emp">
<id name="empNo" column="empNo">
<generator class="native"></generator>
</id> <property name="empName"></property>
<!-- name是一的一方的属性,即在Employee.java中定义的private Department那个变量
column是外键,这个要跟另一个映射文件的外键一致
-->
<many-to-one name="dep" column="dep_emp_id" class="cn.hibernate.onetomany.Department"></many-to-one>
</class>
</hibernate-mapping>
employee.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="cn.hibernate.onetomany.Department" table="t_dep">
<id name="depId" column="depId" type="int">
<generator class="native"></generator>
</id> <property name="depName"></property>
<!-- name是多的一方的属性,即在Department.java中定义的private Set<Employee>那个变量 -->
<set name="emps">
<!-- column是外键,和另一个映射文件的外键对应 -->
<key column="dep_emp_id"></key>
<one-to-many class="cn.hibernate.onetomany.Employee"/>
</set>
</class>
</hibernate-mapping>
department.hbm.xml
这两个配置文件也很重要,而且比较难理解,一定要注意谁是多的一方,谁是一的一方
第五步,编写测试程序MainTest.java,代码如下:
package cn.hibernate.onetomany; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; public class MainTest {
@Test
public void test(){
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = null; session = factory.openSession();
Transaction tx = session.beginTransaction(); Department dep = new Department();
dep.setDepName("Waijiao");
Employee em1 = new Employee();
Employee em2 = new Employee();
em1.setEmpName("Wangyi");
em2.setEmpName("Huachunying"); dep.getEmps().add(em1);
dep.getEmps().add(em2);
em1.setDep(dep);
em2.setDep(dep); session.save(dep);
session.save(em1);
session.save(em2); System.out.println("Add Success!");
tx.commit();
}
}
MainTest.java
这个是测试,也可以写成main主函数,但是那样要有捕获异常以及事务回滚等操作。
最后,Run as JUnit Test,再查看数据库,新建了t_dep和t_emp表,查询两个表的结果,都已经更新完成。
aaarticlea/png;base64,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" alt="" />
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABHCAIAAACI3TJGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEz0lEQVR42u2cO27cMBCGdaRsF5fxMQykEnSRwEcwUgiqAvgCAXyCAG4MSIUBuVMKF1uk2CKFCxfKcClrmSU5HD1IiasRBrLCZcQxP/4zI2rhZP/a3H67rZ9LtlgsYWbMjC04szaqg5mV0c3C9ZfrTTOLcdmC5xuMB9Ezi0Jq8zpJYpbmZttl57YGZo+/HsEefj6odv/jfvF4EJpZUbWd5W1qMZxZkiTIP2dkVuTnldThzyHNi4uJByN1pitM2KdJzBL7MY7Z29+38tCC3T+9pdnGmKkrt3w6XUMI6q7eQX/ALHUCQ5CobGzXdGb1S11WJXgLwKBlIjPEB0rAWJjZiVPbQp6QwGBFQ5+rz1dOYGF0VlQl+AYXkMakDWKmO2y8oHu7ADORwGHZPnXpvTc5LzLD48z0X8bIbEadqQdIrRNcJXA2v5uh2NQz7tWKmBl1BrMDCpNpA/rYmOEr1IfO9q97qDvAykoAA1N9hhhOwTZj9l1NbHwXsfGU51FmQ6tEYn8bM0DyXzCojv7nRZun8CloDsHmXEZx6Ozu+x3kczkFfaqQ5z5nFHnhjI19hDFOAX5MiY0ds+MBqHZZCsyIFdOgYmpFOgNmamyRRQcYoBIiO8Yf6IPMAiVv4fljKDMZAER4PHwwy9M2S+Fnmu9EhMxSiqsR60ytFdUc1icMJzNVZ86HNufUUJhJYIKZojxoB6kBRcoKi1tnfZWoxkNZLsKn0myzgNcatj62/05k1gMrqw9mILJsB+WJ0JmLmTGM2zwZFw+8M4NcBb/k2Vm9kDY9Ns5Sg5yYVW1a7fq6FxrhoUVkZfIOAOUZwBkYFmAW176+rAzlk7W0jlm2AxNFY7ZDmFHSrS3j2tIwM3Mzg/ri5uuNqA+PJpl1z9QfsX1EPrOlZL0wZmZT84QkpNsl7xHzO09mNvNctBs74ma29e9dqcyghW21ZmUGMYdtnYYx8xeRl0pCMSY/3WcHM7huji0zntUF4eP+axt3Lp+pzHy4ovoRcgqWGncun1lnrDMP6z1JEuI9jT3lBlLIcfURN6cz+hQYe+pT72NcdRQ6bNbZkjpTR9muzs72yNWWRttH1ydL/9T3uGp//W6N9m1BXZ1Gb6PRmR5qBrXgq97TuMbRnR7a7hmfzvRJt72doqz0wOMa1WPz0DbKpenM2ceTzohaRJYORWex5jNkLVNa5tXZ0BZk6SA6w0uYOOpGY6o3lgZ48h9aN04cFy+FbDrTR7nMfZDRJfVS4/J+4/hH16XG5f1G3m90MfP0prX3I/Ab3qXGncVnEjOvJt/mhbelxp3oM5WZb+HruwlhzrEExv48gFnj7c9fdQvipamf68BnwBbXdwuaQcz6Rh+1kFz19UsNUxny3ET4d9gG68xTLcQ6Y52xzlw6m5LMKToT9w+oM1x8tk9lu3peqc7w/bHpOlPuH05n45ixzpbU2RkY23Xc+cyfznq1Bc5nFGZ9DEBi41kfYwvrbAGd6bT0bnr7OGysM6xudJJQ34o5dTYXM9YZ9nyGM9OvKf1ZZ96fz5ApXooZ66yhl/XGFDU0Nk6vQXgfZP59EN8PA7zfOP9+o29mrLNt7Dd6el/O+/q+dObvfTnrzJfO+OsFa/tigft7V3ys8GBmzIwPZsYHM7uE4x8HwUn/bYvflgAAAABJRU5ErkJggg==" alt="" />
aaarticlea/png;base64,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" alt="" />
外交部,里面有我们酷酷的王毅部长和亲爱的华春莹,中国必强~
欢迎大家留言讨论