多表操作时java代码的操作总结

多表关系

我们在学习数据库的时候,了解到数据库中多表之前是存在关系的,而这种关系也是固定的,分为:一对多,多对 一,一对一和多对多。那么学习完JDBC,JSP,Servlet后。如何在WEB项目中操作数据库呢?这就是我们今天研究的 重点:如何使用JAVA代码实现多表关系操作。

多表操作之一对多

数据表

比较经典的一对多的关系就是学生表与年级表,两张表中,学生是多方,年级是一方。因为:一个年级可以有多名学 生,但反过来一名学生只属于一个年级。先创建数据表

create table student ( stuid int primary key, stuname varchar(5), stuage int, gid int );
create table grade( gradeid int primary key , gname varchar(5) );
insert into grade values(1,'一年级'); 
insert into grade values(2,'二年级');
insert into grade values(3,'三年级');
insert into student values(1,'张三',18,1);
insert into student values(2,'李四',14,2);
insert into student values(3,'富贵',13,3);
insert into student values(4,'王芳',17,1);
insert into student values(5,'甜甜',15,2);

创建实体类

要求:类名=表名,列名=属性名(外键列也添加属性)
Student:

public class Student {
    
private int stuid; 
private String stuName; 
private int stuAge; 
private int gid;
//setter and getter 

Grade:

public class Grade {
    
private int gradeId; 
private String gname;
//setter and getter 

建立两表之间的属性关系

数据表是通过外键列来维系两表关系。实体类是通过属性来维系两表关系。在建立一对多关系时,我们分析到年级 是一方,学生是多方。一对多,是以一方为主,所以我们在一方添加多方的一个属性。那这个属性是对象还是集合 呢?这里记住一句话:一方存多方的集合,多方存一方的对象。所以需要在年级表中添加下列属性:
Grade新增代码:

private List<Student> studentList;
//setter and getter 

创建Dao层接口代码和实现类,操作数据库

Dao层

public interface GradeDao {
    
//查询某个年级信息(要求:展示年级名称和学生列表) 
public Grade getGradeById(int id); 
}

实现类:在实现类中需要连接数据库,并且查询结果来自于多张表。此时如何存储数据呢?给大家一个思路:1.在不 考虑两表的情况下,先存储各自表中的数据 2.结合上面步骤中添加属性的问题,考虑应该把哪个类添加到另外一个 类的属性中。代码如下:

public class GradeDaoImpl extends DruidUtil implements GradeDao {
   
@Override 
public Grade getGradeById(int id){
   
//这里创建年级对象的操作要放在循环外,因为只需要创建一个年级对象即可 
Grade grade = new Grade(); 
List<Student> students=new ArrayList<Student>(); 
Connection connection =null; 
PreparedStatement preparedStatement =null; 
ResultSet resultSet =null;
try {
   
connection = getConnection();
preparedStatement = connection.prepareStatement("select * from grade g,student s where s.gid=g.gradeid and g.gradeid=?");
preparedStatement.setInt(1,id); 
resultSet = preparedStatement.executeQuery(); 
//此时结果集中包含两张表的数据,我们先分别获取各自表中的数据
while(resultSet.next()){
    
//学生信息
Student student = new Student(); 
student.setStuid(resultSet.getInt("stuid")); 
student.setStuName(resultSet.getString("stuname")); 
student.setStuAge(resultSet.getInt("stuage")); 
student.setGid(resultSet.getInt("gid"));
//年级信息 
grade.setGname(resultSet.getString("gname")); 
grade.setGradeId(resultSet.getInt("gradeid")); 
//建立两者关系 students.add(student);
students.add(student);
//将学生集合封装到年级中 
grade.setStudentList(students);
} catch (SQLException throwables) {
    
throwables.printStackTrace();
} finally {
   
close(connection,preparedStatement,resultSet);
}
return grade; 
} 
}

说明:这里比较难理解的是关于对象的创建以及属性赋值

测试类

public class Test1 {
    
public static void main(String[] args) {
    
GradeDao gradeDao = new GradeDaoImpl(); 
Grade grade = gradeDao.getGradeById(1); 
System.out.println(grade.getGname()); 
List<Student> studentList = grade.getStudentList(); 
for (Student student : studentList) {
   <
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,旨在提供对目录服务的快速访问。在Java中,可以通过使用JNDI(Java Naming and Directory Interface)API来操作LDAP。 下面是一些Java操作LDAP的常见步骤和示例代码: 1.创建连接对象 ``` Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://localhost:389"); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=admin,dc=example,dc=com"); env.put(Context.SECURITY_CREDENTIALS, "password"); DirContext ctx = new InitialDirContext(env); ``` 2.查询数据 ``` String base = "ou=people,dc=example,dc=com"; String filter = "(objectclass=person)"; SearchControls sc = new SearchControls(); sc.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration<SearchResult> results = ctx.search(base, filter, sc); while (results.hasMore()) { SearchResult sr = (SearchResult) results.next(); // 处理查询结果 } ``` 3.添加数据 ``` Attributes attrs = new BasicAttributes(); attrs.put("cn", "John Smith"); attrs.put("sn", "Smith"); attrs.put("givenName", "John"); attrs.put("mail", "john.smith@example.com"); attrs.put("userPassword", "password"); ctx.createSubcontext("cn=John Smith,ou=people,dc=example,dc=com", attrs); ``` 4.修改数据 ``` ModificationItem[] mods = new ModificationItem[1]; mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("mail", "new-email@example.com")); ctx.modifyAttributes("cn=John Smith,ou=people,dc=example,dc=com", mods); ``` 5.删除数据 ``` ctx.destroySubcontext("cn=John Smith,ou=people,dc=example,dc=com"); ``` 这些是Java操作LDAP的一些基本步骤和示例代码,但实际应用中还需要考虑LDAP服务器的具体配置和授权等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值