Mybatis学习04 多对一与一对多处理

 

数据库表结构

Students表

Class_table表

多对一处理的2种方法

  • 按结果嵌套处理

 

实体类

Students.java

扫描二维码关注公众号,回复: 5795776 查看本文章

public class Students {

   private String s_id;

   private String s_name;

   private String s_sex;

   //关联对象(外键)数据类型应该为关联对象的实体类

   private Classs classs;

   //get set

Class.java

public class Classs {

   private String c_id;

   private String c_name;

//get set

业务类

public List<Students> getStudents() throws IOException{

      SqlSession ss=MybatisUit.getSession();

      List<Students> list=ss.selectList("com.master.Students.maapper.selectStudentClass");

      ss.close();

      return list;

   }

Sql语句映射

<select id="selectStudentClass" resultMap="StudentsClass">

   select s_id,s_name,s_sex,c_name from Students as s,class_table as c where s.c_id=c.c_id

   </select>

   <resultMap id="StudentsClass" type="com.master.Students">

   <!--  id 数据库表的主键, result数据库表的其他字段 -->

   <!-- column数据库表中的列名 映射到 property对应实体类的属性 -->

      <id column="s_id" property="s_id"/>

      <result column="s_name" property="s_name"/>

      <result column="s_sex" property="s_sex"/>

      <!-- association表示resultMapid映射类型的关联对象在实体类中的属性

         即数据库表的外键在实体类中的对应属性 -->

         <!-- javaType关联对象在java中的实体类 -->

      <association property="classs" javaType="com.master.Classs">

         <id column="c_id" property="c_id"/>

         <result column="c_name" property="c_name"/>

      </association>

   </resultMap>

测试

public class Test {

   public static void main(String[] args) throws IOException {

      StudentsDao sd=new StudentsDao();

      List<Students> list=sd.getStudents();

      for(Students stu:list)

      {

         System.out.print(" s_id: "+stu.getS_id()+"  ");

         System.out.print(" s_name: "+stu.getS_name()+"  ");

         System.out.print(" s_sex: "+stu.getS_sex()+"  ");

         System.out.println(" c_name : "+stu.getClasss().getC_name()+"  ");

      }

   }

}

结果

  • 按查询嵌套处理

Sql语句映射1

<select id="selectStudentClass"  resultMap="StudentsClass">

      select*from Students

   </select>

  

   <resultMap type="com.master.Students" id="StudentsClass">

      <association property="classs" column="c_id" javaType="com.master.Classs" select="com.master.Class.maapper.getClass"></association>

   </resultMap>

SQL语句映射2

<select id="getClass" resultType="com.master.Classs">

      select*from class_table where c_id=#{c_id}

   </select>

其他不改变;

结果

 

 


一对多处理

       Mybatis 一对多处理

数据库表结构

Students表

Class_table表

三、一对多处理的2种方法

1.按结果嵌套处理

 

实体类

student

private String s_id;

   private String s_name;

   private String s_sex;

get set

Class

public class Classs {

  private String c_id;

  private String c_name;

  //一对多,一个班级对应多个学生所以用list

  private List<Students> students;

get set

业务类

//一对多,返回应是一个Class对象

public Classs getClasss() throws IOException {

      SqlSession ss=MybatisUit.getSession();

      Classs c=ss.selectOne("com.master.Class.mapper.getClass");

      ss.close();

      return c;

   }

SQL映射

<select id="getClass" resultMap="ClassStudent">

      select*from Students as s,class_table as c where s.c_id=c.c_id and c.c_id='002'

   </select>

   <resultMap type="com.master.Classs" id="ClassStudent">

      <id column="c_id" property="c_id"/>

      <result column="c_name" property="c_name"/>

      <!—本例中 javatype指定的是Student对象的属性的类型,而oftype指定的是映射到list集合属性中Student的类型 -->

      <collection property="students" ofType="com.master.Students">

         <id column="s_id" property="s_id"/>

         <result column="s_name" property="s_name"/>

         <result column="s_sex" property="s_sex"/>

      </collection>

   </resultMap>

 

测试

public static void main(String[] args) throws IOException {

      ClassDao cd=new ClassDao();

      Classs c=cd.getClasss();

      List<Students> list=c.getStudents();

      System.out.println("cid= "+c.getC_id()+"  cname =" +c.getC_name());

      for(Students stu:list)

      {

         System.out.println(stu);

      }

   }

结果:

 

2.按查询嵌套处理

SQL语句映射

<select id="getClass" resultMap="ClassStudent">

      select*from class_table where c_id='002'

   </select>

   <resultMap type="com.master.Classs" id="ClassStudent">

      <id column="c_id" property="c_id"/>

      <!-- collection 此处column为关联对象的外键 -->

      <collection property="students" column="c_id" ofType="com.master.Students" select="com.master.Students.mapper.getStudents"></collection>

   </resultMap>

      <!-- 按查询嵌套处理 -->

   <select id="getStudents" resultType="com.master.Students">

   select*from students where c_id=#{c_id}

   </select>

测试类不改变

猜你喜欢

转载自blog.csdn.net/u012777599/article/details/88639722
今日推荐