mybatis+oracle實現一對多,多對一查詢


首先創建表

學生表

create table stu(
       id number(11) primary key,
       name varchar2(255),
       age number(11),
       cid number(11)
);

班級表

create table cls(
  id number(11) primary key,
  cname varchar2(255)
);

創建序列

create sequence seq_stu;

create sequence seq_cls;

添加數據

insert into stu values(seq_stu.nextval,'小喬',16,1);
insert into stu values(seq_stu.nextval,'干將',88,1);
insert into stu values(seq_stu.nextval,'魯班',18,1);
insert into stu values(seq_stu.nextval,'婉兒',22,1);
insert into stu values(seq_stu.nextval,'艾琳',23,2);
insert into stu values(seq_stu.nextval,'安其拉',14,2);
insert into stu values(seq_stu.nextval,'牛魔',50,2);
insert into stu values(seq_stu.nextval,'猴子',66,2);
insert into stu values(seq_stu.nextval,'李白',26,1);
insert into stu values(seq_stu.nextval,'韓信',32,1);

 

insert into cls values (seq_cls.nextval,'QY75');
insert into cls values (seq_cls.nextval,'QY97');

創建工具類

package com.aaa.mybatis.util;

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 java.io.IOException;
import java.io.Reader;

public class SqlSessionFactoryUtil {
private static SqlSessionFactory sessionFactory;
static {
Reader reader =null;
try {
reader= Resources.getResourceAsReader("mybatis.xml");
/*sessionFactory =new SqlSessionFactoryBuilder().build(reader,"mysql");*/
sessionFactory =new SqlSessionFactoryBuilder().build(reader,"myOracle");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static SqlSession getSession(){
return sessionFactory.openSession();
}
}

創建mybatis主配置文件

<?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>
<environments default="myOracle">
<environment id="myOracle">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</dataSource>
</environment>
     <--連接MySQL用下面這個,工具類加着注釋-->
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
<property name="username" value="root"></property>
<property name="password" value="admin"></property>
</dataSource>
</environment>
</environments>

<mappers>
<mapper resource="com/aaa/mybatis/dao/StuDaoMapper.xml"></mapper>
<mapper resource="com/aaa/mybatis/dao/ClsDaoMapper.xml"></mapper>
</mappers>
</configuration>

創建Stu,Cls表實體

package com.aaa.mybatis.entity;
import java.util.*;

public class Cls {
private int cid;
private String cname;
private List<Stu> stu;

public int getCid() {
return cid;
}

public void setCid(int cid) {
this.cid = cid;
}

public String getCname() {
return cname;
}

public void setCname(String cname) {
this.cname = cname;
}

public List<Stu> getStu() {
return stu;
}

public void setStu(List<Stu> stu) {
this.stu = stu;
}
}

package com.aaa.mybatis.entity;
public class Stu {
private int id;
private String name;
private int age;
private Cls cls;

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 getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Cls getCls() {
return cls;
}

public void setCls(Cls cls) {
this.cls = cls;
}
}

創建Stu接口
package com.aaa.mybatis.dao;

import com.aaa.mybatis.entity.Stu;
import org.apache.ibatis.annotations.Param;

import java.util.*;

public interface StuDao {
/**
* 根據學生編號查詢學生信息和班級信息
* @param id
* @return
*/

}
創建Cls接口
package com.aaa.mybatis.dao;

import com.aaa.mybatis.entity.Cls;

import java.util.*;

public interface ClsDao {
/**
* 根據班級編號查詢該班級信息和所有學生信息
*/
public List<Cls> allClsAndStuByCid();
}


一對多mapper根據學生編號查詢學生信息和班級信息
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aaa.mybatis.dao.StuDao">
<resultMap id="stuMap" type="com.aaa.mybatis.entity.Stu" autoMapping="true">
<association property="cls" javaType="com.aaa.mybatis.entity.Cls" autoMapping="true"><--autoMapping如果屬性名與實體一致可以省略里面的字段-->

</association>
</resultMap>
<select id="allstuByStuId" resultMap="stuMap">
select * from stu a join cls b on a.cid=b.cid where a.id=#{id}
</select>
</mapper>



多對一mapper查詢所有班級信息和每個班的學生信息
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aaa.mybatis.dao.ClsDao">
<resultMap id="clsMap" type="com.aaa.mybatis.entity.Cls" autoMapping="true">
<id column="cid" property="cid"></id><--加上autoMapping可以省略實體里字段名與屬性名相同的信息,但是多對一必須在這里加ID標簽-->
<collection property="stu" ofType="com.aaa.mybatis.entity.Stu" autoMapping="true"></collection>
</resultMap>
<select id="allClsAndStuByCid" resultMap="clsMap">
select * from cls a join stu b on a.cid=b.cid
</select>
</mapper>

測試一對多
package com.aaa.mybatis.text;

import com.aaa.mybatis.dao.StuDao;
import com.aaa.mybatis.entity.Stu;
import com.aaa.mybatis.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;

public class text01 {
public static void main(String[] args) {
SqlSession session= SqlSessionFactoryUtil.getSession();
StuDao mapper = session.getMapper(StuDao.class);
Stu stu = mapper.allstuByStuId(6);
System.out.println("學生姓名:"+stu.getName());
System.out.println("學生編號:"+stu.getId());
System.out.println("學生年齡:"+stu.getAge());
System.out.println("班級編號:"+stu.getCls().getCid());
System.out.println("班級名稱:"+stu.getCls().getCname());
}
}
測試結果
學生姓名:艾琳
學生編號:6
學生年齡:23
班級編號:2
班級名稱:QY97

Process finished with exit code 0


測試多對一
package com.aaa.mybatis.text;

import com.aaa.mybatis.dao.ClsDao;
import com.aaa.mybatis.dao.StuDao;
import com.aaa.mybatis.entity.Cls;
import com.aaa.mybatis.entity.Stu;
import com.aaa.mybatis.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class text02 {
public static void main(String[] args) {
SqlSession session= SqlSessionFactoryUtil.getSession();
ClsDao mapper = session.getMapper(ClsDao.class);
List<Cls> cls = mapper.allClsAndStuByCid();
for(int i=0;i<cls.size();i++){
System.out.println("班級編號:"+cls.get(i).getCid());
System.out.println("班級名稱:"+cls.get(i).getCname());
System.out.println("------------------");
List<Stu> e = cls.get(i).getStu();
for (Stu stu : e) {
System.out.println("學生姓名:"+stu.getName());
System.out.println("學生編號:"+stu.getId());
System.out.println("學生年齡:"+stu.getAge());
System.out.println("**********************");
}
}

}
}
測試結果
班級編號:1
班級名稱:QY75
------------------
學生姓名:小喬
學生編號:2
學生年齡:16
**********************
學生姓名:干將
學生編號:3
學生年齡:88
**********************
學生姓名:魯班
學生編號:4
學生年齡:18
**********************
學生姓名:婉兒
學生編號:5
學生年齡:22
**********************
學生姓名:李白
學生編號:10
學生年齡:26
**********************
學生姓名:韓信
學生編號:11
學生年齡:32
**********************
班級編號:2
班級名稱:QY97
------------------
學生姓名:艾琳
學生編號:6
學生年齡:23
**********************
學生姓名:安其拉
學生編號:7
學生年齡:14
**********************
學生姓名:牛魔
學生編號:8
學生年齡:50
**********************
學生姓名:猴子
學生編號:9
學生年齡:66
**********************

Process finished with exit code 0
 
 
 
 
 
 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM