DartVM服务器开发(十四)-Jaguar_ORM增删查改

上一篇文章我们讲解了如何使用ORM今天,我们来学习在数据库中通过ORM实现增删查改!让我们来一起学习吧!

1.回顾内容

回顾一下上一篇的内容,主要有

  • jaguar_orm: ^2.2.1依赖
  • 新建实体类User并使用@PrimaryKey()标识主键,@Column(length:长度)定义字符串长度
  • 新建Bean类使用@GenBean()标识构建脚本
  • 添加脚本生成工具依赖

    1
    2
    3
    dev_dependencies:
    build_runner:
    jaguar_orm_gen:
  • 运行脚本生成命令pub run build_runner build,自动创建实体类.porm.dart文件

  • 在实体类中添加part 'user.jorm.dart'重新运行脚本生成命令
  • 添加jaguar_query_postgres: ^2.2.2依赖连接数据库
  • 实例化连接数据库对象final PgAdapter pgAdapter=new PgAdapter('数据库名',username: '用户名',password: '密码')
  • 数据库建立连接await pgAdapter.connect();
  • 创建实体类对应的表bean.createTable();该方法如果表存在的情况下会异常
    ok,上面的就是上一篇文章的主要内容,今天我们来重点讲解一下增删改查

2.添加数据

  • 添加一条数据

    添加一条数据,我们可以通过bean.insert(model)方式添加
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UserBean userBean=new UserBean(pgAdapter);
    User newUser=new User();
    newUser.id='1';
    newUser.username='rhyme';
    newUser.password='123456';
    newUser.avatarPath='static/admin.png';
    newUser.avatar='http:/localhost:8080/static/admin.png';
    newUser.email='rhymelph#gmail.com';
    newUser.role='0';
    newUser.phoneNumber='159xxxxxxxx';
    await userBean.insert(newUser);

这里需要注意,添加之前如果该数据已经存在(根据主键判断),会报异常,异常如下
异常.png
正确做法,是先通过bean.find(primaryKey)查询该数据是否已经存在,然后再进行添加

1
2
3
4
5
6
7
8
9
10
11
12
13
UserBean userBean=new UserBean(pgAdapter);
if(await userBean.find('1')==null){
User newUser=new User();
newUser.id='1';
newUser.username='rhyme';
newUser.password='123456';
newUser.avatarPath='static/admin.png';
newUser.avatar='http:/localhost:8080/static/admin.png';
newUser.email='rhymelph#gmail.com';
newUser.role='0';
newUser.phoneNumber='159xxxxxxxx';
await userBean.insert(newUser);
}

  • 添加多条数据(未实现)

    有时候可能需要添加多条记录到数据库,我们可以使用bean.inserMany(List<Model>)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    UserBean userBean=new UserBean(pgAdapter);
    List<User> users=[];
    for(int i in [2,3,4,5]){
    User user=new User();
    user.id=i.toString();
    user.username='rhyme';
    user.password='123456';
    user.avatarPath='static/admin.png';
    user.avatar='http:/localhost:8080/static/admin.png';
    user.email='rhymelph#gmail.com';
    user.role='0';
    user.phoneNumber='159xxxxxxxx';
    users.add(user);
    }
    await userBean.insertMany(users);

3. 删除数据

  • 根据主键删除数据

    根据主键删除数据我们可以使用bean.remove(primaryKey)

    1
    2
    UserBean userBean=new UserBean(pgAdapter);
    userBean.remove('1');//删除id为1的数据
  • 删除表里所有的数据

    这个可能需求没那么大,删除表里所有数据可以使用bean.removeAll()

    1
    2
    UserBean userBean=new UserBean(pgAdapter);
    userBean.removeAll();
  • 删除多条数据

    删除多条数据我们可以使用bean.removeMany(List<Model>),如果数据不存在也不会包异常

    1
    2
    3
    4
    5
    UserBean userBean=new UserBean(pgAdapter);
    userBean.removeMany(<User>[
    newUser1,
    newUser2,
    ]);
  • 根据条件删除数据

    根据条件删除数据,我们可以使用的条件有

    • eq 等于
    • ne不等于
    • gt 大于
    • gtEq 大于等于
    • lt 小于
    • ltEq 小于等于
    • between 在…之间
    • 更多
      使用如下:
      1
      2
      UserBean userBean=new UserBean(pgAdapter);
      await bean.removeWhere(bean.id.eq('1'));//删除id为1的数据

4. 查询数据

  • 根据主键查询一条数据

    如果实体类里面使用@PrimaryKey()标识字段,就会在使用pub run build_runner build之后多生成一个方法find(key)

    1
    2
    UserBean bean=new UserBean(pgAdapter);
    User user=await bean.find('1');//查询id为1的User
  • 根据其他条件查询一条数据

    如果你不想通过主键去查询,可以根据其它字段去查一条数据,如果有多条与查询字段相同的数据,会查询到比较靠前的一条,我们可以通过bean.findOne(find)查询

    1
    2
    UserBean bean=new UserBean(pgAdapter);
    User user=await bean.findOne(bean.finder.eq('username', 'rhyme'));

我们还可以使用bean.findOneWhere(exp)查询

1
2
UserBean bean=new UserBean(pgAdapter);
User user=await bean.findOneWhere(bean.id.eq('1'));

  • 根据条件查询多条数据

    根据条件查询多条数据,我们可以使用bean.findWhere(exp)查询

    1
    2
    UserBean bean=new UserBean( pgAdapter);
    List<User> users=await bean.findWhere(bean.sex.gtEq(0));
  • ### 查询表中所有数据
    查询表中所有数据,我们可以使用bean.getAll()查询

    1
    2
    UserBean bean=new UserBean( pgAdapter);
    List<User> users=await bean.getAll();

5.更新数据

  • 更新一条数据

    更新一条数据我们可以使用bean.update(model,only:Set<String>)
    这里要注意的是,该更新根据主键更新,所以model必须主键有赋值,only里面添加的是字段名,表示只更新里面包含的字段,不添加only默认更新该条数据的全部字段

    1
    2
    3
    4
    5
    6
    //更新id为1的username字段
    await bean.update(new User()
    ..id='1'
    ..username='rhyme_lph',
    only: new Set()
    ..add('username'));
  • 更新多条数据(未实现)

    我们可以使用bean.updateMany(List<Model>)更新多条数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    UserBean bean=new UserBean( pgAdapter);
    await bean.updateMany(<User>[
    new User()
    ..id='1'
    ..username='rhyme1'
    ..password='123'
    ..sex=3
    ..phoneNumber='1597551'
    ..role=3,
    new User()
    ..id='2'
    ..username='rhyme1'
    ..password='123'
    ..sex=3
    ..phoneNumber='1597551'
    ..role=3,
    ]);

ok,上面就是今天的内容,我们明天见吧!

评论系统未开启,无法评论!