MyBatis ç®ä»
MyBatis æ¬æ¯apacheçä¸ä¸ªå¼æºé¡¹ç®iBatis, 2010å¹´è¿ä¸ªé¡¹ç®ç±apache software foundation è¿ç§»å°äºgoogle codeï¼å¹¶ä¸æ¹å为MyBatisï¼æ¯ä¸ä¸ªåºäºJavaçæä¹ å±æ¡æ¶ã
- æä¹ å±ï¼ å¯ä»¥å°ä¸å¡æ°æ®åå¨å°ç£çï¼å ·å¤é¿æåå¨è½åï¼åªè¦ç£çä¸æåï¼å¨æçµæè å ¶ä»æ åµä¸ï¼éæ°å¼å¯ç³»ç»ä»ç¶å¯ä»¥è¯»åå°è¿äºæ°æ®ã
- ä¼ç¹ï¼ å¯ä»¥ä½¿ç¨å·¨å¤§çç£ç空é´åå¨ç¸å½éçæ°æ®ï¼å¹¶ä¸å¾å»ä»·
- 缺ç¹ï¼æ ¢ï¼ç¸å¯¹äºå åèè¨ï¼
为ä»ä¹ä½¿ç¨ MyBatis
å¨æä»¬ä¼ ç»ç JDBC ä¸ï¼æ们é¤äºéè¦èªå·±æä¾ SQL å¤ï¼è¿å¿ é¡»æä½ ConnectionãStatmentãResultSetï¼ä¸ä» å¦æ¤ï¼ä¸ºäºè®¿é®ä¸åç表ï¼ä¸åå段çæ°æ®ï¼æ们éè¦äºå¾å¤é·å模æ¿åç代ç ï¼é²çç¹çåæ¯ç¥ã
èæ们å¨ä½¿ç¨äº MyBatis ä¹åï¼åªéè¦æä¾ SQL è¯å¥å°±å¥½äºï¼å ¶ä½ç诸å¦ï¼å»ºç«è¿æ¥ãæä½ StatmentãResultSetï¼å¤ç JDBC ç¸å ³å¼å¸¸ççé½å¯ä»¥äº¤ç» MyBatis å»å¤çï¼æ们çå ³æ³¨ç¹äºæ¯å¯ä»¥å°±æ¤éä¸å¨ SQL è¯å¥ä¸ï¼å ³æ³¨å¨å¢å æ¹æ¥è¿äºæä½å±é¢ä¸ã
å¹¶ä¸ MyBatis æ¯æ使ç¨ç®åç XML æ注解æ¥é ç½®åæ å°åçä¿¡æ¯ï¼å°æ¥å£å Java ç POJOs(Plain Old Java Objects,æ®éç Java对象)æ å°ææ°æ®åºä¸çè®°å½ã
æ建 MyBatis ç¯å¢ï¼https://github.com/mybatis/mybatis-3/releasesä¸ä¸è½½mybatis çjarå
Â
第ä¸ä¸ªMyBatisç¨åºï¼
1.å建java项ç®ï¼
2.å¯¼å ¥æ°æ®åºï¼
create database mybatisï¼
user mybatisï¼
CREATE TABLE student(
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
studentID int(11) NOT NULL UNIQUE,
name varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.15 sec)
INSERT INTO student VALUES(1,1,"ææ¯ä½ ç¸ç¸");
INSERT INTO student VALUES(2,2,"ææ¯ä½ ç¸ç¸");
INSERT INTO student VALUES(3,3,"ææ¯ä½ ç¸ç¸");
3.项ç®éï¼æ°å»ºlibæ件ï¼åsrcå级ï¼å¯¼å ¥jarå ï¼å¹¶æ 记为åºï¼
 mybatis-3.5.2.jar
 mysql-connector-java-8.0.18.jar
4.å建å®ä½ç±»Studentï¼
package pojo;
/**
* Studentå®ä½ç±»
* @author lenovo
*/
public class Student {
int id;
int studentID;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getStudentID() {
return studentID;
}
public void setStudentID(int studentID) {
this.studentID = studentID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
5.é ç½®mybatis-config.xmlæ件:æ å°æ件就æ¯åæçå®ä½ç±»Studentç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>
<!-- å«å -->
<typeAliases>
<package name="pojo"/>
</typeAliases>
<!-- æ°æ®åºç¯å¢ -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- æ å°æ件 -->
<mappers>
<mapper resource="pojo/Student.xml"/>
</mappers>
</configuration>
6.å建Student.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="dao">
<!-- ç±äºå¨mybatis-config.xmléé
ç½®äº <typeAliases> å«åï¼æ以å¨è¿éç resultType å¯ä»¥ç´æ¥å Studentï¼èä¸ç¨åç±»çå
¨éå®å pojo.Student-->
<!-- namespace å±æ§å
¶å®å°±æ¯å¯¹ SQL è¿è¡å类管çï¼å®ç°ä¸åä¸å¡ç SQL é离-->
<select id="listStudent" resultType="Student">
select * from mybatis.student
</select>
</mapper>
7.ç¼åæµè¯ç±»ï¼
package test;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import pojo.Student;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author lenovo
*/
public class MybatisTest{
public static void main(String[] args) throws IOException {
// æ ¹æ® mybatis-config.xml é
ç½®çä¿¡æ¯å¾å° sqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// ç¶åæ ¹æ® sqlSessionFactory å¾å° session
SqlSession session = sqlSessionFactory.openSession();
// æåéè¿ session ç selectList() æ¹æ³è°ç¨ sql è¯å¥ listStudent
List<Student> listStudent = session.selectList("listStudent");
for (Student student : listStudent) {
System.out.println("ID:" + student.getId() + "NAME:" + student.getName());
}
}
}
8.è¿è¡æµè¯ç±»ï¼
ç»æï¼
ID:1NAME:ææ¯ä½ ç¸ç¸
ID:2NAME:ææ¯ä½ ç¸ç¸
ID:3NAME:ææ¯ä½ ç¸ç¸
è¿è¡åçï¼
åºæ¬åç
- åºç¨ç¨åºæ¾ MyBatis è¦æ°æ®
-
MyBatis ä»æ°æ®åºä¸æ¾æ¥æ°æ®
1.éè¿ mybatis-config.xml å®ä½åªä¸ªæ°æ®åºï¼mybatisï¼
2.éè¿ Student.xml æ§è¡å¯¹åºç sql è¯å¥
3.åºäº Student.xml æè¿åçæ°æ®åºå°è£ å¨ Student 对象ä¸
4.æå¤ä¸ª Student å¯¹è±¡è£ è½½ä¸ä¸ª Student éåä¸
- è¿åä¸ä¸ª Student éå
CRUNæä½
1.å建å®ä½ç±»Studentï¼
package pojo;
/**
* Studentå®ä½ç±»
* @author lenovo
*/
public class Student {
int id;
int studentID;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getStudentID() {
return studentID;
}
public void setStudentID(int studentID) {
this.studentID = studentID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.é ç½®mybatis-config.xmlæ件:æ å°æ件就æ¯åæçå®ä½ç±»Studentç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>
<!-- å«å -->
<typeAliases>
<package name="pojo"/>
</typeAliases>
<!-- æ°æ®åºç¯å¢ -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- æ å°æ件 -->
<mappers>
<mapper resource="pojo/Student.xml"/>
</mappers>
</configuration>
3.é ç½®Student.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="pojo">
<!-- parameterTypeï¼è¦æ±è¾å
¥åæ°çç±»å-->
<!-- resultTypeï¼è¾åºçç±»å-->
<select id="listStudent" resultType="Student">
select * from mybatis.student
</select>
<insert id="addStudent" parameterType="Student">
insert into mybatis.student (id, studentID, name) values (#{id},#{studentID},#{name})
</insert>
<delete id="deleteStudent" parameterType="Student">
delete from mybatis.student where id = #{id}
</delete>
<select id="getStudent" parameterType="_int" resultType="Student">
select * from mybatis.student where id= #{id}
</select>
<update id="updateStudent" parameterType="Student">
update mybatis.student set name=#{name} where id=#{id}
</update>
</mapper>
4.å®ç°å¢å æ¹æ¥
package test;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import pojo.Student;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyBatisTest {
public static void main(String[] args) throws IOException {
// æ ¹æ® mybatis-config.xml é
ç½®çä¿¡æ¯å¾å° sqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// ç¶åæ ¹æ® sqlSessionFactory å¾å° session
SqlSession session = sqlSessionFactory.openSession();
// å¢å å¦ç å äºä¸ä¸ª ID å studentID é½ä¸º 4ï¼åå为âæ°å¢å çå¦çâ çå¦ç
Student student1 = new Student();
student1.setId(4);
student1.setStudentID(4);
student1.setName("æ°å¢å çå¦ç");
session.insert("addStudent", student1);
// å é¤å¦ç å é¤äº ID = 1 çå¦ç
Student student2 = new Student();
student2.setId(1);
session.delete("deleteStudent", student2);
// è·åå¦ç è·åäº ID = 2çå¦ç
Student student3 = session.selectOne("getStudent", 2);
// ä¿®æ¹å¦ç å° ID = 2 çå¦ççååä¿®æ¹ä¸º âä¿®æ¹çå¦çâ
student3.setName("ä¿®æ¹çå¦ç");
session.update("updateStudent", student3);
// æåéè¿ session ç selectList() æ¹æ³è°ç¨ sql è¯å¥ listStudent
List<Student> listStudent = session.selectList("listStudent");
for (Student student : listStudent) {
System.out.println("ID:" + student.getId() + ",NAME:" + student.getName());
}
// æäº¤ä¿®æ¹ æ¥æ交äºå¡ï¼ä¹å¯ä»¥ç®åç解为æ´æ°å°æ°æ®åº
session.commit();
// å
³é session
session.close();
}
}
5.è¿è¡æµè¯ç±»MyBatisTest
è¿è¡ç»æï¼
ID:2,NAME:ä¿®æ¹çå¦ç
ID:3,NAME:ææ¯ä½ ç¸ç¸
ID:4,NAME:æ°å¢å çå¦ç
Â
模ç³æ¥è¯¢ï¼
1.å建å®ä½ç±»Studentï¼
package pojo;
/**
* Studentå®ä½ç±»
* @author lenovo
*/
public class Student {
int id;
int studentID;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getStudentID() {
return studentID;
}
public void setStudentID(int studentID) {
this.studentID = studentID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.é ç½®mybatis-config.xmlæ件:æ å°æ件就æ¯åæçå®ä½ç±»Studentç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>
<!-- å«å -->
<typeAliases>
<package name="pojo"/>
</typeAliases>
<!-- æ°æ®åºç¯å¢ -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- æ å°æ件 -->
<mappers>
<mapper resource="pojo/Student.xml"/>
</mappers>
</configuration>
3.é ç½®Student.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="pojo">
<!-- parameterTypeï¼è¦æ±è¾å
¥åæ°çç±»å-->
<!-- resultTypeï¼è¾åºçç±»å-->
<select id="findStudentByName" parameterType="String" resultType="Student">
SELECT * FROM mybatis.student WHERE name LIKE '%${value}%'
</select>
</mapper>
4.è¿è¡æµè¯ç±»
package test;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.Student;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author lenovo
*/
public class MyBatisTest {
@Test
public void test() throws IOException {
// æ ¹æ® mybatis-config.xml é
ç½®çä¿¡æ¯å¾å° sqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// ç¶åæ ¹æ® sqlSessionFactory å¾å° session
SqlSession session = sqlSessionFactory.openSession();
// 模ç³æ¥è¯¢
List<Student> students = session.selectList("findStudentByName", "ç¸ç¸");
for (Student student : students) {
System.out.println("ID:" + student.getId() + ",NAME:" + student.getName());
}
}
}
5.è¿è¡æµè¯ç±»ï¼
ç»æï¼
ID:3,NAME:ææ¯ä½ ç¸ç¸
Â
å¤æ¡ä»¶æ¥è¯¢
1.å建å®ä½ç±»Studentï¼
package pojo;
/**
* Studentå®ä½ç±»
* @author lenovo
*/
public class Student {
int id;
int studentID;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getStudentID() {
return studentID;
}
public void setStudentID(int studentID) {
this.studentID = studentID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.é ç½®mybatis-config.xmlæ件:æ å°æ件就æ¯åæçå®ä½ç±»Studentç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>
<!-- å«å -->
<typeAliases>
<package name="pojo"/>
</typeAliases>
<!-- æ°æ®åºç¯å¢ -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- æ å°æ件 -->
<mappers>
<mapper resource="pojo/Student.xml"/>
</mappers>
</configuration>
3.é ç½®Student.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="pojo">
<!-- parameterTypeï¼è¦æ±è¾å
¥åæ°çç±»å-->
<!-- resultTypeï¼è¾åºçç±»å-->
<select id="listCategoryByIdAndName" parameterType="map" resultType="Student">
select * from mybatis.student where id> #{id} and name like concat('%',#{name},'%')
</select>
</mapper>
Â
4.å建æµè¯ç±»ï¼è¿å ¥junit.jarå
package test;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.Student;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author lenovo
*/
public class MyBatisTest {
@Test
public void test() throws IOException {
// æ ¹æ® mybatis-config.xml é
ç½®çä¿¡æ¯å¾å° sqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// ç¶åæ ¹æ® sqlSessionFactory å¾å° session
SqlSession session = sqlSessionFactory.openSession();
// å 为æ¯å¤ä¸ªåæ°ï¼èselectListæ¹æ³ååªæ¥åä¸ä¸ªåæ°å¯¹è±¡ï¼æ以éè¦æå¤ä¸ªåæ°æ¾å¨Mapéï¼ç¶åæè¿ä¸ªMap对象ä½ä¸ºåæ°ä¼ éè¿å»
// æ¥è¯¢id>1ä¸ååå
æâææ¯ä½ ç¸âçåå
Map<String,Object> params = new HashMap<>();
params.put("id", 1);
params.put("name", "ææ¯ä½ ç¸");
List<Student> cs = session.selectList("listCategoryByIdAndName",params);
for (Student c : cs) {
System.out.println(c.getName());
}
}
}
Â
5.è¿è¡æµè¯ç±»ï¼
ç»æï¼
ææ¯ä½ ç¸ç¸
Â
-  parameterTypeï¼ å°±æ¯ç¨æ¥å¨ SQL æ å°æ件ä¸æå®è¾å ¥åæ°ç±»åçï¼å¯ä»¥æå®ä¸ºåºæ¬æ°æ®ç±»åï¼å¦ intãfloat çï¼ãå è£ æ°æ®ç±»åï¼å¦ StringãInterger çï¼ä»¥åç¨æ·èªå·±ç¼åç JavaBean å°è£ ç±»
-  resultTypeï¼ å¨å è½½ SQL é ç½®ï¼å¹¶ç»å®æå®è¾å ¥åæ°åè¿è¡ SQL ä¹åï¼ä¼å¾å°æ°æ®åºè¿åçååºç»æï¼æ¤æ¶ä½¿ç¨ resultType å°±æ¯ç¨æ¥æå®æ°æ®åºè¿åçä¿¡æ¯å¯¹åºç Java çæ°æ®ç±»åã
-  â#{}â ï¼ å¨ä¼ ç»ç JDBC çç¼ç¨ä¸ï¼å ä½ç¬¦ç¨ â?â æ¥è¡¨ç¤ºï¼ç¶ååå è½½ SQL ä¹åæç
§ â?â çä½ç½®è®¾ç½®åæ°ãè â#{}â å¨ MyBatis ä¸ä¹ä»£è¡¨ä¸ç§å ä½ç¬¦ï¼è¯¥ç¬¦å·æ¥åè¾å
¥åæ°ï¼å¨å¤§æ¬å·ä¸ç¼ååæ°å称æ¥æ¥å对åºåæ°ãå½ â#{}â æ¥åç®åç±»åæ¶å¯ä»¥ç¨
æè å ¶ä»ä»»æå称æ¥è·åãvalue
-  â${}â ï¼ å¨ SQL é ç½®ä¸ï¼ææ¶åéè¦æ¼æ¥ SQL è¯å¥ï¼ä¾å¦æ¨¡ç³æ¥è¯¢æ¶ï¼ï¼ç¨ â#{}â æ¯æ æ³è¾¾å°ç®ççãå¨ MyBatis ä¸ï¼â${}â 代表ä¸ä¸ª âæ¼æ¥ç¬¦å·â ï¼å¯ä»¥å¨åæ SQL è¯å¥ä¸æ¼æ¥æ°ç符å SQL è¯æ³çè¯å¥ãä½¿ç¨ â${}â æ¼æ¥ç¬¦å·æ¼æ¥ SQL ï¼ä¼å¼èµ· SQL æ³¨å ¥ï¼æ以ä¸è¬ä¸å»ºè®®ä½¿ç¨ â${}âã
- MyBatis 使ç¨åºæ¯ï¼ å¨è¿è¡ MyBatis å¼åæ¶ï¼å¤§é¨åç²¾åé½æ¾å¨äº SQL æ å°æ件ä¸ã MyBatis çç¹ç¹å°±æ¯ä»¥ SQL è¯å¥ä¸ºæ ¸å¿çä¸å®å ¨ç ORMï¼å ³ç³»åæ å°ï¼æ¡æ¶ãä¸ Hibernate ç¸æ¯ï¼Hibernate çå¦ä¹ ææ¬æ¯è¾é«ï¼è SQL è¯å¥å¹¶ä¸éè¦å¼å人åå®æï¼åªéè¦è°ç¨ç¸å ³ API å³å¯ãè¿å¯¹äºå¼åæçæ¯ä¸ä¸ªä¼å¿ï¼ä½æ¯ç¼ºç¹æ¯æ²¡åæ³å¯¹ SQL è¯å¥è¿è¡ä¼ååä¿®æ¹ãè MyBatis è½ç¶éè¦å¼å人åèªå·±é ç½® SQL è¯å¥ï¼MyBatis æ¥å®ç°æ å°å ³ç³»ï¼ä½æ¯è¿æ ·ç项ç®å¯ä»¥éåºç»å¸¸ååç项ç®éæ±ãæä»¥ä½¿ç¨ MyBatis çåºæ¯æ¯ï¼å¯¹ SQL ä¼åè¦æ±æ¯è¾é«ï¼ææ¯é¡¹ç®éæ±æä¸å¡ç»å¸¸åå¨ã
Â
Â
Â
Â
Â