Write Data
Change Object
Rex client generates type safe change object for each model. The change object is used to create and update database records.
- Go
- Java
- TypeScript
userChange := c.ChangeUser().SetName("test")
UserChange userChange = c.changeUser().setName("test");
userChange = c.changeUser().setName("test");
For nullable field, rex client generates extra set nullable methods
- Go
- Java
- TypeScript
name := "test"
userChange := c.ChangeUser().SetNillableName(&name)
Create
To insert or update new data, rex requires a change object.
- Go
- Java
- TypeScript
newPost1 := c.ChangePost().SetTitle("post title #1")
newPost2 := c.ChangePost().SetTitle("post title #2")
newUser := c.ChangeUser().
SetName("test").
SetEmail("test@example.com").
AddPosts(newPost1, newPost2)
user, err := c.QueryUser().Create(newUser)
PostChange newPost1 = c.changePost().setTitle("post title #1");
PostChange newPost2 = c.changePost().setTitle("post title #2");
UserChange newUser = c.changeUser()
.setName("test")
.setEmail("test@example.com")
.addPosts(newPost1, newPost2);
user, err := c.queryUser().create(newUser);
newPost1 = c.changePost().setTitle("post title #1");
newPost2 = c.changePost().setTitle("post title #2");
newUser = client
.changeUser()
.setName("Wang Zuo")
.setEmail("wangzuo@swiftcarrot.com")
.addPosts(newPost1, newPost2);
user = c.queryUser().create(newUser);
Insert All
InsertAll
methods generates batch insert sql with ON CONLICT DO NOTHING
by default. Creating with association will not work with InsertAll
, which requires Create
in an iteration.
- Go
- Java
- TypeScript
ids, err := c.InsertAllUser(
c.ChangeUser().SetName("user #1"),
c.ChangeUser().SetName("user #2"),
)
List<int> ids = c.insertAllUser(
db.ChangeUser().setName("user #1"),
db.ChangeUser().setName("user #2")
);
ids = c.insertAllUser(
db.ChangeUser().setName("user #1"),
db.ChangeUser().setName("user #2")
);
It converts into following sql,
INSERT INTO users(name) VALUES('user #1', 'user #2') ON CONFLICT DO NOTHING RETURNING id;
Update
Rex client supports update in ActiveRecord pattern with change object.
- Go
- Java
- TypeScript
user, err := c.QueryUser().Find(1)
userChange := db.ChangeUser().SetName("new name")
err := user.Update(userChange)
err := user.UpdateContext(ctx, userChange)
User user = c.queryUser().find(1);
UserChange userChange = ChangeUser().setName("new name");
user.Update(userChange);
user = c.queryUser().find(1);
userChange = db.ChangeUser().setName("new name");
user.Update(userChange);
Update an Attribute to nil
Rex generates setNillable
methods to support set a field to null.
- Go
- Java
- TypeScript
userChange := db.ChangeUser().SetNillableName(nil)
err := user.Update(userChange)
UserChange userChange = ChangeUser().setNillableName(nil);
user.Update(userChange);
userChange = db.ChangeUser().setNillableName(null);
user.Update(userChange);
Update All
Update multiple records is done with UpdateAll
method from query builder.
- Go
- Java
- TypeScript
userQuery := c.QueryUser().Limit(10)
userChange := db.ChangeUser().SetName("new name")
rowsAffected, err := userQuery.UpdateAll(userChange)
userQuery = c.queryUser().limit(10);
userChange = ChangeUser().setName("new name");
int rowsAffected = userQuery.UpdateAll(userChange);
userQuery = c.queryUser().limit(10);
userChange = db.ChangeUser().SetName("new name");
rowsAffected = userQuery.UpdateAll(userChange);
Upsert
- Go
- Java
- TypeScript
user, err := c.Upsert(c.ChangeUser().SetName("test"))
user, err := c.UpsertContext(ctx, c.ChangeUser().SetName("test"))
User user := c.upsert(c.changeUser().setName("test"));
user = c.upsert(c.changeUser().setName("test"));
Delete
Rex client supports two types of delete
.
- Go
- Java
- TypeScript
user, err := c.QueryUser().Find(1)
err := user.Delete()
User user = c.findUser(1);
user.delete();
user = c.findUser(1);
user.delete();
Delete by id from a query object.
- Go
- Java
- TypeScript
err := c.QueryUser().Delete(1)
This also supports delete statement with context by c.QueryUserConext(ctx)
.
c.queryUser().delete(1);
c.queryUser().delete(1);
Delete All
Delete multiple records is also done with DeleteAll
method from query builder, similar to UpdateAll
- Go
- Java
- TypeScript
userQuery := c.QueryUser().Limit(10)
rowsAffected, err := userQuery.DeleteAll()
UserQuery userQuery = c.queryUser().limit(10);
int rowsAffected = userQuery.deleteAll();
userQuery = c.queryUser().limit(10);
rowsAffected = userQuery.deleteAll();