¸üÐÂʱ¼ä:2021Äê06ÔÂ24ÈÕ18ʱ01·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:

ͼ1 ÈËÓëÉí·ÝÖ¤µÄ¹ØÁª¹ØÏµ
ÄÇôʹÓÃMyBatisÊÇÔõô´¦Àíͼ1ÖеÄÕâÖÖÒ»¶ÔÒ»¹ØÁª¹ØÏµµÄÄØ£¿ÔÚ<resultMap>ÔªËØÖУ¬°üº¬ÁËÒ»¸ö<association>×ÓÔªËØ£¬MyBatis¾ÍÊÇͨ¹ý¸ÃÔªËØÀ´´¦ÀíÒ»¶ÔÒ»¹ØÁª¹ØÏµµÄ¡£
ÔÚ<association>ÔªËØÖУ¬Í¨³£¿ÉÒÔÅäÖÃÒÔÏÂÊôÐÔ£º
¡ñ property£ºÖ¸¶¨Ó³Éäµ½µÄʵÌåÀà¶ÔÏóÊôÐÔ£¬Óë±í×Ö¶ÎÒ»Ò»¶ÔÓ¦£»
¡ñ column£ºÖ¸¶¨±íÖжÔÓ¦µÄ×ֶΣ»
¡ñ javaType£ºÖ¸¶¨Ó³É䵽ʵÌå¶ÔÏóÊôÐÔµÄÀàÐÍ£»
¡ñ select£ºÖ¸¶¨ÒýÈëǶÌײéѯµÄ×ÓSQLÓï¾ä£¬¸ÃÊôÐÔÓÃÓÚ¹ØÁªÓ³ÉäÖеÄǶÌײéѯ£»
¡ñ fetchType£ºÖ¸¶¨ÔÚ¹ØÁª²éѯʱÊÇ·ñÆôÓÃÑÓ³Ù¼ÓÔØ¡£fetchTypeÊôÐÔÓÐlazyºÍeagerÁ½¸öÊôÐÔÖµ£¬Ä¬ÈÏֵΪlazy£¨¼´Ä¬ÈϹØÁªÓ³ÉäÑÓ³Ù¼ÓÔØ£©¡£
<association>ÔªËØµÄʹÓ÷dz£¼òµ¥£¬Ö»ÐèÒª²Î¿¼ÈçÏÂÁ½ÖÖʾÀýÅäÖü´¿É£¬¾ßÌåÈçÏ£º
<!--·½Ê½Ò»£ºÇ¶Ìײéѯ-->
<association property="card" column="card_id"
javaType="com.itheima.po.IdCard"
select="com.itheima.mapper.IdCardMapper.findCodeById" />
<!--·½Ê½¶þ£ºÇ¶Ì×½á¹û-->
<association property="card" javaType="com.itheima.po.IdCard">
<id property="id" column="card_id" />
<result property="code" column="code" />
</association>
MyBatisÔÚÓ³ÉäÎļþÖмÓÔØ¹ØÁª¹ØÏµ¶ÔÏóÖ÷Ҫͨ¹ýÁ½ÖÖ·½Ê½£ºÇ¶ÌײéѯºÍǶÌ×½á¹û¡£Ç¶ÌײéѯÊÇָͨ¹ýÖ´ÐÐÁíÍâÒ»ÌõSQLÓ³ÉäÓï¾äÀ´·µ»ØÔ¤ÆÚµÄ¸´ÔÓÀàÐÍ£»Ç¶Ì×½á¹ûÊÇʹÓÃǶÌ×½á¹ûÓ³ÉäÀ´´¦ÀíÖØ¸´µÄÁªºÏ½á¹ûµÄ×Ó¼¯¡£¿ª·¢ÈËÔ±¿ÉÒÔʹÓÃÉÏÊöÈÎÒâÒ»ÖÖ·½Ê½ÊµÏÖ¶Ô¹ØÁª¹ØÏµµÄ¼ÓÔØ¡£
Á˽âÁËMyBatisÖд¦ÀíÒ»¶ÔÒ»¹ØÁª¹ØÏµµÄÔªËØºÍ·½Ê½ºó£¬½ÓÏÂÀ´¾ÍÒÔ¸öÈ˺ÍÉí·ÝÖ¤Ö®¼äµÄÒ»¶ÔÒ»¹ØÁª¹ØÏµÎªÀý£¬½øÐÐÏêϸ½²½â¡£
²éѯ¸öÈ˼°Æä¹ØÁªµÄÉí·ÝÖ¤ÐÅÏ¢ÊÇÏÈͨ¹ý²éѯ¸öÈ˱íÖеÄÖ÷¼üÀ´»ñ¸öÈËÐÅÏ¢£¬È»ºóͨ¹ý±íÖеÄÍâ¼ü£¬À´»ñȡ֤¼þ±íÖеÄÉí·ÝÖ¤ºÅÐÅÏ¢¡£Æä¾ßÌåʵÏÖ²½ÖèÈçÏ£º
£¨1£©´´½¨Êý¾Ý±í¡£ÔÚmybatisÊý¾Ý¿âÖзֱ𴴽¨ÃûΪtb_idcardºÍtb_personµÄÊý¾Ý±í£¬Í¬Ê±Ô¤ÏȲåÈëÁ½ÌõÊý¾Ý¡£ÆäÖ´ÐеÄSQLÓï¾äÈçÏÂËùʾ£º
USE mybatis;
# ´´½¨Ò»¸öÃû³ÆÎªtb_idcardµÄ±í
CREATE TABLE tb_idcard(
id INT PRIMARY KEY AUTO_INCREMENT,
CODE VARCHAR(18)
);
# ²åÈë2ÌõÊý¾Ý
INSERT INTO tb_idcard(CODE) VALUES('152221198711020624');
INSERT INTO tb_idcard(CODE) VALUES('152201199008150317');
# ´´½¨Ò»¸öÃû³ÆÎªtb_personµÄ±í
CREATE TABLE tb_person(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32),
age INT,
sex VARCHAR(8),
card_id INT UNIQUE,
FOREIGN KEY(card_id) REFERENCES tb_idcard(id)
);
# ²åÈë2ÌõÊý¾Ý
INSERT INTO tb_person(name,age,sex,card_id) VALUES('Rose',29,'Å®',1);
INSERT INTO tb_person(name,age,sex,card_id) VALUES('tom',27,'ÄÐ',2);
Íê³ÉÉÏÊö²Ù×÷ºó£¬Êý¾Ý¿âtb_idcardºÍtb_person±íÖеÄÊý¾ÝÈçͼ2Ëùʾ¡£

ͼ2 tb_idcardºÍtb_person±í
£¨2£©ÔÚEclipseÖд´½¨Ò»¸öÃûΪchapter09µÄWebÏîÄ¿£¬È»ºóÒýÈëÏà¹ØJAR°ü¡¢log4jÈÕÖ¾Îļþ¡¢MybatisUtils¹¤¾ßÀàÒÔ¼°mybatis-config.xmlºËÐÄÅäÖÃÎļþ¡£ÏîÄ¿»·¾³´î½¨Íê³ÉºóµÄÎļþ½á¹¹£¬Èçͼ3Ëùʾ¡£

ͼ3 ÏîÄ¿Îļþ½á¹¹
£¨3£©ÔÚÏîÄ¿µÄcom.itheima.po°üÏ´´½¨³Ö¾Ã»¯ÀàIdCardºÍPerson£¬±à¼ºóµÄ´úÂ룬ÈçÎļþ1ºÍÎļþ2Ëùʾ¡£
Îļþ1 IdCard.java
package com.itheima.po;
/**
* Ö¤¼þ³Ö¾Ã»¯Àà
*/
public class IdCard {
private Integer id;
private String code;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public String toString() {
return "IdCard [id=" + id + ", code=" + code + "]";
}
}
Îļþ2 Person.java
package com.itheima.po;
/**
* ¸öÈ˳־û¯Àà
*/
public class Person {
private Integer id;
private String name;
private Integer age;
private String sex;
private IdCard card; //¸öÈ˹ØÁªµÄÖ¤¼þ
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public IdCard getCard() {
return card;
}
public void setCard(IdCard card) {
this.card = card;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", "
+ "age=" + age + ", sex=" + sex + ", card=" + card + "]";
}
}
ÔÚÉÏÊöÁ½¸öÎļþÖУ¬·Ö±ð¶¨ÒåÁ˸÷×ÔµÄÊôÐÔÒÔ¼°¶ÔÓ¦µÄgetter/setter·½·¨£¬Í¬Ê±ÎªÁË·½±ã²é¿´Êä³ö½á¹û»¹ÖØÐ´ÁËtoString()·½·¨¡£
£¨4£©ÔÚcom.itheima.mapper°üÖУ¬´´½¨Ö¤¼þÓ³ÉäÎļþIdCardMapper.xmlºÍ¸öÈËÓ³ÉäÎļþPersonMapper.xml£¬²¢ÔÚÁ½¸öÓ³ÉäÎļþÖбàдһ¶ÔÒ»¹ØÁªÓ³Éä²éѯµÄÅäÖÃÐÅÏ¢£¬ÈçÎļþ3ºÍÎļþ4Ëùʾ¡£
Îļþ3 IdCardMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.IdCardMapper">
<!-- ¸ù¾Ýid²éѯ֤¼þÐÅÏ¢ -->
<select id="findCodeById" parameterType="Integer" resultType="IdCard">
SELECT * from tb_idcard where id=#{id}
</select>
</mapper>
Îļþ4 PersonMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.PersonMapper">
<!-- ǶÌײéѯ£ºÍ¨¹ýÖ´ÐÐÁíÍâÒ»ÌõSQLÓ³ÉäÓï¾äÀ´·µ»ØÔ¤ÆÚµÄÌØÊâÀàÐÍ -->
<select id="findPersonById" parameterType="Integer"
resultMap="IdCardWithPersonResult">
SELECT * from tb_person where id=#{id}
</select>
<resultMap type="Person" id="IdCardWithPersonResult">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
<result property="sex" column="sex" />
<!-- Ò»¶ÔÒ»£ºassociationʹÓÃselectÊôÐÔÒýÈëÁíÍâÒ»ÌõSQLÓï¾ä -->
<association property="card" column="card_id" javaType="IdCard"
select="com.itheima.mapper.IdCardMapper.findCodeById" />
</resultMap>
</mapper>
ÔÚÉÏÊöÁ½¸öÓ³ÉäÎļþÖУ¬Ê¹ÓÃÁËMyBatisÖеÄǶÌײéѯ·½Ê½½øÐÐÁ˸öÈ˼°Æä¹ØÁªµÄÖ¤¼þÐÅÏ¢²éѯ£¬ÒòΪ·µ»ØµÄ¸öÈ˶ÔÏóÖгýÁË»ù±¾ÊôÐÔÍ⻹ÓÐÒ»¸ö¹ØÁªµÄcardÊôÐÔ£¬ËùÒÔÐèÒªÊÖ¶¯±àд½á¹ûÓ³Éä¡£´ÓÓ³ÉäÎļþPersonMapper.xmlÖпÉÒÔ¿´³ö£¬Ç¶ÌײéѯµÄ·½·¨ÊÇÏÈÖ´ÐÐÒ»¸ö¼òµ¥µÄSQLÓï¾ä£¬È»ºóÔÚ½øÐнá¹ûÓ³Éäʱ£¬½«¹ØÁª¶ÔÏóÔÚ<association>ÔªËØÖÐʹÓÃselectÊôÐÔÖ´ÐÐÁíÒ»ÌõSQLÓï¾ä£¨¼´IdCardMapper.xmlÖеÄSQL£©¡£
£¨5£©ÔÚºËÐÄÅäÖÃÎļþmybatis-config.xmlÖУ¬ÒýÈëMapperÓ³ÉäÎļþ²¢¶¨Òå±ðÃû£¬ÈçÎļþ5Ëùʾ¡£
Îļþ5 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- ÒýÈëÊý¾Ý¿âÁ¬½ÓÅäÖÃÎļþ -->
<properties resource="db.properties" />
<!--ʹÓÃɨÃè°üµÄÐÎʽ¶¨Òå±ðÃû -->
<typeAliases>
<package name="com.itheima.po" />
</typeAliases>
<!--ÅäÖû·¾³ £¬Ä¬ÈϵĻ·¾³idΪmysql -->
<environments default="mysql">
<!-- ÅäÖÃidΪmysqlµÄÊý¾Ý¿â»·¾³ -->
<environment id="mysql">
<!-- ʹÓÃJDBCµÄÊÂÎñ¹ÜÀí -->
<transactionManager type="JDBC" />
<!--Êý¾Ý¿âÁ¬½Ó³Ø -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!--ÅäÖÃMapperµÄλÖà -->
<mappers>
<mapper resource="com/itheima/mapper/IdCardMapper.xml" />
<mapper resource="com/itheima/mapper/PersonMapper.xml" />
</mappers>
</configuration>
ÔÚÉÏÊöºËÐÄÅäÖÃÎļþÖУ¬Ê×ÏÈÒýÈëÁËÊý¾Ý¿âÁ¬½ÓµÄÅäÖÃÎļþ£¬È»ºóʹÓÃɨÃè°üµÄÐÎʽ×Ô¶¨Òå±ðÃû£¬½ÓÏÂÀ´½øÐл·¾³µÄÅäÖã¬×îºóÅäÖÃÁËMapperÓ³ÉäÎļþµÄλÖÃÐÅÏ¢¡£
£¨6£©ÔÚcom.itheima.test°üÖУ¬´´½¨²âÊÔÀàMybatisAssociatedTest£¬²¢ÔÚÀàÖбàд²âÊÔ·½·¨findPersonByIdTest()£¬ÈçÎļþ6Ëùʾ¡£
Îļþ6 MybatisAssociatedTest.java
package com.itheima.test;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.itheima.po.Person;
import com.itheima.utils.MybatisUtils;
/**
* Mybatis¹ØÁª²éѯӳÉä²âÊÔÀà
*/
public class MybatisAssociatedTest {
/**
* ǶÌײéѯ
*/
@Test
public void findPersonByIdTest() {
// 1¡¢Í¨¹ý¹¤¾ßÀàÉú³ÉSqlSession¶ÔÏó
SqlSession session = MybatisUtils.getSession();
// 2.ʹÓÃMyBatisǶÌײéѯµÄ·½Ê½²éѯidΪ1µÄÈ˵ÄÐÅÏ¢
Person person = session.selectOne("com.itheima.mapper."
+ "PersonMapper.findPersonById", 1);
// 3¡¢Êä³ö²éѯ½á¹ûÐÅÏ¢
System.out.println(person);
// 4¡¢¹Ø±ÕSqlSession
session.close();
}
}
ÔÚÎļþ6µÄfindPersonByIdTest()·½·¨ÖУ¬Ê×ÏÈͨ¹ýMybatisUtils¹¤¾ßÀà»ñÈ¡ÁËSqlSession¶ÔÏó£¬È»ºóͨ¹ýSqlSession¶ÔÏóµÄselectOne()·½·¨»ñÈ¡Á˸öÈËÐÅÏ¢¡£ÎªÁ˲鿴½á¹û£¬ÕâÀïʹÓÃÁËÊä³öÓï¾äÊä³ö²éѯ½á¹ûÐÅÏ¢¡£×îºó³ÌÐòÖ´ÐÐÍê±Ïʱ£¬¹Ø±ÕÁËSqlSession¡£
ʹÓÃJUnit4Ö´ÐÐfindPersonByIdTest()·½·¨ºó£¬¿ØÖÆÌ¨µÄÊä³ö½á¹ûÈçͼ4Ëùʾ¡£

ͼ4 ÔËÐнá¹û
´Óͼ4¿ÉÒÔ¿´³ö£¬Ê¹ÓÃMyBatisǶÌײéѯµÄ·½Ê½²éѯ³öÁ˸öÈ˼°Æä¹ØÁªµÄÉí·ÝÖ¤ÐÅÏ¢£¬Õâ¾ÍÊÇMyBatisÖеÄÒ»¶ÔÒ»¹ØÁª²éѯ¡£
ËäȻʹÓÃǶÌײéѯµÄ·½Ê½±È½Ï¼òµ¥£¬µ«ÊÇ´Óͼ4ÖпÉÒÔ¿´³ö£¬MyBatisǶÌײéѯµÄ·½Ê½ÒªÖ´ÐжàÌõSQLÓï¾ä£¬Õâ¶ÔÓÚ´óÐÍÊý¾Ý¼¯ºÏºÍÁбíչʾ²»ÊǺܺã¬ÒòΪÕâÑù¿ÉÄܻᵼÖ³ɰÙÉÏǧÌõ¹ØÁªµÄSQLÓï¾ä±»Ö´ÐУ¬´Ó¶ø¼«´óµÄÏûºÄÊý¾Ý¿âÐÔÄܲ¢ÇһήµÍ²éѯЧÂÊ¡£Õâ²¢²»ÊÇ¿ª·¢ÈËÔ±ËùÆÚÍûµÄ¡£Îª´Ë£¬ÎÒÃÇ¿ÉÒÔʹÓÃMyBatisÌṩµÄǶÌ×½á¹û·½Ê½£¬À´½øÐйØÁª²éѯ¡£
ÔÚPersonMapper.xmlÖУ¬Ê¹ÓÃMyBatisǶÌ×½á¹ûµÄ·½Ê½½øÐиöÈ˼°Æä¹ØÁªµÄÖ¤¼þÐÅÏ¢²éѯ£¬ËùÌí¼ÓµÄ´úÂëÈçÏÂËùʾ£º
<!-- ǶÌ×½á¹û£ºÊ¹ÓÃǶÌ×½á¹ûÓ³ÉäÀ´´¦ÀíÖØ¸´µÄÁªºÏ½á¹ûµÄ×Ó¼¯ -->
<select id="findPersonById2" parameterType="Integer"
resultMap="IdCardWithPersonResult2">
SELECT p.*,idcard.code
from tb_person p,tb_idcard idcard
where p.card_id=idcard.id
and p.id= #{id}
</select>
<resultMap type="Person" id="IdCardWithPersonResult2">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
<result property="sex" column="sex" />
<association property="card" javaType="IdCard">
<id property="id" column="card_id" />
<result property="code" column="code" />
</association>
</resultMap>
´ÓÉÏÊö´úÂëÖпÉÒÔ¿´³ö£¬MyBatisǶÌ×½á¹ûµÄ·½Ê½Ö»±àдÁËÒ»Ìõ¸´ÔӵĶà±í¹ØÁªµÄSQLÓï¾ä£¬²¢ÇÒÔÚ<association>ÔªËØÖмÌÐøÊ¹ÓÃÏà¹Ø×ÓÔªËØ½øÐÐÊý¾Ý¿â±í×ֶκÍʵÌåÀàÊôÐÔµÄÒ»Ò»Ó³Éä¡£
ÔÚ²âÊÔÀàMybatisAssociatedTestÖУ¬±àд²âÊÔ·½·¨findPersonByIdTest2()£¬Æä´úÂëÈçÏÂËùʾ¡£
/**
* ǶÌ×½á¹û
*/
@Test
public void findPersonByIdTest2() {
// 1¡¢Í¨¹ý¹¤¾ßÀàÉú³ÉSqlSession¶ÔÏó
SqlSession session = MybatisUtils.getSession();
// 2.ʹÓÃMyBatisǶÌ×½á¹ûµÄ·½·¨²éѯidΪ1µÄÈ˵ÄÐÅÏ¢
Person person = session.selectOne("com.itheima.mapper."
+ "PersonMapper.findPersonById2", 1);
// 3¡¢Êä³ö²éѯ½á¹ûÐÅÏ¢
System.out.println(person);
// 4¡¢¹Ø±ÕSqlSession
session.close();
}
ʹÓÃJUnit4Ö´ÐÐfindPersonByIdTest2()·½·¨ºó£¬¿ØÖÆÌ¨µÄÊä³ö½á¹ûÈçͼ5Ëùʾ¡£

ͼ5 ÔËÐнá¹û
´Óͼ5¿ÉÒÔ¿´³ö£¬Ê¹ÓÃMyBatisǶÌ×½á¹ûµÄ·½Ê½Ö»Ö´ÐÐÁËÒ»ÌõSQLÓï¾ä£¬²¢ÇÒͬÑù²éѯ³öÁ˸öÈ˼°Æä¹ØÁªµÄÉí·ÝÖ¤µÄÐÅÏ¢¡£
MyBatisÑÓ³Ù¼ÓÔØµÄÅäÖãº
ÔÚʹÓÃMyBatisǶÌײéѯ·½Ê½½øÐÐMyBatis¹ØÁª²éѯӳÉäʱ£¬Ê¹ÓÃMyBatisµÄÑÓ³Ù¼ÓÔØÔÚÒ»¶¨³Ì¶ÈÉÏ¿ÉÒÔ½µµÍÔËÐÐÏûºÄ²¢Ìá¸ß²éѯЧÂÊ¡£MyBatisĬÈÏûÓпªÆôÑÓ³Ù¼ÓÔØ£¬ÐèÒªÔÚºËÐÄÅäÖÃÎļþmybatis-config.xmlÖеÄ<settings>ÔªËØÄÚ½øÐÐÅäÖ㬾ßÌåÅäÖ÷½Ê½ÈçÏ£º
<settings>
<!-- ´ò¿ªÑÓ³Ù¼ÓÔØµÄ¿ª¹Ø -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- ½«»ý¼«¼ÓÔØ¸ÄΪÏûÏ¢¼ÓÔØ£¬¼´°´Ðè¼ÓÔØ -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
ÔÚÓ³ÉäÎļþÖУ¬MyBatis¹ØÁªÓ³ÉäµÄ<association>ÔªËØºÍ<collection>ÔªËØÖж¼ÒÑĬÈÏÅäÖÃÁËÑÓ³Ù¼ÓÔØÊôÐÔ£¬¼´Ä¬ÈÏÊôÐÔfetchType="lazy"£¨ÊôÐÔfetchType="eager"±íʾÁ¢¼´¼ÓÔØ£©£¬ËùÒÔÔÚÅäÖÃÎļþÖпªÆôÑÓ³Ù¼ÓÔØºó£¬ÎÞÐèÔÚÓ³ÉäÎļþÖÐÔÙ×öÅäÖá£
MybatisÔÀí½éÉÜ£ºMyBatisÈçºÎ²Ù×÷Êý¾Ý¿â£¿
ʲôÊÇMybatis?MybaitsÓÐÄÄЩÓŵ㣿
MybatisÖ´ÐÐSQLÃüÁîÊÇÔõôʵÏֵģ¿
MyBatisÖÐʹÓÃ#ºÍ$ÓÐÊ²Ã´Çø±ð£¿
ÀÖÓãµç¾ºjava¿ª·¢Åàѵ
±±¾©Ð£Çø