安卓多用户管理之IUserManager.AIDL

目录


前言

IUserManager.AIDL是一个接口,内部定义了很多用户管理的API,它的真正实现类是UserManagerService,在了解UserManagerService之前,先总览一下IUserManager.AIDL定义了哪些API,对其进行一个大概分类及简介。
版本信息:Android11


一、API接口功能简介

1.1 创建用户

1.1.1 创建一个新的用户

UserInfo createUserWithThrow(in String name, in String userType, int flags);
作用:通过此方法创建一个新的用户。
参数:
name:新用户的名称。
userType:用户类型。
flags:标志位,用于指定创建用户时的一些特性。
返回值:返回一个 UserInfo 对象,包含了新创建用户的信息。

1.1.2 预创建一个新的用户,但不立即激活

UserInfo preCreateUserWithThrow(in String userType);
作用:预创建一个新的用户,但不立即激活。
参数:
userType:用户类型。
返回值:返回一个 UserInfo 对象,包含了新创建用户的信息。

1.2 创建用户配置文件

1.2.1 创建一个配置文件

UserInfo createProfileForUserWithThrow(in String name, in String userType, int flags, int userId, in String[] disallowedPackages);
作用:为指定的用户创建一个配置文件。
参数:
name:配置文件的名称。
userType:用户类型。
flags:标志位,用于指定创建配置文件时的一些特性。
userId:指定的用户 ID。
disallowedPackages:不允许在配置文件中安装的应用程序包名数组。
返回值:返回一个 UserInfo 对象,包含了新创建配置文件的信息。

1.2.2 创建一个受限配置文件

UserInfo createRestrictedProfileWithThrow(String name, int parentUserHandle);
作用:为指定的用户创建一个受限配置文件。
参数:
name:受限配置文件的名称。
parentUserHandle:父用户的用户句柄。
返回值:返回一个 UserInfo 对象,包含了新创建受限配置文件的信息。

1.2.3 即使被禁止也为用户创建配置文件

UserInfo createProfileForUserEvenWhenDisallowedWithThrow(String name, String userType, int flags, int userId, String[] disallowedPackages);
作用:即使被禁止也为用户创建配置文件。
参数:
name - 配置文件名称。
userType - 用户类型。
flags - 标志位。
userId - 用户 ID。
disallowedPackages - 被禁止的包名数组。
返回值:返回一个 UserInfo 对象,包含了新创建的配置文件用户的信息。

1.3 指定、设置用户信息

1.3.1 设置用户的名称

void setUserName(int userId, String name);
作用:设置指定用户的名称。
参数:
userId:指定用户的用户 ID。
name:用户的新名称。

1.3.2 设置用户的图标

void setUserIcon(int userId, in Bitmap icon);
作用:设置指定用户的图标。
参数:
userId:指定用户的用户 ID。
icon:用户的新图标。

1.3.3 设置指定用户的用户账户名称

void setUserAccount(int userId, String accountName);
作用:设置指定用户的用户账户名称。
参数:
userId:指定用户的用户 ID。
accountName:要设置的用户账户名称。
返回值:无。

1.3.4 设置指定用户的用户限制

void setUserRestriction(String key, boolean value, int userId);
作用:设置指定用户的用户限制。
参数:
key:限制键值。
value:限制的值。
userId:指定用户的用户 ID。
返回值:无。

1.3.5 设置指定应用程序的限制

void setApplicationRestrictions(String packageName, Bundle restrictions, int userId);
作用:设置指定应用程序的限制。
参数:
packageName:应用程序包名。
restrictions:限制的 Bundle 对象。
userId:指定用户的用户 ID。
返回值:无。

1.3.6 启用指定用户

void setUserEnabled(int userId);
作用:启用指定用户。
参数:
userId:指定用户的用户 ID。

1.3.7 将指定用户设置为管理员用户

void setUserAdmin(int userId);
作用:将指定用户设置为管理员用户。
参数:
userId:指定用户的用户 ID。

1.3.9 清除指定用户的凭证加密密钥

void evictCredentialEncryptionKey(int userId);
作用:清除指定用户的凭证加密密钥。
参数:
userId:指定用户的用户 ID。

1.3.10 移除指定用户

boolean removeUser(int userId);
作用:移除指定用户。
参数:
userId:指定用户的用户 ID。
返回值:如果成功移除用户,则返回 true;否则返回 false。

1.3.11 即使被禁止,也移除指定用户

boolean removeUserEvenWhenDisallowed(int userId);
作用:即使被禁止,也移除指定用户。
参数:
userId:指定用户的用户 ID。
返回值:如果成功移除用户,则返回 true;否则返回 false。

1.3.12 添加用户限制监听器

void addUserRestrictionsListener(IUserRestrictionsListener listener);
作用:添加用户限制监听器。
参数:
listener:用户限制监听器对象。
返回值:无。

1.3.13 设置默认访客用户的限制

void setDefaultGuestRestrictions(Bundle restrictions);
作用:设置默认访客用户的限制。
参数:
restrictions:默认访客用户的限制 Bundle 对象。
返回值:无。

1.3.14 标记访客用户以便删除

boolean markGuestForDeletion(int userId);
作用:标记访客用户以便删除。
参数:userId - 用户 ID。
返回值:如果成功标记访客用户以便删除,则返回 true;否则返回 false。

1.3.15 请求启用/禁用静默模式

boolean requestQuietModeEnabled(String callingPackage, boolean enableQuietMode, int userId, IntentSender target, int flags);
作用:请求启用/禁用静默模式。
参数:
callingPackage - 调用方包名。
enableQuietMode - 是否启用静默模式。
userId - 用户 ID。
target - 目标 IntentSender。
flags - 标志位。
返回值:返回一个布尔值,表示请求是否成功。

1.4 获取用户信息

1.4.1 获取用户的图标

ParcelFileDescriptor getUserIcon(int userId);
作用:获取指定用户的图标。
参数:
userId:指定用户的用户 ID。
返回值:返回一个 ParcelFileDescriptor 对象,包含了用户的图标信息。

1.4.2 获取主用户的信息

UserInfo getPrimaryUser();
作用:获取主用户的信息。
返回值:返回一个 UserInfo 对象,包含了主用户的信息。

1.4.3 获取用户列表

List < UserInfo> getUsers(boolean excludePartial, boolean excludeDying, boolean excludePreCreated);
作用:获取用户列表。
参数:
excludePartial:是否排除部分用户。
excludeDying:是否排除即将被移除的用户。
excludePreCreated:是否排除预创建的用户。
返回值:返回一个 UserInfo 对象列表,包含了符合条件的用户信息。

1.4.4 获取用户的配置文件列表

List getProfiles(int userId, boolean enabledOnly);
作用:获取指定用户的配置文件列表。
参数:
userId:指定用户的用户 ID。
enabledOnly:是否只包含已启用的配置文件。
返回值:返回一个 UserInfo 对象列表,包含了符合条件的配置文件信息。

1.4.5 获取用户的配置文件 ID 列表

int[] getProfileIds(int userId, boolean enabledOnly);
作用:获取指定用户的配置文件 ID 列表。
参数:
userId:指定用户的用户 ID。
enabledOnly:是否只包含已启用的配置文件。
返回值:返回一个整型数组,包含了符合条件的配置文件 ID。

1.4.6 获取用户的配置文件的父用户信息

UserInfo getProfileParent(int userId);
作用:获取指定用户的配置文件的父用户信息。
参数:
userId:指定用户的用户 ID。
返回值:返回一个 UserInfo 对象,包含了配置文件的父用户信息。

1.4.7 获取用户的创建时间

long getUserCreationTime(int userId);
作用:获取指定用户的创建时间。
参数:
userId:指定用户的用户 ID。
返回值:返回指定用户的创建时间,以毫秒为单位的时间戳。

1.4.8 获取指定用户的信息

UserInfo getUserInfo(int userId);
作用:获取指定用户的信息。
参数:
userId:指定用户的用户 ID。
返回值:返回一个 UserInfo 对象,包含了指定用户的信息。

1.4.9 获取指定用户的序列号

int getUserSerialNumber(int userId);
作用:获取指定用户的序列号。
参数:
userId:指定用户的用户 ID。
返回值:返回指定用户的序列号。

1.4.10 获取指定应用程序的限制

Bundle getApplicationRestrictions(String packageName);
作用:获取指定应用程序的限制。
参数:
packageName:应用程序包名。
返回值:返回一个 Bundle 对象,包含了指定应用程序的限制。

1.4.11 获取指定用户的指定应用程序的限制

Bundle getApplicationRestrictionsForUser(String packageName, int userId);
作用:获取指定用户的指定应用程序的限制。
参数:
packageName:应用程序包名。
userId:指定用户的用户 ID。
返回值:返回一个 Bundle 对象,包含了指定用户的指定应用程序的限制。

1.4.12 根据用户序列号获取用户 ID

int getUserHandle(int userSerialNumber);
作用:根据用户序列号获取用户 ID。
参数:
userSerialNumber:用户的序列号。
返回值:返回指定用户序列号对应的用户 ID。

1.4.13 获取指定用户的用户账户名称

String getUserAccount(int userId);
作用:获取指定用户的用户账户名称。
参数:
userId:指定用户的用户 ID。
返回值:返回指定用户的用户账户名称。

1.4.14 获取指定用户受限制的限制源

int getUserRestrictionSource(String restrictionKey, int userId);
作用:获取指定用户受限制的限制源。
参数:
restrictionKey:限制键值。
userId:指定用户的用户 ID。
返回值:返回指定用户受限制的限制源。

1.4.15 获取指定用户受限制的限制源列表

List<UserManager.EnforcingUser> getUserRestrictionSources(String restrictionKey, int userId);
作用:获取指定用户受限制的限制源列表。
参数:
restrictionKey:限制键值。
userId:指定用户的用户 ID。
返回值:返回一个 UserManager.EnforcingUser 对象列表,包含了指定用户受限制的限制源列表。

1.4.16 获取指定用户的限制

Bundle getUserRestrictions(int userId);
作用:获取指定用户的限制。
参数:
userId:指定用户的用户 ID。
返回值:返回一个 Bundle 对象,包含了指定用户的限制。

1.4.17 获取当前用户的用户名

String getUserName();
作用:获取当前用户的用户名。
返回值:返回当前用户的用户名。

1.4.18 获取默认访客用户的限制

Bundle getDefaultGuestRestrictions();
作用:获取默认访客用户的限制。
参数:无。
返回值:返回一个 Bundle 对象,包含了默认访客用户的限制。

1.4.19 获取用户启动的实时时间

long getUserStartRealtime();
作用:获取用户启动的实时时间。
返回值:返回用户启动的实时时间。

1.4.20 获取用户解锁的实时时间

long getUserUnlockRealtime();
作用:获取用户解锁的实时时间。
返回值:返回用户解锁的实时时间。

1.5 检查用户相关信息

1.5.1 检查是否可以向指定用户添加更多配置文件

boolean canAddMoreProfilesToUser(in String userType, int userId, boolean allowedToRemoveOne);
作用:检查是否可以向指定用户添加更多配置文件。
参数:
userType:用户类型。
userId:指定用户的用户 ID。
allowedToRemoveOne:是否允许移除一个配置文件以添加更多。
返回值:如果可以向指定用户添加更多配置文件,则返回 true;否则返回 false。

1.5.2 检查是否可以向指定用户添加更多受管理的配置文件

boolean canAddMoreManagedProfiles(int userId, boolean allowedToRemoveOne);
作用:检查是否可以向指定用户添加更多受管理的配置文件。
参数:
userId:指定用户的用户 ID。
allowedToRemoveOne:是否允许移除一个配置文件以添加更多。
返回值:如果可以向指定用户添加更多受管理的配置文件,则返回 true;否则返回 false。

1.5.3 检查两个用户是否属于同一个配置文件组

boolean isSameProfileGroup(int userId, int otherUserHandle);
作用:检查两个用户是否属于同一个配置文件组。
参数:
userId:第一个用户的用户 ID。
otherUserHandle:第二个用户的用户 ID。
返回值:如果两个用户属于同一个配置文件组,则返回 true;否则返回 false。

1.5.4 检查指定用户是否具有基本用户限制

boolean hasBaseUserRestriction(String restrictionKey, int userId);
作用:检查指定用户是否具有基本用户限制。
参数:
restrictionKey:限制键值。
userId:指定用户的用户 ID。
返回值:如果指定用户具有指定的基本用户限制,则返回 true;否则返回 false。

1.5.5 检查指定用户是否属于指定的用户类型

boolean isUserOfType(int userId, in String userType);
作用:检查指定用户是否属于指定的用户类型。
参数:
userId:指定用户的用户 ID。
userType:用户类型。
返回值:如果指定用户属于指定的用户类型,则返回 true;否则返回 false。

1.5.6 检查指定用户是否具有用户限制

boolean hasUserRestriction(String restrictionKey, int userId);
作用:检查指定用户是否具有用户限制。
参数:
restrictionKey:限制键值。
userId:指定用户的用户 ID。
返回值:如果指定用户具有指定的用户限制,则返回 true;否则返回 false。

1.5.7 检查任何用户是否具有指定的用户限制

boolean hasUserRestrictionOnAnyUser(String restrictionKey);
作用:检查任何用户是否具有指定的用户限制。
参数:
restrictionKey:限制键值。
返回值:如果任何用户具有指定的用户限制,则返回 true;否则返回 false。

1.5.8 检查当前用户是否受到限制

boolean isRestricted();
作用:检查当前用户是否受到限制。
参数:无。
返回值:如果当前用户受到限制,则返回 true;否则返回 false。

1.5.9 检查指定用户对于指定设置是否受限制

boolean isSettingRestrictedForUser(String setting, int userId, String value, int callingUid);
作用:检查指定用户对于指定设置是否受限制。
参数:
setting:设置名称。
userId:指定用户的用户 ID。
value:设置的值。
callingUid:调用者的 UID。
返回值:如果指定用户对于指定设置受到限制,则返回 true;否则返回 false。

1.5.10 查指定用户是否可以拥有受限制的配置文件

boolean canHaveRestrictedProfile(int userId);
作用:检查指定用户是否可以拥有受限制的配置文件。
参数:
userId:指定用户的用户 ID。
返回值:如果指定用户可以拥有受限制的配置文件,则返回 true;否则返回 false。

1.5.11 检查指定用户是否为演示用户

boolean isDemoUser(int userId);
作用:检查指定用户是否为演示用户。
参数:userId - 用户 ID。
返回值:如果指定用户是演示用户,则返回 true;否则返回 false。

1.5.12 检查指定用户是否为托管配置文件用户

boolean isManagedProfile(int userId);
作用:检查指定用户是否为托管配置文件用户。
参数:userId - 用户 ID。
返回值:如果指定用户是托管配置文件用户,则返回 true;否则返回 false。

1.5.13 检查指定用户是否为预创建用户

boolean isPreCreated(int userId);
作用:检查指定用户是否为预创建用户。
参数:userId - 用户 ID。
返回值:如果指定用户是预创建用户,则返回 true;否则返回 false。

1.5.14 检查指定用户是否启用了安静模式

boolean isQuietModeEnabled(int userId);
作用:检查指定用户是否启用了安静模式。
参数:userId - 用户 ID。
返回值:如果指定用户启用了安静模式,则返回 true;否则返回 false。

1.5.15 检查指定用户是否正在解锁或已解锁

boolean isUserUnlockingOrUnlocked(int userId);
作用:检查指定用户是否正在解锁或已解锁。
参数:userId - 用户 ID。
返回值:如果指定用户正在解锁或已解锁,则返回 true;否则返回 false。

1.5.16 检查指定用户是否为配置文件用户

boolean isProfile(int userId);
作用:检查指定用户是否为配置文件用户。
参数:userId - 用户 ID。
返回值:如果指定用户是配置文件用户,则返回 true;否则返回 false。

1.5.17 检查指定用户是否已解锁

boolean isUserUnlocked(int userId);
作用:检查指定用户是否已解锁。
参数:userId - 用户 ID。
返回值:如果指定用户已解锁,则返回 true;否则返回 false。

1.5.17 查找当前的访客用户信息

UserInfo findCurrentGuestUser();
作用:查找当前的访客用户信息。
返回值:返回一个 UserInfo 对象,包含当前访客用户的信息。

1.5.18 检查指定用户是否正在运行

boolean isUserRunning(int userId);
作用:检查指定用户是否正在运行。
参数:userId - 用户 ID。
返回值:如果指定用户正在运行,则返回 true;否则返回 false。

1.5.19 检查指定用户是否已设置用户名

boolean isUserNameSet(int userId);
作用:检查指定用户是否已设置用户名。
参数:userId - 用户 ID。
返回值:如果指定用户已设置用户名,则返回 true;否则返回 false。

1.5.20 检查是否存在受限制的配置文件

boolean hasRestrictedProfiles();
作用:检查是否存在受限制的配置文件。
返回值:如果存在受限制的配置文件,则返回 true;否则返回 false。

1.6 种子账户相关

1.6.1 设置种子账户数据

void setSeedAccountData(int userId, String accountName, String accountType, PersistableBundle accountOptions, boolean persist);
作用:设置种子账户数据。
参数:
userId - 用户 ID。
accountName - 账户名称。
accountType - 账户类型。
accountOptions - 账户选项的 PersistableBundle 对象。
persist - 是否持久化数据。
返回值:无。

1.6.2 获取种子账户的账户名称

String getSeedAccountName();
作用:获取种子账户的账户名称。
返回值:返回种子账户的账户名称。

1.6.3 获取种子账户的账户类型

String getSeedAccountType();
作用:获取种子账户的账户类型。
返回值:返回种子账户的账户类型。

1.6.4 获取种子账户的账户选项

PersistableBundle getSeedAccountOptions();
作用:获取种子账户的账户选项。
返回值:返回一个 PersistableBundle 对象,包含了种子账户的账户选项。

1.6.5 清除种子账户数据

void clearSeedAccountData();
作用:清除种子账户数据。
返回值:无。

1.6.6 检查是否有用户拥有指定的种子账户

boolean someUserHasSeedAccount(String accountName, String accountType);
作用:检查是否有用户拥有指定的种子账户。
参数:
accountName - 账户名称。
accountType - 账户类型。
返回值:如果有用户拥有指定的种子账户,则返回 true;否则返回 false。

1.7 用户徽章资源相关

1.7.1 获取用户图标徽章资源 ID

int getUserIconBadgeResId(int userId);
作用:获取用户图标徽章资源 ID。
参数:userId - 用户 ID。
返回值:返回用户图标徽章资源的 ID。

1.7.2 获取用户徽章资源 ID

int getUserBadgeResId(int userId);
作用:获取用户徽章资源 ID。
参数:userId - 用户 ID。
返回值:返回用户徽章资源的 ID。

1.7.3 获取用户无背景的徽章资源 ID

int getUserBadgeNoBackgroundResId(int userId);
作用:获取用户无背景的徽章资源 ID。
参数:userId - 用户 ID。
返回值:返回用户无背景的徽章资源的 ID。

1.7.4 获取用户徽章标签资源 ID

int getUserBadgeLabelResId(int userId);
作用:获取用户徽章标签资源 ID。
参数:userId - 用户 ID。
返回值:返回用户徽章标签资源的 ID。

1.7.5 获取用户徽章颜色资源 ID

int getUserBadgeColorResId(int userId);
作用:获取用户徽章颜色资源 ID。
参数:userId - 用户 ID。
返回值:返回用户徽章颜色资源的 ID。

1.7.6 获取用户徽章深色颜色资源 ID

int getUserBadgeDarkColorResId(int userId);
作用:获取用户徽章深色颜色资源 ID。
参数:userId - 用户 ID。
返回值:返回用户徽章深色颜色资源的 ID。

1.7.7 检查指定用户是否有徽章

boolean hasBadge(int userId);
作用:检查指定用户是否有徽章。
参数:userId - 用户 ID。
返回值:如果指定用户有徽章,则返回 true;否则返回 false。

二、配置文件、种子账户、用户徽章简介

2.1 配置文件

在 Android 多用户环境中,每个用户都有自己的用户配置文件信息,这些信息包括用户的个人设置、应用程序数据、权限等。用户配置文件信息通常存储在设备的内部存储器中,每个用户的配置文件信息都是相互隔离的,以确保用户之间的数据不会相互干扰。
用户配置文件信息通常包括以下内容:
个人设置:每个用户可以自定义设备的个人设置,例如壁纸、铃声、语言偏好等。这些设置信息存储在用户的配置文件中,并在用户登录时加载。
应用程序数据:每个用户安装的应用程序的数据和设置信息都存储在其个人的配置文件中。这包括应用程序的用户偏好、登陆信息、游戏进度等。
权限:Android 系统会根据用户的配置文件信息来管理应用程序的权限。不同用户的权限设置是相互独立的,这样可以确保用户之间的数据安全和隐私。
存储空间:每个用户的配置文件信息占用设备的存储空间,Android 系统会对每个用户的存储空间进行分配和管理,以确保用户之间的数据不会相互干扰。
安全设置:每个用户的安全设置信息,例如锁屏密码、指纹识别等,都存储在其个人的配置文件中。
Android 系统会根据用户登录时的身份加载相应的配置文件信息,以确保用户能够获得自己的个人设置和数据。这种多用户的配置文件信息的隔离设计,有助于保护用户的隐私和数据安全。

2.2 种子账户

在 Android 系统中,种子账户是指系统预置的用户账户,通常用于设备的初始化设置或者系统自身的运行。这些种子账户通常不允许用户直接登录或进行操作,而是由系统进行管理和控制。种子账户通常包括以下几种类型:
系统账户:这是 Android 系统内置的账户,用于管理设备的核心功能和服务,例如系统更新、安全策略、应用商店等。
默认用户账户:在设备首次启动时创建的用户账户,通常作为设备的主要用户账户。默认用户账户具有较高的权限,可以对设备进行全面的管理和操作。
Guest 账户:这是一个临时的访客账户,用于临时借给其他人使用设备而不会影响到主要用户账户的数据和设置。
Restricted Profile 账户:这是一个受限制的配置文件,用于限制某些功能和内容的访问权限,通常用于设备共享或家庭使用,以保护隐私和安全。

2.3 用户徽章

在 Android 多用户环境中,每个用户都可以有自己的用户徽章。用户徽章是一个图标,用于表示用户的身份或状态。在多用户环境下,用户徽章可以帮助用户快速识别当前处于哪个用户账户下,以及该用户账户的状态。用户徽章通常显示在设备的锁屏界面、通知栏、快速设置面板等位置

三、总结

IUserManager.AIDL 是 Android 系统中的一个特定接口,用于管理用户和用户相关的操作。它包含了一系列方法,可以用于创建、删除、查询用户信息,以及管理用户的权限和配置等操作。通过 IUserManager.AIDL 接口,应用程序可以与系统 UserManager 服务进行通信,实现对用户账户的管理和控制。

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Javashop开发规范V2.2 版本 说明 提交人 V1.0 初稿 定义了包名、异常、事务、和路径的规范 王峰 V2.0 1. 重新整理了命名规范 2. 增加常用命词对照表 王峰 V2.1 1.增加数据库操作的说明 2.增加常用方法介绍 王峰 V2.2 增加关于数据导入导出的说明 王峰 V2.3 增加校验使用说明(5.3章节) 王峰 1 命名规范 1.1 包命 1. 小写字母 2. 以com.enation.javashop开头 3. 组件以com.enation.compoent开头 1.2 类名 一、 action 以Action结尾,如:UserAction 二、 业务类 1.接口: 以I开头,以Manager结尾,如:IUserManager 2.实现类 以Manager结尾,如:UserManager 三、 组件类 以Component结尾,如:ShopEmailComponent 四、 挂件类 以Widget结尾,如:MemberAddressWidget 五、 插件类 以Plugin结尾,如:SendRegMailPlugin 1.3 变量/属性命名规则 1. 全部小写 2. 可用下划线连接 如:username、 userid 1.4 方法命名 1.4.1 Action类 add 到添加页 edit 到修改页 saveAdd 保存添加 saveEdit 保存修改 delete 删除 list 列表 1.4.2 业务类 add 添加 edit 修改 delete 删除 list 列表 get 读取详细 2 数据库开发规范 2.1 数据操作支持类 一、 业务类数据库调用 1.继承于BaseSupport 2.在spring文件中声明parent为baseSupport <bean id="xxxManagerImpl" class="xxx.xxx.xxx.XxxxManager" parent="baseSupport"/> 3.通过this.baseDaoSupport操作数据库 实际使用的是:com.enation.eop.sdk.database.BaseJdbcDaoSupport 此种操作示例: com.enation.javashop.core.service.impl.BrandManager 注意事项:见【BaseDaoSupport的意义和存在的问题】 二、 直接声明baseDaoSupport操作数据库 在一些挂件类中或某些特殊情况,可以直接需要直接声明baseDaoSupport 此种操作示例: com.enation.javashop.core.service.impl.batchimport.GoodsSpecImporter 注意事项:见【BaseDaoSupport的意义和存在的问题】 2.2 BaseDaoSupport的意义存在的问题 BaseDaoSupport对JdbcDaoSupport进行包装,通过 baseDBRouter 获取表名, 为什么要通过 baseDBRouter 来获取表名呢?Eop机制是支持SAAS(多租户)模式运行的,在SAAS会为每个用户提供如:es_goods_<userid>_<siteid>这样的表。 为了保证在单机版和SAAS模式中都运行正常,BaseDaoSupport将过滤sql中的相应表名。 但目前还只能支持简单的单表select、insert、update,对于多表的联合查询或更新不能支持。 在这种情况下,就需要通过 daoSupport(com.enation.framework.database.impl.JdbcDaoSupport)来操作,daoSupport不对sql进行任何更改,这时为了保证兼容saas模式兼容性,就要使用BaseSupport.getTableName(String tablename)方法 或baseDBRouter.getTableName(String tablename);来保证表名的正确。 (够混乱?真心希望出现一位大侠拯救这个状况,使basedaosupport可以处理所有情况的sql) 2.3 实体Bean和数据库表对照 Javahop数据库操作支持,将对象直接保存或修改,如: this.baseDaoSupport.insert("brand", brand); this.baseDaoSupport.update("brand", brand, "brand_id=" + brand.getBrand_id()); 规则为:实体中的属性名和数据库表的字段名相同,如: 对应的数据库字段: 2.4 注解的使用 2.4.1 @NotDbField 在某个实体Bean中,我们可能会有一些属性不对应数据库字段,这时我们需要在相应的 Geter方法中加上@NotDbField注解,以便使数据库机制知道这个字段不转为sql语句,如: private File file; @NotDbField public File getFile() { return file; } 2.4.2 @PrimaryKeyField 在实合格bean和数据库对照过程中,数据库机制需要识别主键,所以需要我们在主键的对应属性的Geter方法中加上@PrimaryKeyFiled注解,如: private Integer brand_id @PrimaryKeyField public Integer getBrand_id() { return brand_id; } 3 数据导入 3.1 导入接口 DBSolutionFactory.dbImport("file:com/enation/javashop/component/coupon/add.xml","es_"); 3.2 数据Xml文件说明 3.2.1 创建表 <action> <command>create</command> <table>tablename</table> <field> <name>id</name> <type>int</type> <size>8</size> <option>11</option> </field> <field> <name>name</name> <type>varchar</type> <size>255</size> <option>00</option> </field> </action> 3.2.2 删除表 <action> <command>drop</command> <table>tablename</table> </action> 3.2.3 添加、删除列 <action> <command>alter</command> <table>goods</table> <field type="add"> <name>isgroupbuy</name> <type>int</type> <size>1</size> <default>0</default> </field> <field type="drop"> <name>isgroup</name> </field> </action> 3.2.4 创建索引 <action> <command>index</command> <table>goods</table> <field > <name>goodsid</name> </field> </action> 3.2.5 删除索引 <action> <command>unindex</command> <table>goods</table> <field > <name>goodsid</name> </field> </action> 3.2.6 插入数据 <action> <command>insert</command> <table>es_adcolumn</table> <fields>acid,cname,width,height,atype,disabled</fields> <values>5,'列表页上部横幅','972px','67px',0,'false'</values> </action> 3.2.7 删除数据 暂未支持 3.2.8 更新数据 暂未支持 3.3 数据类型对照表 xml Mysql Oracle SqlServer int int NUMBER smallint int(1) smallint(1) NUMBER(2) int memo text CLOB text datetime datetime TIMESTAMP datetime long bigint NUMBER bigint decimal decimal NUMBER(20,2) decimal 4 数据导出 String[] tables = new String[1]; tables[0] = "es_auth_action"; DBSolutionFactory.dbExport(tables, false, "") 5 常用方法介绍 5.1 上下文获取 参见: http://www.javamall.com.cn/developer_help/index.php/常用方法 5.2 地区联动下拉框 1.如果是在jsp 中: <html:regionselect></html:regionselect> 2.如果是在Freemarker的html中: <#assign RegionSelect= "com.enation.app.base.component.widget.regions.RegionSelectDirective"?new()> <@RegionSelect /> 以上两种方式均支持以下参数: province_id:省id city_id:市id region_id:区id 如果指定上述参数,则默认选中 5.3 客户端校验 EOP自动为应用提供表单校验功能,通过指定form样式名和指定表单项特定属性的方式来完成。 5.3.1 示例 代码示例 [removed] function checkUserName(val){ if(val=='kingapex' ) return true; else return "用户名已存在"; } $.Validator.options={lang:{isrequired:'此项不能为空!'}}; [removed] <form class="validate"> 必须:<input type="text" name="test1" isrequired="true"> <br/> 整型:<input type="text" name="test2" isrequired="true" dataType="int"> <br/> 浮点型:<input type="text" name="test3" dataType="float"> <br/> 邮件:<input type="text" name="test4" isrequired="true" dataType="email"> <br/> 日期:<input type="text" name="test5" isrequired="true" dataType="date"> <br/> 电话号码:<input type="text" name="test6" isrequired="true" dataType="tel_num"> <br/> 手机:<input type="text" name="test7" isrequired="true" dataType="mobile"> <br/> 邮政编码:<input type="text" name="test8" isrequired="true" dataType="post_code"> <br/> 网址:<input type="text" name="test9" isrequired="true" dataType="url"> <br/> 自定义函数:<input type="text" name="test10" isrequired="true" fun="checkUserName"> <br/> <input type="submit" value="确定" /> </form> 5.3.2 参数说明: 5.3.2.1 isrequired 为true则为必填项,不指定或指为false则为非必填项。 5.3.2.2 dateType 指定校验特殊类型,支持的类型见下表: 类型 说明 int 整数 float 浮点数 email 邮件格式 date 日期格式 tel_num 电话格式 mobile 手机格式 post_code 邮编 url 网址 5.3.2.3 fun 自定义校验函数,返回真则通过校验,返回假或字串则校验失败,返回的字串会出现在失败提示框中。 5.3.2.4 动态绑定校验函数 通过 setValidator实现 $("#region_id").setValidator(function(){ var value = $("#region_id").val(); if( value=="" || value=="0" ) return "地区信息不完整"; else return true; }); 5.3.2.5 提示器 提示器用于显示校验的结果,如果不指定默认会在校验的控件后面创建一个span做为提示器。 可以通过两种方式指定提示器: 一、在控件中声明tiper属性: <input type="text" name="username" tiper="#name_tiper" /> 注:tiper指定的是jquery的一个选择器表达式。 二、动态指定: $("#region_id").setTiper($("#name_tiper")); 注:此时指定的是jquery对象,而不是一个表达式 5.3.2.6 手动调用: $("#siteForm").checkall(); 6 常用字典对照表 6.1 常用值 名称 值 说明 返回结果 0:失败 1:成功 适用于: 1. 客户端json返回值 2. 服务器端方法返回值 3. 数据库是否的标识值 性别 0:女 1:男 6.2 常用名称 名称 英文 商品 goods 货品 product 规格 spec 订单 order 会员 member 积分 point 购物车 cart 结算 checkout 订单 order 品牌 brand 分类 cat 优惠劵 coupon 支付 payment 团购 groupbuy 虚拟 virtual 发票 receipt 属性 prop 参数 param 标签 tag 地区 region 7 异常 1. 提供统一的异常处理机制 2. 底层级别的类不处理异常,只管向上抛出异常,且统一抛出RuntimeExcepton 8 事务处理 1. 数据库统一使用Srping AOP事务 2. 采用注解方式: 在接口处: @Transactional(propagation = Propagation.isrequired) 9 路径的规范 返回的路径变量最后不带 ‘/’ 如:String path =”user/1”; 使用者: path = path+”/”+myVar; 10 样式/HTML规范 10.1 前台分页 <div class="page"><span class="info">共41条记录</span> <span class="info">1/3</span> <ul><li><a class="selected">1</a></li> <li><a href="search-cat-4-page-2.html" class="unselected">2</a></li> <li><a href="search-cat-4-page-3.html" class="unselected">3</a></li> <li><a href="search-cat-4-page-2.html" class="unselected">>></a></li> <li><a href="search-cat-4-page-3.html" class="unselected">>|</a></li> </ul></div>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值