多对多:之前我们学习了一对多和多对一,那么我们今天的知识点是多对多,稍微比之前学习的一对多和多对一复杂一些,但是这都是小事,只要你理解的什么都好说。那么我们今天来学习多对多*—*
之前学习的只要你懂了,那么这个应该也不难,说难的请先回到一对多和多对一学习,这里我们直接进入练习:
思路很简单:
- 创建3个表分别是用户表,用户学习分组表,关系表(也就是关联表)表中内容自定义。
- 对应表中数据创建相对应的实体类,实体类名与表名保持一致且首字母大写。
- 创建一个接口(最后执行mapper接口方法时,会通过这种方式创建接口实例)
- 编写两个实体映射文件用来关联到表中的数据(用户学习分组表,关系表的映射文件)
- 编写一个MyBatis主配置文件分别配置别名,基本环境配置,映射文件配置(注:有多少个实体类就给多少个别名,有多少个映射文件就配置多少个映射文件)
- 编写测试类
根据我提供的思路在脑海里构建一下代码吧!!!
项目结构图:
- 数据库创建表
user
groups
usergroup
- 创建以表相对应的实体类:
User.java
package com.anzhuo.cm.bean;
import java.util.List;
public class User {
int id;
String name;
int phone;
String sex;
List<Groups> groups;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPhone() {
return phone;
}
public void setPhone(int phone) {
this.phone = phone;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public List<Groups> getGroups() {
return groups;
}
public void setGroups(List<Groups> groups) {
this.groups = groups;
}
}
Groups.java
package com.anzhuo.cm.bean;
import java.util.List;
public class Groups {
int id;
String zhu;
List<User> user;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getZhu() {
return zhu;
}
public void setZhu(String zhu) {
this.zhu = zhu;
}
public List<User> getUser() {
return user;
}
public void setUser(List<User> user) {
this.user = user;
}
}
UserGroup.java
package com.anzhuo.cm.bean;
public class UserGroup {
int uid;
int pid;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
}
- 创建一个接口并给予一个方法
IGroupsMapper.java
package com.anzhuo.cm.dao;
import com.anzhuo.cm.bean.Groups;
public interface IGroupsMapper {
public Groups getSelectById_A(int i);
}
- 编写使表的关联实体配置文件
groupsmapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "mapper" "mybatis-3-mapper.dtd" >
<mapper namespace="com.anzhuo.cm.dao.IGroupsMapper">
<select id="getSelectById_A" parameterType="int" resultMap="resultmap_groups">
select * from groups where id=#{id}
</select>
<resultMap type="Groups" id="resultmap_groups">
<result property="id" column="id" />
<result property="zhu" column="zhu" />
<collection property="user" column="id"
select="com.anzhuo.cm.dao.IGroupsMapper.getSelectById_B">
</collection>
</resultMap>
</mapper>
usergroupmapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "mapper" "mybatis-3-mapper.dtd" >
<mapper namespace="com.anzhuo.cm.dao.IGroupsMapper">
<select id="getSelectById_B" parameterType="int" resultMap="resultmap_usergroup">
select u.*,ug.g_id from user u,usergroup ug where u.id=ug.u_id and ug.g_id=#{id}
</select>
<resultMap type="User" id="resultmap_usergroup">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="phone" column="phone" />
<result property="sex" column="sex" />
</resultMap>
</mapper>
- 编写主配置文件
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "config" "mybatis-3-config.dtd" >
<configuration>
<typeAliases>
<package name="com.anzhuo.cm.bean" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/anzhuo/cm/dao/groupsmapper.xml"/>
<mapper resource="com/anzhuo/cm/dao/usergroupmapper.xml"/>
<!-- <package name="com.anzhuo.cm.dao"/> -->
</mappers>
</configuration>
- 最后编写一个测试类来测试一下多对多是否编写成功:
Test.xml
package com.anzhou.cm.test;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.anzhuo.cm.bean.Groups;
import com.anzhuo.cm.bean.User;
import com.anzhuo.cm.dao.IGroupsMapper;
public class Test {
public static void main(String[] args) throws IOException{
Reader is = Resources.getResourceAsReader("config.xml");
SqlSessionFactory factory =new SqlSessionFactoryBuilder().build(is);
SqlSession session =factory.openSession();
IGroupsMapper igm = session.getMapper(IGroupsMapper.class);
Groups gro = igm.getSelectById_A(1);
System.out.println("学习组:"+gro.getZhu());
List<User> user =gro.getUser();
for(User us:user){
System.out.println("学生名:"+us.getName());
System.out.println("学生性别:"+us.getSex());
System.out.println("学生电话:"+us.getPhone());
}
Groups gro2 = igm.getSelectById_A(4);
System.out.println("学习组:"+gro2.getZhu());
List<User> user2 =gro2.getUser();
for(User us2:user2){
System.out.println("学生名:"+us2.getName());
System.out.println("学生性别:"+us2.getSex());
System.out.println("学生电话:"+us2.getPhone());
}
session.close();
}
}
看一步思路看一步代码,重要在于理解,多敲多练
要练习一种能把代码转为人的语言并说出口And把说出口的话转为代码