dapTemplate ldapTemplate;
...
public void create(Person p) {//创建方法
Name dn = buildDn(p); //调用之前封装dn的方法获得dn
ldapTemplate.bind(dn, null, buildAttributes(p));
}
/*设置需要创建的属性,objectclass的对象类属性应该是必有的*/
private Attributes buildAttributes(Person p) {
Attributes attrs = new BasicAttributes(); //创建一个属性集
BasicAttribute ocattr = new BasicAttribute("objectclass");
ocattr.add("top"); //这个属性数必须有,就算在服务器手写创建代码时也需要添加它
ocattr.add("person"); //创建的对象类
attrs.put(ocattr); //将属性集添加到属性中
attrs.put("cn", "Some Person"); //输入 cn属性 对应后台的姓的值
attrs.put("sn", "Person"); // 对应后台的常用名
return attrs; //返回你获得的属性
}
}
虽然创建的方法bind中需要是三个参数,但是实际使用的两个参数,第一个为地址,第二个null,第三个是要插入的属性
接下来我们看下 删除,这个是简单的方法,可以理解为DAO中根据id进行删除一个实体就OK了
package com.example.dao;
public class PersonDaoImpl implements PersonDao {
private LdapTemplate ldapTemplate;
...
public void delete(Person p) {
Name dn = buildDn(p); //根据你的用户信息获得你的dn
ldapTemplate.unbind(dn); //根据路径删除这条信息
}
}
接下来就更新了,有两成方式,一种是暴力型,一种是简单更换型。
下面的是暴力型
package com.example.dao;
public class PersonDaoImpl implements PersonDao {
private LdapTemplate ldapTemplate;
...
public void update(Person p) {
Name dn = buildDn(p);
ldapTemplate.rebind(dn, null, buildAttributes(p));
}//只有rebind方法名不同,看名字就知道是重新绑定用户信息,意思是先kill掉用户然后重新添加一个,(太掺不忍睹了,没考虑过性能,如果方便的话貌似也可以。。。。。。。)
}
接下来就是真正的更新。
package com.example.dao;
public class PersonDaoImpl implements PersonDao {
private LdapTemplate ldapTemplate;
...
public void updateDescription(Person p) {
Name dn = buildDn(p);
/*同样也封装了个修改的方法,但是他把这个方法放在了里面*/
/*设置修改的属性,但这里只能修改一个属性就新建一个不能用Attributes(至少我没用过,因为后面有更好的方法)*/
Attribute attr = new BasicAttribute("description", p.getDescription())
/*修改的类 将需要修改的属性放在里面*/
ModificationItem item = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);
/*进行修改 创建一个修改条件,他是ModificationItem[]数组格式 所以要同时更新两个属性 就要 创建两个ModificationItem 然后放进数组 */
ldapTemplate.modifyAttributes(dn, new ModificationItem[] {item});
}
}
OK这就是简单增删改查。