高瀬博道の技術ブログ

高瀬博道の技術ブログです。

TypeORMに入門する - 6

前回

takasehiromichiex.com

リポジトリの使用

今度は、リポジトリを使用するようにしてみます。

src/index.ts
import { AppDataSource } from "./data-source";
import { Photo } from "./entity/Photo";

AppDataSource.initialize()
  .then(() => {
    console.log("start...");

    const photoRepository = AppDataSource.getRepository(Photo);

    const photo = new Photo();

    photo.name = "my photo";
    photo.description = "my description";
    photo.filename = "photo.jpg";
    photo.views = 1;
    photo.isPublished = true;

    photoRepository.save(photo).then(() => {
      photoRepository.find().then((savedPhotos) => {
        console.log("savedPhotos: ", savedPhotos);
      });
    });
  })
  .catch((error) => {
    console.log(error);
  });

実行してみます。

start...
query: START TRANSACTION
query: INSERT INTO `photo`(`id`, `name`, `description`, `filename`, `views`, `isPublished`) VALUES (DEFAULT, ?, ?, ?, ?, ?) -- PARAMETERS: ["my photo","my description","photo.jpg",1,1]
query: COMMIT
query: SELECT `Photo`.`id` AS `Photo_id`, `Photo`.`name` AS `Photo_name`, `Photo`.`description` AS `Photo_description`, `Photo`.`filename` AS `Photo_filename`, `Photo`.`views` AS `Photo_views`, `Photo`.`isPublished` AS `Photo_isPublished` FROM `photo` `Photo`
savedPhotos:  [
  Photo {
    id: 1,
    name: 'my photo',
    description: 'my description',
    filename: 'photo.jpg',
    views: 1,
    isPublished: true
  },
  Photo {
    id: 2,
    name: 'my photo',
    description: 'my description',
    filename: 'photo.jpg',
    views: 1,
    isPublished: true
  },
  Photo {
    id: 3,
    name: 'my photo',
    description: 'my description',
    filename: 'photo.jpg',
    views: 1,
    isPublished: true
  }
]

色々とテストで実行していたので、データが複数入っていますが、結果が取れています。

EntityManagerに比べて、単一のデータベースを扱うことができます。

リポジトリの他の使い方

他の記法も試してみます。

src/index.ts
import { AppDataSource } from "./data-source";
import { Photo } from "./entity/Photo";

AppDataSource.initialize()
  .then(async () => {
    console.log("start...");

    const photoRepository = AppDataSource.getRepository(Photo);

    const allPhotos = await photoRepository.find();
    console.log("allPhotos: ", allPhotos);

    const firstPhoto = await photoRepository.findOneBy({ id: 1 });
    console.log("firstPhoto: ", firstPhoto);

    const myPhotoPhoto = await photoRepository.findOneBy({ name: "my photo" });
    console.log("myPhotoPhoto: ", myPhotoPhoto);

    const allViewedPhotos = await photoRepository.findBy({ views: 1 });
    console.log("allViewedPhotos: ", allViewedPhotos);

    const allPublishedPhotos = await photoRepository.findBy({
      isPublished: true,
    });
    console.log("allPublishedPhotos: ", allPublishedPhotos);

    const [photos, photosCount] = await photoRepository.findAndCount();
    console.log("photos: ", photos);
    console.log("photosCount: ", photosCount);
  })
  .catch((error) => {
    console.log(error);
  });

まとめ

ここまでで、

  • リポジトリの使用について
  • リポジトリの他の使い方について

を学びました。

次回はphotoの更新を掘り下げようと思います。

コード

今回のコードは、以下に格納しました。

github.com

takasehiromichiex.com