65.9K
CodeProject 正在变化。 阅读更多。
Home

MySql 工具

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (16投票s)

2014年11月6日

CPOL

5分钟阅读

viewsIcon

30845

downloadIcon

870

一个 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 来找到所有可用的命令。

上面的屏幕截图显示了您可以使用的命令列表。虽然其中大多数命令不会为您使用该应用程序带来实际的好处,但 exportgenerate 命令提供了一些好处。

在继续介绍 exportgenerate 命令之前,我们先来看看其中一些命令。下面是 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 日:初始版本
© . All rights reserved.