MySql 工具






4.74/5 (16投票s)
一个 MySql 工具,可以导出数据库表并生成 ORM 实体
引言
MySql Tool 是一个控制台应用程序,允许您导出表并生成简单的实体以与 ORM 一起使用。
背景
作为一名开发人员,我使用各种 ORM 来将数据库表映射到类实体。如果您使用过 .NET Entity Framework,您就会明白我的意思。对于最近的一个 PHP 项目,我决定开发一个简单的控制台应用程序来生成 PHP 类实体。在开发完应用程序后,我开始为它添加更多功能,主要是因为我沉迷于使用 Console ForegroundColor
。
使用 MySql Tool
加载 MySql Tool 应用程序后,您会看到一个不起眼的启动画面。启动画面上显示的信息会告诉您 localhost 上的 MySql 服务器是否正在运行,端口是 3306 以及版本号。
确定 MySql 服务器是否正在运行的条件是尝试使用 TcpClient
类连接到 localhost 上的 3306 端口。版本号是从 MySql 返回的响应中提取的。
您需要使用的第一个命令是 connect
命令。此命令接受一个参数,即连接字符串。此时我应该警告您,连接字符串会存储在系统注册表中。连接字符串将用于在后续重新加载 MySql Tool 时自动连接到 MySql 服务器。有一个 clean
命令,如果您不再想使用该应用程序,它将删除注册表项。
connect Server=127.0.0.1;database=db_name;uid=root;pwd=password
如果连接尝试成功,控制台提示符将更改为指示当前选定的数据库。提示符看起来像这样
[database_name]>
如果您在连接字符串中未指定数据库,则会反复提示您输入数据库名称。提示符看起来像这样
> Select database:
在上例中,您将反复收到提示,直到您输入有效的数据库名称或键入“.
”(一个句点)退出提示。
连接到 MySql 服务器后,您可以尝试一些命令。可以通过输入 help
来找到所有可用的命令。
上面的屏幕截图显示了您可以使用的命令列表。虽然其中大多数命令不会为您使用该应用程序带来实际的好处,但 export
和 generate
命令提供了一些好处。
在继续介绍 export
和 generate
命令之前,我们先来看看其中一些命令。下面是 show
命令的屏幕截图,该命令用于显示 create table
SQL 语句。
通过修改 show
命令的参数,您可以显示不同的信息。例如,下面的命令/参数显示了如何列出所有数据库表和进程。
show tables
show processlist
如果您需要更改当前活动数据库,可以使用 db
命令,如下所示
db database_name
现在是时候看看该应用程序设计的主要命令了。我们先来看看 export
命令。此命令的语法如下所示
export * C:\Users\Elvis\Desktop\dump.sql
export
命令接受两个参数。第一个参数是要导出的表。在上面的示例中,‘*
’ 表示所有表都将包含在 export
中。如果您想转储单个或一组表,可以使用以下语法。
export table1,table2,table3 C:\Users\Elvis\Desktop\dump.sql
表名必须用逗号分隔,且不包含空格。第二个参数是 SQL 转储文件。在某些情况下,您可能会频繁使用 export
命令,并且不想在每次加载应用程序时都输入文件名。在这种情况下,您可以使用 set
命令创建一个特殊变量,该变量会将一个值保存到系统注册表中。然后,您就可以在导出文件路径中使用它了。
set path C:\Users\Elvis\Desktop
export * -path.dump.sql
在上例中,set
命令用于创建一个名为“path
”的变量,其值为“C:\Users\Elvis\Desktop”。要使用 path
变量,您需要先在变量名前加上“$
”,并在末尾加上“.
”。这会告诉 export
命令将变量替换为 path
值。
现在我们来看看最后一个命令 generate
,该命令可用于生成纯类文件(目前支持 PHP 和 C#)。
generate entity User user php
generate
命令接受三个参数。第一个参数是操作,在这种情况下,我们要生成一个实体。第二个参数是实体名称。此名称将用作类名和文件名。第三个参数是要从中生成实体的数据库表名。最后一个参数是要为其生成实体的编程语言名称。请注意,未指定实体的文件位置。默认情况下,实体文件将保存在 MySql Tool 应用程序的同一目录中;但是,如果您已创建名为“path
”的注册表变量(如前例所示),则实体将保存在该位置。下面的示例代码显示了通过执行上述 generate
命令生成的实体类。
class User{
protected $user_id;
protected $email;
protected $password;
protected $password_salt;
protected $first_name;
protected $last_name;
protected $role_id;
protected $last_login_date;
protected $created_date;
protected $created_by_user_id;
protected $active_ind;
protected $deleted_ind;
public function setUserId($userId){
$this->user_id = $userId;
}
public function getUserId(){
return $this->user_id;
}
public function setEmail($email){
$this->email = $email;
}
public function getEmail(){
return $this->email;
}
public function setPassword($password){
$this->password = $password;
}
public function getPassword(){
return $this->password;
}
public function setPasswordSalt($passwordSalt){
$this->password_salt = $passwordSalt;
}
public function getPasswordSalt(){
return $this->password_salt;
}
public function setFirstName($firstName){
$this->first_name = $firstName;
}
public function getFirstName(){
return $this->first_name;
}
public function setLastName($lastName){
$this->last_name = $lastName;
}
public function getLastName(){
return $this->last_name;
}
public function setRoleId($roleId){
$this->role_id = $roleId;
}
public function getRoleId(){
return $this->role_id;
}
public function setLastLoginDate($lastLoginDate){
$this->last_login_date = $lastLoginDate;
}
public function getLastLoginDate(){
return $this->last_login_date;
}
public function setCreatedDate($createdDate){
$this->created_date = $createdDate;
}
public function getCreatedDate(){
return $this->created_date;
}
public function setCreatedByUserId($createdByUserId){
$this->created_by_user_id = $createdByUserId;
}
public function getCreatedByUserId(){
return $this->created_by_user_id;
}
public function setActiveInd($activeInd){
$this->active_ind = $activeInd;
}
public function getActiveInd(){
return $this->active_ind;
}
public function setDeletedInd($deletedInd){
$this->deleted_ind = $deletedInd;
}
public function getDeletedInd(){
return $this->deleted_ind;
}
}
通过将 generate
命令的最后一个参数更改为‘cs
’,可以为 C# 生成相同的实体,如下所示
generate entity User user cs
using System;
class User
{
public int user_id
{
set;
get;
}
public string email
{
set;
get;
}
public string password
{
set;
get;
}
public string password_salt
{
set;
get;
}
public string first_name
{
set;
get;
}
public string last_name
{
set;
get;
}
public int role_id
{
set;
get;
}
public DateTime last_login_date
{
set;
get;
}
public DateTime created_date
{
set;
get;
}
public int created_by_user_id
{
set;
get;
}
public int active_ind
{
set;
get;
}
public int deleted_ind
{
set;
get;
}
}
请注意,在示例 C# 实体类中,属性具有正确的数据类型。
由于开发和疯狂的编码风格,应用程序可能包含一些错误和 bug。如果您发现任何错误,请务必告诉我。
历史
- 2014 年 11 月 6 日:初始版本