在Employee类中添加name属性,在数据库创建Company表和Employee表,通过MyBatis查询id为1的Company类的信息(Company类中需要含有所属的Employee类的列表
时间: 2024-02-25 11:58:39 浏览: 57
好的,我可以帮你完成这个任务。以下是代码示例:
首先是`Employee`类的修改:
```python
class Employee:
def __init__(self, id, name):
self.id = id
self.name = name
```
我们在`Employee`类中添加了一个`id`属性,以便在数据库中唯一标识每个员工。
接下来是创建数据库表的SQL语句:
```sql
CREATE TABLE Company (
id INT PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE Employee (
id INT PRIMARY KEY,
name VARCHAR(255),
company_id INT,
FOREIGN KEY (company_id) REFERENCES Company(id)
);
```
在上面的SQL语句中,我们创建了一个`Company`表和一个`Employee`表。`Company`表包含`id`和`name`两个列,`Employee`表包含`id`、`name`和`company_id`三个列。`company_id`列是外键,参考`Company`表的`id`列。
最后是使用MyBatis查询的代码:
```python
import mysql.connector
import xml.etree.ElementTree as ET
import sys
# 读取MyBatis的配置文件
tree = ET.parse('mybatis-config.xml')
root = tree.getroot()
# 连接数据库
db_config = root.find('environments').find('environment').find('dataSource')
config = {
'host': db_config.find('property[@name="host"]').get('value'),
'user': db_config.find('property[@name="username"]').get('value'),
'password': db_config.find('property[@name="password"]').get('value'),
'database': db_config.find('property[@name="database"]').get('value')
}
conn = mysql.connector.connect(**config)
# 查询id为1的公司信息
cursor = conn.cursor()
cursor.execute('SELECT * FROM Company WHERE id=%s', (1,))
company_data = cursor.fetchone()
company = Company(company_data[1])
cursor.execute('SELECT * FROM Employee WHERE company_id=%s', (1,))
employee_data = cursor.fetchall()
for employee_row in employee_data:
employee = Employee(employee_row[0], employee_row[1])
company.employees.append(employee)
print("Company name:", company.name)
print("Employees:")
for employee in company.employees:
print(employee.name)
# 关闭数据库连接
cursor.close()
conn.close()
```
在上面的代码中,我们首先读取了MyBatis的配置文件,并使用其中的信息连接到MySQL数据库。然后,我们执行了两个SQL查询语句,分别查询`Company`表和`Employee`表中与id为1的公司有关的数据。接下来,我们创建了一个`Company`对象,并将查询结果中的数据填充到对象中。最后,我们打印了公司信息和所有员工的姓名。
需要注意的是,我们使用了`fetchone()`方法获取查询结果中的第一行数据,因为我们只查询了一条记录。如果查询结果包含多条记录,可以使用`fetchall()`方法获取所有查询结果。
阅读全文