ChatGPTを使ってコード生成の手間を減らすことができます。特に単純な作業などはミスも減り生産的なので、コーディングの際に非常に役立ちます。
今回はDapperを使う際に、面倒であった作業を楽にしてみました。
DTOクラスからDAOクラス作成を自動化
以下の様な定義のDTOがあるとします。
public class DtoClass
{
public int Id { get; set; }
public string Name { get; set; }
public bool Flg { get; set; }
public DateTime InsertDate { get; set; }
public DateTime UpdateDate { get; set; }
}
ChatGPTにコードを渡して、依頼してみます。
以下、ChatGPTからの回答です。
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Dapper;
public class DtoClassDao
{
private readonly string _connectionString;
public DtoClassDao(string connectionString)
{
_connectionString = connectionString;
}
public IEnumerable<DtoClass> GetAll()
{
using (IDbConnection db = new SqlConnection(_connectionString))
{
return db.Query<DtoClass>("SELECT * FROM DtoClass");
}
}
public DtoClass GetById(int id)
{
using (IDbConnection db = new SqlConnection(_connectionString))
{
return db.QueryFirstOrDefault<DtoClass>("SELECT * FROM DtoClass WHERE Id = @Id", new { Id = id });
}
}
public void Insert(DtoClass dto)
{
using (IDbConnection db = new SqlConnection(_connectionString))
{
string sqlQuery = "INSERT INTO DtoClass (Name, Flg, InsertDate, UpdateDate) VALUES (@Name, @Flg, @InsertDate, @UpdateDate)";
db.Execute(sqlQuery, dto);
}
}
public void Update(DtoClass dto)
{
using (IDbConnection db = new SqlConnection(_connectionString))
{
string sqlQuery = "UPDATE DtoClass SET Name = @Name, Flg = @Flg, InsertDate = @InsertDate, UpdateDate = @UpdateDate WHERE Id = @Id";
db.Execute(sqlQuery, dto);
}
}
public void Delete(int id)
{
using (IDbConnection db = new SqlConnection(_connectionString))
{
string sqlQuery = "DELETE FROM DtoClass WHERE Id = @Id";
db.Execute(sqlQuery, new { Id = id });
}
}
}
DtoClassDao dao = new DtoClassDao("connection string");
IEnumerable<DtoClass> dtos = dao.GetAll();
懇切丁寧に注意書きまでしてくれます。非常に便利です。
やりたい処理とずれている場合は手修正が多少必要ですが、大枠を自動で作成してくれるため非常に生産性が高いです。
DTOからSQL文作成を自動化
SQL文作成も依頼できます。
CREATE TABLE DtoClass (
Id INT PRIMARY KEY IDENTITY(1,1),
Name NVARCHAR(50) NOT NULL,
Flg BIT NOT NULL,
InsertDate DATETIME NOT NULL,
UpdateDate DATETIME NOT NULL
)
今回はIdという項目を自動で主キーと判断して、設定してくれています。事前に主キーが何かを明記しておくといいと思います。また、複合キーの場合などもあらかじめ明記してあげましょう。
また、プロパティのデータ型から列のデータ型を自動で判別してくれています。DATETIME型についてはsmalldatetimeなどに適宜修正するか、あらかじめ明記しておく必要がありますね。
このように割と大雑把なプロンプトでもChatGPT側で判断してくれます。より丁寧なプロンプトを投げかければ、自分の思ったような回答をくれます。このプロンプトをうまく考えてChatGPTと向き合うと非常に生産的に仕事ができると感じました。