phoenix 使用activerecord模式框架ecto 访问数据库

备注:
   需要先安装mysql 以及phoenix 框架,测试使用的是docker 进行安装,具可以参考代码
 
 1. 创建项目
mix phx.new first --database mysql
  2. 修改数据库链接
config/dev.exs

config :first, First.Repo,
  adapter: Ecto.Adapters.MySQL,
  username: "root",
  password: "dalongrong",
  database: "demoapp",
  hostname: "localhost",
  pool_size: 10,
  port: 3307
3.  数据库准备
./dockerrun.sh

备注: 使用docker

#!/bin/bash
docker  run -d  --name mysql-server57  -p 3307:3306 -e MYSQL_ROOT_PASSWORD=dalongrong -e MYSQL_ROOT_HOST=% mysql/mysql-server:5.7
 
4.  使用ecto 创建数据库访问
a. 使用脚手架生成代码

mix phx.gen.schema User users name:string email:string \
bio:string number_of_pets:integer

b. 生成表结构

mix ecto.migrate
 
5. 数据访问处理(比较简单)
使用命令行

iex -S mix

alias First.{Repo, User}

Repo.insert(%User{email: "user1@example.com"})

[debug] QUERY OK db=2.9ms
INSERT INTO `users` (`email`,`inserted_at`,`updated_at`) VALUES (?,?,?) ["user1@example.com", {{2018, 4, 19}, {2, 50, 7, 547207}}, {{2018, 4, 19}, {2, 50, 7, 549585}}]
{:ok,
 %First.User{
   __meta__: #Ecto.Schema.Metadata<:loaded, "users">,
   bio: nil,
   email: "user1@example.com",
   id: 1,
   inserted_at: ~N[2018-04-19 02:50:07.547207],
   name: nil,
   number_of_pets: nil,
   updated_at: ~N[2018-04-19 02:50:07.549585]
 }}


Repo.all(User)
[debug] QUERY OK source="users" db=3.3ms
SELECT u0.`id`, u0.`bio`, u0.`email`, u0.`name`, u0.`number_of_pets`, u0.`inserted_at`, u0.`updated_at` FROM `users` AS u0 []
[
  %First.User{
    __meta__: #Ecto.Schema.Metadata<:loaded, "users">,
    bio: nil,
    email: "user1@example.com",
    id: 1,
    inserted_at: ~N[2018-04-19 02:50:08.000000],
    name: nil,
    number_of_pets: nil,
    updated_at: ~N[2018-04-19 02:50:08.000000]
  }
]
6. 参考资料
https://hexdocs.pm/phoenix/ecto.html#content
https://github.com/rongfengliang/phoenix-ecto-demo

posted on 2018-04-19 10:56  荣锋亮  阅读(265)  评论(0编辑  收藏  举报

导航