Google app engine 在数据存储gae中插入正确的前检查?

Google app engine 在数据存储gae中插入正确的前检查?,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,首先对不起我的英语我用谷歌翻译 我对使用Google App Engine是新手,我会放置一个用户,但首先我需要检查一个用户是否已经存在,我会在电子邮件中注明“是唯一的密钥”,并告知我是否使用了正确的方法 伪代码如下所示: 类NewUser if not exist mail put user to database return true else return false Servlet插入器: if not NewUser.put redirect log

首先对不起我的英语我用谷歌翻译

我对使用Google App Engine是新手,我会放置一个用户,但首先我需要检查一个用户是否已经存在,我会在电子邮件中注明“是唯一的密钥”,并告知我是否使用了正确的方法

伪代码如下所示:

类NewUser

if not exist mail
    put user to database
    return true
else
    return false
Servlet插入器:

if not NewUser.put
    redirect login.jsp
else
    redirect user.jsp
这是代码:

新用户类:

public static boolean insert(String name, String mail, String password) {
    DatastoreService datastore = DatastoreServiceFactory
            .getDatastoreService();

    Key k = KeyFactory.createKey(User.class.getSimpleName(), mail);

    if (!userExist(k)) {
        Entity user = new Entity(k);
        user.setProperty("name", name);
        user.setProperty("password", Encrypt.MD5(password));
        datastore.put(user);
        return true;
    } else {
        return false;
    }

}

private static boolean userExist(Key key) {
    DatastoreService datastore = DatastoreServiceFactory
            .getDatastoreService();

    Query q = new Query(key).setKeysOnly();

    List<Entity> ent = datastore.prepare(q).asList(
            FetchOptions.Builder.withDefaults());

    return (ent.isEmpty() || ent == null) ? false : true;
}
我可以让它在没有查询的情况下检查电子邮件吗

这段代码很有效,但我正在寻找如何改进的建议


提前感谢。

要检查实体是否存在,您只需使用:


使用这种方法,考虑到几乎总是生成异常,它不会影响性能吗?最好避免例外情况?这对你真的有效吗
Query q=new Query(key)
创建一个祖先查询,其中
key
是父实体。它不使用此键查询实体:查询有效。关键的用户实体是电子邮件。咨询关键祖先会更快吗?
public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    resp.setContentType("text/plain");

    resp.sendRedirect(NewUser.insert(req.getParameter("name"),
            req.getParameter("mail"), req.getParameter("password")) ? "jsps/user.jsp"
            : "jsps/login.jsp");

}
private static boolean userExist(Key key) {
    DatastoreService datastore = DatastoreServiceFactory
        .getDatastoreService();

    try {
        datastore.get(key);
    } catch (EntityNotFoundException e){
        return false;
    }
    return true;
}