REST Web服务使用MySQL DB

时间:2011-10-13 18:29:48

标签: mysql web-services rest

我正在使用JAX-RS和Tomcat构建一个REST WebService来使用MySQL数据库。

我正在关注这个模型:

@Path("/login")  
public class Login {

String username;
String password;
// This method is called if POST is requested
@POST
@Produces(MediaType.APPLICATION_XML)
public String loginResponseXML(@FormParam("username") String user, @FormParam("password") String pass) {

    //Connection to MySQL Database
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/sakila", "root","larcom");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("Select first_name, last_name From actor where first_name='" +
                                        user + "' and last_name='" + pass + "'");

        while (rs.next()){
            System.out.println(rs.getString("first_name") + " " + rs.getString("last_name"));
            username = rs.getString("first_name");
            password = rs.getString("last_name");
        }
    }           
    catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }

    if (user.equals(username) && pass.equals(password)) {
        return ("<?xml version=\"1.0\"?>" + "<auth>200" + "</auth>"); //Success
        //return "Success!";
    } else {
        return ("<?xml version=\"1.0\"?>" + "<auth>404" + "</auth>"); //Damn
        //return "Damn!";
    }

    }
}

我用以下方法调用此方法:

HttpPost httppost = new HttpPost("http://192.168.15.245:8080/org.jersey.andre/rest/login");

现在,我的问题是: 如果我想在DB中查询另一个表,我必须创建一个像Login这样的新类并重新建立JDBC连接? 为查询数据库的每个类创建一个新类和一个新的JDBC连接?性能问题?

希望你能理解。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

这里有一些提示:请将基于数据库的代码隔离到“数据层”,可以这么说......只在资源类中执行调度/业务逻辑。

现在如果您要查询其他表,您将拥有不同的查询!您可以使用相同的连接(错误)或创建一个新连接并触发不同的查询。

现在,每个资源是否命中不同的表或具有不同查询的同一个表取决于您对该资源的“表示”的选择。 RDB架构有多个表是有原因的,并且很常见,您将有一个涉及多个表或相互独立的表的不同查询。

性能问题:对于“新数据”,你总是可以说到数据库。如果你想优化开发你自己的缓存(非常难)或使用memcached或ehcache等方法来提高性能 - 在你决定这样做之前一定要确认它是否值得。

你每秒会有大约1000次点击率吗?您可能需要一些性能提升/处理。每天......也许不是。每2-3天...... YAGNI(你不需要它,所以现在不要担心)

因此,对于您在应用程序中设计的每个“资源”(登录不是资源:请参阅相关帖子:Why is form based authentication NOT considered RESTful?)选择表示。它可能涉及不同的查询等,您可以返回json / xml / xhtml(无论您选择什么)。每个'DB相关调用'都应该被隔离到它自己的'数据层'中 - 我建议使用Spring JDBC来让你的生活更轻松。它将承担JDBC管道的负担,因此您可以专注于创建DAO(数据访问对象 - 数据访问类的模式。所有DAO逻辑上属于数据层)

希望这有帮助