<sqlMap namespace="user"><--命名空间,好像2.0默认是开通的--> <cacheModel type="LRU" id="oneDayCategory"><!--缓存配置,详细的资料请察看官方提供的用户手册,好像有中文版本的了 --> <flushInterval hours="24" /> </cacheModel>
<typeAlias type="com.infodeliver.pigeon.bean.User" alias="userbean" /><!--定义本地变量,为了方便使用 --> <typeAlias type="com.infodeliver.pigeon.util.Condition" alias="condition" /> <typeAlias type="com.infodeliver.pigeon.bean.Role" alias="rolebean"/> <resultMap id="get_group_result" class="com.infodeliver.pigeon.bean.Group"><!-- 这就是不定义本地变量的结果--> <result property="groupid" column="group_id" /> <result property="groupname" column="group_name" /> </resultMap> <resultMap id="get_role_result" class="rolebean"> <result property="role_id" column="role_id"/> <result property="role_name" column="role_name"/> </resultMap> <resultMap id="get_user_result" class="userbean"> <result property="user_id" column="user_id" /> <result property="username" column="username" /> <!--为user的group信息(属性groupid,groupname)配置 --> <result property="group.groupid" column="group_id" /> <result property="group.groupname" column="group_name" /> <!—这里的property="group.groupid"的含义已经很对象化了,group指的User对象里的数据类型-Group的别名;这里的column=”group_id”为group表里的PK:group_id而非user表的FK:group_id,不要弄混淆了!--> <!--为user的role信息(属性roleid,rolename)配置,这里同样是User中的子对象,采取的处理却是不同的,通过group来避免使用子查询带来的性能问题,大家可以看到第一个配置的粒度比较细微,配置子对象的属性,而role只是到对象一级,group中没有使用select="XXX"这样的子查询,从而避免了因为数据量大而引起二次查询带来的性能问题,而采用了一个role作为一个反面教材,大家比较一下可以发现其中的不同!--> <result property="role" column="role_id" select="get_role"/><!—这里采用了子查询(两次查询),注意这里的role_id是role表的PK:role_id,而非user表的FK:role_id,大家不要搞错了> </resultMap> <select id="get_role" parameterClass="int" resultMap="get_role_result"><!--这里的parameterClass="int"因为父查询传过来的role_id为int型的--> select * from sew_role where role_id=#value# </select> <select id="get_user" parameterClass="userbean" resultMap="get_user_result"> select * from sew_user u,sew_group g<!--因为这里的group没有子查询,所以要使用嵌套!这样在执行的效率上比子查询有优势哦,大家应该很熟悉吧!--> where u.group_id=g.group_id and u.user_id=#user_id# </select> <select id="checkuser" parameterClass="userbean" resultMap="get_user_result"> select * from sew_user u,sew_group g where u.group_id=g.group_id and u.username=#username# and u.password=#password# </select> <select id="get_group" resultMap="get_group_result" parameterClass="int"> select * from sew_group where group_id=#value# </select> <insert id="insertuser" parameterClass="userbean"> insert into sew_user values(sew_user_id_seq.nextval,<!—因为数据库里用了序列--> #username#,#password#,#email#,#group.groupid#,#role.role_id#,#nationality#, #tel#,#address#,#language#,#isEvectioner#,#realname#) </insert>
<!—这里红色标注的:group.groupid同样的意思是User对象的数据成员:group,而groupid为子对象Group的数据成员(在UML里把带有setter和getter的数据成员称为属性。) -->业务逻辑:Public class UserService{ public User getUser(User user){ User user1=null; try { System.out.println(user.getUser_id()); user1 =(User)getSqlMapExecutor().queryForObject("getuser",user); } catch (SQLException e) { e.printStackTrace(); return null; } return user1; }}
请看操作部分的代码:实现效果:察看user_id为2的用户在那个组。 UserService us=new UserService(); User ub=new User(); ub.setUser_id(2); ub =(User)us.getUser_Group(ub); System.out.println("ok"+"\n"+ub.getUsername()+"\n"+ub.getGroup().getGroupname()+"\n"+ub.getRole().getRole_name()); System.out.println(ub.getGroup().getGroupname());
增加用户:User user=new User(); user.setUser_id(27); user.setUsername("##梁静茹!!"); user.setPassword("1111"); user.setEmail("[email protected]"); user.setLanguage("CN"); user.setAddress("无锡.江苏"); user.setNationality("中国"); user.setTel("1390000000"); user.setRealname("欧阳静茹"); Group g=new Group(); g.setGroupid(1); Role r =new Role(); r.setRole_id(1); user.setGroup(g); user.setRole(r); user=us.saveUser(user); if(user!=null) System.out.println(user.getGroup().getGroupid());
<typeAlias type="com.infodeliver.pigeon.bean.User" alias="userbean" /><!--定义本地变量,为了方便使用 --> <typeAlias type="com.infodeliver.pigeon.util.Condition" alias="condition" /> <typeAlias type="com.infodeliver.pigeon.bean.Role" alias="rolebean"/> <resultMap id="get_group_result" class="com.infodeliver.pigeon.bean.Group"><!-- 这就是不定义本地变量的结果--> <result property="groupid" column="group_id" /> <result property="groupname" column="group_name" /> </resultMap> <resultMap id="get_role_result" class="rolebean"> <result property="role_id" column="role_id"/> <result property="role_name" column="role_name"/> </resultMap> <resultMap id="get_user_result" class="userbean"> <result property="user_id" column="user_id" /> <result property="username" column="username" /> <!--为user的group信息(属性groupid,groupname)配置 --> <result property="group.groupid" column="group_id" /> <result property="group.groupname" column="group_name" /> <!—这里的property="group.groupid"的含义已经很对象化了,group指的User对象里的数据类型-Group的别名;这里的column=”group_id”为group表里的PK:group_id而非user表的FK:group_id,不要弄混淆了!--> <!--为user的role信息(属性roleid,rolename)配置,这里同样是User中的子对象,采取的处理却是不同的,通过group来避免使用子查询带来的性能问题,大家可以看到第一个配置的粒度比较细微,配置子对象的属性,而role只是到对象一级,group中没有使用select="XXX"这样的子查询,从而避免了因为数据量大而引起二次查询带来的性能问题,而采用了一个role作为一个反面教材,大家比较一下可以发现其中的不同!--> <result property="role" column="role_id" select="get_role"/><!—这里采用了子查询(两次查询),注意这里的role_id是role表的PK:role_id,而非user表的FK:role_id,大家不要搞错了> </resultMap> <select id="get_role" parameterClass="int" resultMap="get_role_result"><!--这里的parameterClass="int"因为父查询传过来的role_id为int型的--> select * from sew_role where role_id=#value# </select> <select id="get_user" parameterClass="userbean" resultMap="get_user_result"> select * from sew_user u,sew_group g<!--因为这里的group没有子查询,所以要使用嵌套!这样在执行的效率上比子查询有优势哦,大家应该很熟悉吧!--> where u.group_id=g.group_id and u.user_id=#user_id# </select> <select id="checkuser" parameterClass="userbean" resultMap="get_user_result"> select * from sew_user u,sew_group g where u.group_id=g.group_id and u.username=#username# and u.password=#password# </select> <select id="get_group" resultMap="get_group_result" parameterClass="int"> select * from sew_group where group_id=#value# </select> <insert id="insertuser" parameterClass="userbean"> insert into sew_user values(sew_user_id_seq.nextval,<!—因为数据库里用了序列--> #username#,#password#,#email#,#group.groupid#,#role.role_id#,#nationality#, #tel#,#address#,#language#,#isEvectioner#,#realname#) </insert>
<!—这里红色标注的:group.groupid同样的意思是User对象的数据成员:group,而groupid为子对象Group的数据成员(在UML里把带有setter和getter的数据成员称为属性。) -->业务逻辑:Public class UserService{ public User getUser(User user){ User user1=null; try { System.out.println(user.getUser_id()); user1 =(User)getSqlMapExecutor().queryForObject("getuser",user); } catch (SQLException e) { e.printStackTrace(); return null; } return user1; }}
请看操作部分的代码:实现效果:察看user_id为2的用户在那个组。 UserService us=new UserService(); User ub=new User(); ub.setUser_id(2); ub =(User)us.getUser_Group(ub); System.out.println("ok"+"\n"+ub.getUsername()+"\n"+ub.getGroup().getGroupname()+"\n"+ub.getRole().getRole_name()); System.out.println(ub.getGroup().getGroupname());
增加用户:User user=new User(); user.setUser_id(27); user.setUsername("##梁静茹!!"); user.setPassword("1111"); user.setEmail("[email protected]"); user.setLanguage("CN"); user.setAddress("无锡.江苏"); user.setNationality("中国"); user.setTel("1390000000"); user.setRealname("欧阳静茹"); Group g=new Group(); g.setGroupid(1); Role r =new Role(); r.setRole_id(1); user.setGroup(g); user.setRole(r); user=us.saveUser(user); if(user!=null) System.out.println(user.getGroup().getGroupid());
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货