执行查询

  • 本篇将展示SqlFly的各种查询能力

映射为 Object

  1. @Test
  2. public void test3_1() {
  3. SqlFly sqlFly = SqlFlyFactory.getSqlFly();
  4. String sql = "select username from sys_user where id = ?";
  5. Object username = sqlFly.getScalar(sql, 10001);
  6. System.out.println("id=10001的用户,其username=" + username);
  7. }
  • getScalar() 虽然返回值为 Object 类型,但如果你打印其 username.getClass(),却会发现它的值是 java.lang.String,它的底层类型是由框架自由决定的,
  • 这样看来,getScalar() 虽然调用方便,但它的映射类型却是不可控的,
  • 如果需要强行控制其返回值类型,则需要调用 getModel(),往下看

映射为 Model

  1. @Test
  2. public void test3_2() {
  3. SqlFly sqlFly = SqlFlyFactory.getSqlFly();
  4. String sql = "select * from sys_user where id = ?";
  5. SysUser user = sqlFly.getModel(SysUser.class, sql, 10001);
  6. System.out.println("id=10001的用户,其详细信息为:" + user);
  7. }
  • getModel() 的参数顺序为:映射类型、sql语句、参数列表(不限长参数)
  • 映射类型的取值不仅可以是 SysUser.class 这样的实体类,也可以是 int.class 这样的基础类型

映射为 List集合

  1. @Test
  2. public void test3_3() {
  3. SqlFly sqlFly = SqlFlyFactory.getSqlFly();
  4. String sql = "select * from sys_user";
  5. List<SysUser> list = sqlFly.getList(SysUser.class, sql, 10001);
  6. System.out.println("当前用户表共有" + list.size() + "条数据,分别为:");
  7. for (SysUser user : list) {
  8. System.out.println(user);
  9. }
  10. }
  • 参数同 getModel(),只不过返回值为 List集合

映射为 Map

映射为model还得我先写个实体类,太麻烦了,我想直接映射为Map,可不可以?可以

  1. @Test
  2. public void test3_4() {
  3. SqlFly sqlFly = SqlFlyFactory.getSqlFly();
  4. String sql = "select * from sys_user";
  5. Map<String, Object> map = sqlFly.getMap(sql, 10001);
  6. System.out.println("id=10001的用户,其详细信息为:" + map);
  7. }

映射为 Map的集合

也支持映射为Map的集合

  1. @Test
  2. public void test3_5() {
  3. SqlFly sqlFly = SqlFlyFactory.getSqlFly();
  4. String sql = "select * from sys_user";
  5. List<Map<String, Object>> listMap = sqlFly.getMapList(sql);
  6. System.out.println("当前用户表共有" + listMap.size() + "条数据,分别为:");
  7. for (Map<String, Object> map : listMap) {
  8. System.out.println(map);
  9. }
  10. }

映射为Map并指定列做key

普通的map映射只能以表头做key,试想,有如下查询结果集:

id username
10001 省长
10002 小言
10003 闹心
10004 榴莲

如果我们想以id做key,映射为map的话,该怎么做? getListMapByCol 来解决这个问题

  1. public void test3_6() {
  2. SqlFly sqlFly = SqlFlyFactory.getSqlFly();
  3. String sql = "select id, username from sys_user";
  4. List<Map<String, Object>> listMap = sqlFly.getListMapByCol("id", sql);
  5. System.out.println("映射结果为:" + listMap.get(0));
  6. }

打印输出:

  1. 映射结果为:{10002=小言, 10004=榴莲, 10001=省长, 10003=闹心}