NutzCN Logo
问答 自定义sql失败,问题在record类的toEntity方法
发布于 3015天前 作者 kursk-ye 1963 次浏览 复制 上一个帖子 下一个帖子
标签:

我按照自定义sql的例子编写代码
static List demoSql(Dao dao) {
Sql sql= Sqls.create("select t1.name from @person t1;");
sql.vars().set("person","t_person");

    dao.execute(sql);
    return sql.getList(String.class);
    // Nutz内置了大量回调, 请查看Sqls.callback的属性
}

    public static void main(String[] args) {
    SimpleDataSource ds = new SimpleDataSource();
    ds.setJdbcUrl("jdbc:mysql://localhost:3306/mysql");
    ds.setUsername("root");
    ds.setPassword("mysql");

    Dao dao = new NutDao(ds);
    demoSql(dao);
}

但总是报错,在Record类的toEntity方法
public T toEntity(Class en, String prefix) {
return en.getObject(this, prefix); //错误说找不到People的getObject方法
}

但是我看了nutz关于DAO的学习手册,没有说实体类要重写getObject方法啊?

我的nutz代码是从githup上clone下来的,JDK 1.7,请问一下这个问题如何解决?

3 回复

错误太多一一指出:
1. @person是参数, sql.vars().set设置的变量, 变量的前缀是$
2. "错误说找不到People的getObject方法"我就没看到哪里用到People类了
3. Sqls.create默认不带回调, 但Sqls还有很多方法,或者自行setCallback才会有返回值

建议:
1. 看DaoUpTest这个类
2. 看nutzbook入门

我研究了DaoUpTest这个类,按照testsqlf方法自己写,还是报同样的错误啊

Person实体类代码

    package kursk;

    import org.nutz.dao.Dao;
    import org.nutz.dao.Sqls;
    import org.nutz.dao.entity.annotation.Column;
    import org.nutz.dao.entity.annotation.Id;
    import org.nutz.dao.entity.annotation.Name;
    import org.nutz.dao.sql.Sql;
    import org.nutz.dao.util.DaoUp;




    public class Person {
       @Id       // 表示该字段为一个自增长的Id,注意,是数据库表中自增!!
       private int id;

       @Name    // 表示该字段可以用来标识此对象,或者是字符型主键,或者是唯一性约束
       private String name;

       @Column      // 表示该对象属性可以映射到数据库里作为一个字段
       private int age;

       @Column     // 表示该对象属性可以映射到数据库里作为一个字段
       private int deptid;

       public int getId() {
         return id;
       }
       public String getName() {
         return name;
       }
       public int getAge() {
         return age;
       }
       public int getDeptid() {
         return deptid;
       }

       public void setId(int id) {
         this.id = id;
       }
       public void setName(String name) {
         this.name = name;
       }
       public void setAge(int age) {
         this.age = age;
       }
       public void setDeptid(int deptid) {
         this.deptid = deptid;
       }

       public static void main(String[] args) {
         Dao dao = DaoUp.me().dao();
         String str = "select t1.name from $person t1";
         Sql sql = Sqls.create(str);
         sql.vars().set("person","t_person");
         sql.setCallback(Sqls.callback.record());
         dao.execute(sql);
       }
    }

报错信息
D:\CodeSpace\nutz_project\src\org\nutz\dao\entity\Record.java
Error:(241, 18) java: 找不到符号
符号: 方法 getObject(org.nutz.dao.entity.Record,java.lang.String)
位置: 类型为java.lang.Class<kursk.People>的变量 en

sorry,是我的错误,不知道为什么在idea中执行以上代码时Record类文件的 toEntity方法中的参数会变成真实的实体类,我前后用了两个实体类做练习,所以导致报错

public <T> T toEntity(Entity<T> en, String prefix) { //执行代码时变成toEntity(Entity<Person> en, String prefix)
    return en.getObject(this, prefix);
}
添加回复
请先登陆
回到顶部