KonifarPod

Playframework でランダムにDBからモデルを作る方法

   

Pocket

Playframeworkは、Railsのように簡単にWebサービスを作れる便利フレームワークです。前職でツールを作る時に使って以来、なかなか便利で気に入っています。

O/Rマッピングにhibernateが使われているのですが、DBからランダムに一つのモデルを作成したくてちょっと調べたので備忘がてら残しておこうと思います。なんでそんなことをしたかったかというと、無作為に写真のデータ取ってきてスライドショーにしたかったからです。

 

まあそんなに難しいことではなく、order by RAND() を条件につけるだけです。

List<Photo> photos = Photo.find("order by RAND()").first();

 

ただ、データ数が多い場合は重くなってしまうので、Where句で絞るなどの工夫は必要です。また、データ量によっては、fetch() で取ってきた List の中身をランダムに取得する方がいいかもしれません。ちょっと冗長になりますが。

List<Photo> photos = Photo.find("").fetch(10);
Random rnd = new Random();
int ran = rnd.nextInt(photos.size()-1);
photos.get(ran);

 

order by RAND() でやった方がよさそうな感じですね。まあやり方は色々ありますので、モデルをDBからランダムに取ってきたくなった時は参考にしてみてください。

Pocket

 - Develop