4.8 映射类——数据库表和java类的一一对应
如何根据主键查询一整条记录呢?例如根据用户名abcd,把abcd的密码、昵称、创建日期,角色等信息都查出来。
这就需要一个类,来保存这些信息,首先创建一个类和Use表一一对应:类的属性和user表的字段一一对应:
public class User{ private String username; private String password; private String nickname; private String role; private String createDate; public String getUsername(){ return username; } public void setUsername(String username){ this.username=username; } public String getPassword(){ return password; } public void setPassword(String password){ this.password=password; } public String getNickname(){ return nickname; } public void setNickname(String nickname){ this.nickname=nickname; } public String getRole(){ return role; } public void setRole(String role){ this.role=role; } public String getCreateDate(){ return createDate; } public void setCreateDate(String createDate){ this.createDate=createDate; }}可以看出来,这个User类和User表是一一对应的:
接下来,在UserData添加下面的函数:
/***根据账号取得用户的所有数据,并保存到一个User对象 * @param username * @return */public static User findUserByUsername(String username){ //最终返回的user对象 User user=new User(); user.setUsername(username); // 要执行的sql语句,通过字符串拼接出来 String SQLTEXT="select * from user where username = '"+username+"'"; try{ // 使用上面的DBConifg类的getCon方法,建立一个连接 Connection con=DBConfig.getCon(); // 准备执行sql的实体 Statement stmt=con.createStatement(); // 执行sql,并把查询结果赋给 ResultSet rst=stmt.executeQuery(SQLTEXT); while(rst.next()){ // 查询结果,并把结果逐个设置到user对象 user.setPassword(rst.getString("password")); user.setNickname(rst.getString("nickname")); user.setCreateDate(rst.getString("create_date")); user.setRole(rst.getString("role")); } // 后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露 rst.close(); stmt.close(); con.close(); } catch(SQLException e){ e.printStackTrace(); } return user;}1.第6行代码,User user=new User();新建一个User对象,最终返回的数据都将保存在这里。
2.观察第20行到23行代码,这是把查询到的结果取出来,然后设置到user的四个属性:密码,昵称,创建日期,角色
最终使用的时候,就需要一个User对象,接受查询的结果:
public static void main(String[]args){ User user=UserData.findUserByUsername("abcd"); System.out.println(user.getUsername()+"\t"+user.getPassword()+"\t"+user.getNickname()+"\t"+user.getCreateDate());}