日期:2014-05-16 浏览次数:20575 次
| 连接LDAP数据库CRUD,包括分页查询的持久层代码 |
package com.scnu.ytxt.persistence.sqlmapdao.user;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import org.springframework.ldap.AttributesMapper;
import org.springframework.ldap.CollectingNameClassPairCallbackHandler;
import org.springframework.ldap.LdapTemplate;
import org.springframework.ldap.support.DistinguishedName;
import org.springframework.ldap.support.control.PagedResultsRequestControl;
import org.springframework.ldap.support.filter.AndFilter;
import org.springframework.ldap.support.filter.EqualsFilter;
import com.scnu.ytxt.attribute.AttributeBuilder;
import com.scnu.ytxt.attribute.AttributeFather;
import com.scnu.ytxt.attribute.AttributeMapper;
import com.scnu.ytxt.persistence.iface.user.UserManageDao;
/**
* 用户管理DaoImpl
*
* @author Ray
*/
public class UserManageDaoImpl implements UserManageDao {
private LdapTemplate ldapTemplate;
/** objectClass类型 */
private static final String OBJECT_NAME = "user";
/** 节点名 */
private static final String BASE = "ou=user";
/** 所需要的类名称 */
private static final String ENTITY_CLASSNAME
= "com.scnu.ytxt.persistence.sqlmapdao.user.UserForLDAP";
/** 主键 */
private static final String PRIMARY_KEY = "userUid";
/** 最大页数 */
private static final int MAX_PAGE = 10000;
AttributeFather father = null;
AttributeBuilder builder = null;
AttributeMapper mapper = null;
public void setLdapTemplate(LdapTemplate ldapTemplate)
{
this.ldapTemplate = ldapTemplate;
}
/** 构造函数 */
public UserManageDaoImpl()
{
father = new AttributeFather(ENTITY_CLASSNAME);
builder = new AttributeBuilder();
mapper = new AttributeMapper();
}
/** 创建条目对应的DN */
public DistinguishedName getDN(Object parameterObject, String primaryKey,
String ouBase)
{
UserForLDAP userForLDAP = (UserForLDAP) parameterObject;
// 设置在ou=user下查找对象
DistinguishedName newContactDN = new DistinguishedName(ouBase);
// 设置需要删除的条目的DN
newContactDN.add(primaryKey, userForLDAP.getUserUid());
return newContactDN;
}
/** 添加 */
public int addUser(final Object parameterObject)
{
try
{
// 获取用户传来的属性集
Attributes attri = builder.getUserAttrs(parameterObject,
OBJECT_NAME);
DistinguishedName newContactDN = getDN(parameterObject,
PRIMARY_KEY, BASE);
// 把新条目绑定到LDAP
ldapTemplate.bind(newContactDN, null, attri);
// 参数说明("userUid=liling,ou=user" , null(绑定对象) , 要添加的字段集)
return 1;
}
catch (Exception e)
{
System.out.println("异常:" + e);
return 0;
}
}
/** 删除 */
public int delUser(final Object parameterObject)
{
DistinguishedName newContactDN
= getDN(parameterObject, PRIMARY_KEY,BASE);
try
{
// 进行删除,其中true表示同时删除其孩子结点
ldapTemplate.unbind(newContactDN, true);
return 1;
}
catch (Exception e)
{
return 0;
}
}
/** 修改 */
public int updateUserInfo(final Object parameterObject, String updateType)
{
// 获取用户传来的属性集
Attributes attri = builder.getUserAttrs(parameterObject,
OBJECT_NAME);
DistinguishedName newContactDN = getDN(parameterObject, PRIMARY_KEY,
BASE);
try
{
ldapTemplate.rebind(newContactDN, null, attri);
// 参数说明("userUid=liling,ou=user" , null , 要添加的字段值)
return 1;
}
catch (Exception e)
{
return 0;
}
}
/** 查询 */
public List getUserInfo(final Object parameterObject, int curPage,
int pageSize)
{
// 用于存储条目列表
List list = new ArrayList();
long starTime = System.currentTimeMillis();
// 设置filter
String filter = "objectclass=" + OBJECT_NAME;
// 声明搜索控件
SearchControls searchControls = new SearchControls();
// 指定检索范围
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
/*
* 0:OBJECT_SCOPE,搜索指定的命名对象。
* 1:ONELEVEL_SCOPE,只搜索指定命名对象的一个级别,这是缺省值。
* 2:SUBTREE_SCOPE,搜索以指定命名对象为根结点的整棵树
*/