mybatis 多对多 处理
2019獨角獸企業重金招聘Python工程師標準>>>
下面的例子讓新手看不錯。可以改進的一點是 1、不必建立 關聯對象實體,可以用map傳遞兩個id進去 2、文章的resultMap 繼承和 查詢配置 比較清楚,可以借鑒????? mybatis3.0添加了association和collection標簽專門用于對多個相關實體類數據進行級聯查詢,但仍不支持多個相關實體類數據的級聯保存和級聯刪除操作。因此在進行實體類多對多映射表設計時,需要專門建立一個關聯對象類對相關實體類的關聯關系進行描述。下文將以“User”和“Group"兩個實體類之間的多對多關聯映射為例進行CRUD操作。
???? 建立user表,對應實體類"User",建表語句如下:
?????<!--StartFragment-->
建立group_info表,對應實體類"Group",建表語句如下:
CREATE TABLE `group_info` (`id` int(11) NOT NULL auto_increment,`name` varchar(40) collate utf8_unicode_ci default NULL,`createdate` timestamp NULL default CURRENT_TIMESTAMP,`state` int(1) default '0' COMMENT '0:可見;1:不可見',PRIMARY KEY (`id`) )建立user_group表,對應實體類"UserGroupLink"(該類為User和Group兩個實體類之間的關系描述),建表語句如下:
CREATE TABLE `user_group` (`user_id` int(11) default NULL,`group_id` int(11) default NULL,`createdate` timestamp NULL default CURRENT_TIMESTAMP,KEY `FK_user_group_user_id` (`user_id`),KEY `FK_user_group_group_id` (`group_id`),CONSTRAINT `FK_user_group_group_id` FOREIGN KEY (`group_id`) REFERENCES `group_info` (`id`),CONSTRAINT `FK_user_group_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) )
建立實體類User,代碼如下:
package com.xxt.ibatis.dbcp.domain;import java.util.Date; import java.util.List;/*** @describe: User實體類* @author: Nirvana* @version: V1.0 2011-3-11下午06:06:49 create*/public class User {private long id;private String name;private String password;private Date createTime;private List<Group> group;public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public List<Group> getGroup() {return group;}public void setGroup(List<Group> group) {this.group = group;} }
建立實體類Group,代碼如下:
package com.xxt.ibatis.dbcp.domain;import java.util.Date; import java.util.List;/*** @describe: Group實體類* @author: Nirvana* @version: V1.0 2011-3-7下午08:10:29 create*/ public class Group {private long id;private String name; // 組名private Date createTime;private int state; // 0可見狀態 1不可見狀態private List<User> user;public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getState() {return state;}public void setState(int state) {this.state = state;}public List<User> getUser() {return user;}public void setUser(List<User> user) {this.user = user;}}
建立實體類UserGroupLink,用于描述User和Group之間的對應關系,代碼如下:
package com.xxt.ibatis.dbcp.domain;import java.util.Date;/*** @describe: 描述User和Group之間的映射關系* @author: Nirvana* @version: V1.0 2011-3-11下午02:57:52 create*/ public class UserGroupLink {private User user;private Group group;private Date createTime;public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public Group getGroup() {return group;}public void setGroup(Group group) {this.group = group;}public User getUser() {return user;}public void setUser(User user) {this.user = user;} }建立user實體類的映射文件user.map.xml,代碼如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xxt.ibatis.dbcp.domain.User"><resultMap type="User" id="userMap"><id property="id" column="id" /><result property="name" column="name" /><result property="password" column="password" /><result property="createTime" column="createtime" /></resultMap><resultMap type="User" id="userGroupMap" extends="userMap"><collection property="groups" ofType="Group"><id property="id" column="goupId" /><result property="name" column="groupName" /><result property="state" column="state" /><result property="createTime" column="groupCreateTime" /></collection></resultMap><!-- 根據user表中的id查詢用戶信息 --><select id="selectUser" parameterType="long" resultMap="userMap">select * from user where id = #{id}</select><!-- 根據user表中的id查詢用戶和組信息 --><select id="selectUserGroup" parameterType="long"resultMap="userGroupMap">select u.id,u.name,u.password,u.createtime, gi.id asgoupId,gi.name as groupName, gi.createdate as groupCreateTime,gi.state from user u left join user_group ug on u.id=ug.user_idleft join group_info gi on ug.group_id=gi.id where u.id = #{id}</select><!-- 插入用戶信息 --><insert id="saveUser" parameterType="User" keyProperty="id"useGeneratedKeys="true">insert into user(name,password) values(#{name},#{password})</insert><!-- 保存用戶和組之間的關系信息 --><insert id="saveRelativity" parameterType="UserGroupLink">insert into user_group(user_id,group_id)values(#{user.id},#{group.id})</insert><select id="selectAllUser" resultMap="userMap">select * from user</select></mapper>
建立group實體類的映射文件group.map.xml,代碼如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xxt.ibatis.dbcp.domain.Group"><resultMap type="Group" id="groupMap"><id property="id" column="id" /><result property="name" column="name" /><result property="createTime" column="createdate" /></resultMap><resultMap type="Group" id="groupUserMap" extends="groupMap"><collection property="users" ofType="User"><id property="id" column="userId" /><result property="name" column="userName" /><result property="password" column="password" /><result property="createTime" column="userCreateTime" /></collection></resultMap><!-- 根據Group表中的id或name查詢組信息和組內用戶信息 --><select id="selectGroupUser" parameterType="Group"resultMap="groupUserMap">select u.id as userId,u.name as userName,u.password,u.createtime as userCreateTime,gi.id,gi.name,gi.createdate,gi.state from group_info gi leftjoin user_group ug on gi.id=ug.group_id left join user u onug.user_id=u.id<where><!--當id為初始值0,不再使用id作為查詢條件 --><if test="id != 0 ">gi.id=#{id}</if><!-- 當name為空或為空串時,不再使用name作為查詢條件 --><if test="name != null and name != ''">or gi.name = #{name}</if></where></select><!-- 根據id查詢group組信息 --><select id="selectGroup" parameterType="Date"resultMap="groupMap">select * from group_info where id=#{group_id}</select><!--根據name查詢group組信息 --><select id="getGroupByName" parameterType="String"resultMap="groupMap">select * from group_info where name=#{name}</select><!-- 插入組信息 --><insert id="saveGroup" parameterType="Group" keyProperty="id"useGeneratedKeys="true">insert into group_info(name) values(#{name})</insert><!-- 刪除組與組內成員之間的對應關系 --><delete id="deleteGroupUser" parameterType="UserGroupLink">delete from user_group<where><if test="user.id != 0">user_id = #{user.id}</if><if test="group.id != 0">and group_id = #{group.id}</if></where></delete><!--根據組id或者組name刪除組信息 --><delete id="deleteGroup" parameterType="Group">delete from group_info<where><if test="id!=0">id=#{id}</if><if test="name!=null || name!=''">and name=#{name}</if></where></delete><!-- 更新根據組id或者組name更新組狀態 --><update id="updateGroupState" parameterType="Group">update group_info set state=#{state}<where><if test="id!=0">id=#{id}</if><if test="name!=null || name!=''">and name=#{name}</if></where></update> </mapper>建立ibatis總配置文件salMapConfig.xml,代碼如下:
?
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><properties resource="jdbc.properties" /><typeAliases><typeAlias type="com.xxt.ibatis.dbcp.domain.User" alias="User" /><typeAlias type="com.xxt.ibatis.dbcp.domain.Group"alias="Group" /><typeAlias type="com.xxt.ibatis.dbcp.domain.UserGroupLink"alias="UserGroupLink" /></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="UNPOOLED"><property name="driver" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /></dataSource></environment></environments><mappers><mapper resource="com/xxt/ibatis/dbcp/domain/user.map.xml" /><mapper resource="com/xxt/ibatis/dbcp/domain/group.map.xml" /></mappers> </configuration>
測試用例,代碼如下:
轉載于:https://my.oschina.net/baochanghong/blog/519724
總結
以上是生活随笔為你收集整理的mybatis 多对多 处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#:解决WCF中服务引用 自动生成代码
- 下一篇: PHP采集程序中的常用函数