1. 程式人生 > >mybatis學習筆記(十一)多對多關聯查詢/級聯操作

mybatis學習筆記(十一)多對多關聯查詢/級聯操作

package com.mybatis.test;

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.mybaits.onetomany.model.Group;
import com.mybaits.onetomany.model.User;
import com.mybaits.onetomany.model.UserGroupLink;

public class Test {

	private static SqlSessionFactory sqlSessionFactory;  
	private static Reader reader;
	private static String resource ="config/mybatis-config.xml";
    static {  
        try {  
            reader = Resources.getResourceAsReader(resource);  
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
    /**
     * 儲存使用者資訊
     */
    public static void saveUserTest(){
    	
    	SqlSession session = null;
    	try{
    		session = sqlSessionFactory.openSession();
	      	User user = new User();  
	        user.setName("張三");  
	        user.setPassword("123456");
	        //<strong><span style="color:#3366ff;">注意:insert兩個引數:1、mapper名稱空間+id  2、儲存物件</span></strong>
	        session.insert("<span style="color:#ff0000;">com.mybatis.manytomany.mapper.userMapper</span>.saveUser", user);
	        session.commit();
    	}finally{
    		session.close();  
    	}
    }  
    
    /**
     * 獲取使用者資訊  
     */
    public static void getUserTest(){
    	SqlSession session = null;
    	try{
    		session = sqlSessionFactory.openSession();
    		User user = (User) session.selectOne("com.mybatis.manytomany.mapper.userMapper.selectUser", 3L);  
	        System.out.println("使用者名稱: "+user.getName());  
	        System.out.println("使用者密碼:  "+user.getPassword());  
	        session.commit();
    	}finally{
    		session.close();  
    	}
    }
    
    /**
     * 獲取使用者和使用者所在組資訊  
     */
    public static void getUserAndGroupTest(){  
    	
    	SqlSession session = null;
    	try{
    		session = sqlSessionFactory.openSession();
    		User  user =  (User)session.selectOne("com.mybatis.manytomany.mapper.userMapper.selectUserGroup", 3L);  
            System.out.println(user.getName() +"所屬組資訊:");  
            for(Group group : user.getGroups() ){  
            	System.out.println(group);  
            }  
	        session.commit();
    	}finally{
    		session.close();  
    	}
    	
    }  
   
    /**
     * 儲存使用者和使用者所在組資訊 。當用戶所在組不存在時,建立該組,並生成對映關係  
     * 
     * 級聯儲存
     */
    public static void saveUserAndGroupTest(){
    	
    	SqlSession session = null;
    	try{
    		session = sqlSessionFactory.openSession();
    		User user = new User();  
	        user.setName("李四");  
	        user.setPassword("lisi");  
	        session.insert("com.mybatis.manytomany.mapper.userMapper.saveUser", user);  
    	          
	        Group groupImpl = (Group)session.selectOne("com.mybatis.manytomany.mapper.groupMapper.getGroupByName","使用者組4");//獲取組例項  
	        UserGroupLink ugl = new UserGroupLink();//宣告User和Group實體間對映關係例項  
	          
	        //查詢到的組例項為空時的邏輯處理  
	        if(groupImpl == null){  
	        	Group group = new Group();  
	            group.setName("使用者組4");  
	            session.insert("com.mybatis.manytomany.mapper.groupMapper.saveGroup", group);//持久化建立好的組例項  
	              
	            //設定對映關係例項相關的屬性  
	            ugl.setUser(user);  
	            ugl.setGroup(group);  
	            session.insert("com.mybatis.manytomany.mapper.userMapper.saveRelativity",ugl);//持久化對映關係實力  
	                      
	        }else{  
	            ugl.setGroup(groupImpl);  
	            ugl.setUser(user);  
	            session.insert("com.mybatis.manytomany.mapper.userMapper.saveRelativity",ugl);  
	        }
	        session.commit();
    	}finally{
    		session.close();  
    	}
    	
       
    }
    
    /**
     * 刪除組資訊的同時,取消組內所有的成員與該組的關聯關係  
     */
    public static void deleteGroupTest(){
    	
    	SqlSession session = null;
    	try{
    		session = sqlSessionFactory.openSession();
    		Group group = new Group();  
	        group.setName("使用者組1"); //以組name作為查詢條件  
	        Group groupImpl = (Group)session.selectOne("com.mybatis.manytomany.mapper.groupMapper.selectGroupUser",group);//獲取組例項  
	        //判斷小組是否存在 
	        if(groupImpl != null){  
	            List<User> users = groupImpl.getUser();  
	          //判斷“使用者組1”中是否存在使用者  
	            if(users != null && users.size() > 0){  
	                //存在使用者時,先刪除組與使用者的對應關係  
	                UserGroupLink ugl = new UserGroupLink();  
	                for(User user : users){  
	                   ugl.setUser(user);  
	                   ugl.setGroup(groupImpl);  
	                   session.delete("com.mybatis.manytomany.mapper.groupMapper.deleteGroupUser",ugl );  
	                }   
	            }  
	            //刪除組資訊  
	            session.delete("com.mybatis.manytomany.mapper.groupMapper.deleteGroup", groupImpl);  
	              
	        }else{  
	            throw new RuntimeException("查詢的組不存在!!");  
	        }  
	        session.commit();
    	}finally{
    		session.close();  
    	}
    }
    	
    /**
     * 
     * 更新組狀態, 變成不可見時,取消該組下的使用者與該組的對映關係  
     */
    public static void updateGroupStateTest(){
    	
    	SqlSession session = null;
    	try{
    		session = sqlSessionFactory.openSession();
	        
    		Group group = new Group();  
	        group.setName("使用者組2");  
	        Group groupImpl = (Group) session.selectOne("com.mybatis.manytomany.mapper.groupMapper.selectGroupUser",group);  
	          
	        if(groupImpl != null){  
	            int state = groupImpl.getState() == 1 ? 0 : 1;
	            System.out.println(state);
	            //組狀態由0變成1時,即由可見變為不可見  
	            if(state == 1){  
	                List<User> users = groupImpl.getUser();  
	                //檢視使用者組2中是否存在使用者  
	                if(users != null && users.size() > 0){  
	                    //存在使用者時,刪除組與使用者的對應關係  
	                    UserGroupLink ugl = new UserGroupLink();  
	                    for(User user : users){  
	                       ugl.setUser(user);  
	                       ugl.setGroup(groupImpl);  
	                       session.delete("com.mybatis.manytomany.mapper.groupMapper.deleteGroupUser",ugl );  
	                    }   
	                }  
	            }   
	            session.commit();
	        }  
	        else{  
	            throw new RuntimeException("查詢的組不存在!!");  
	        }  
	           
    	}finally{
    		session.close();  
    	}
    	
    }  
    
	    public static void main(String[] args) {  
//	        System.out.println("==============一對一查詢,根據車票來查顧客===============");  
//	        selectTicketById(1);  
//	        System.out.println("==============一對多查詢,根據顧客來查車票===============");  
//	        selectCustomerByName("小王");  
//	    	saveUserTest();
//	    	getUserAndGroupTest();
//	    	saveUserAndGroupTest();
//	    	deleteGroupTest();
	    	updateGroupStateTest();
	    }  
}

sql語句:

相關推薦

mybatis學習筆記關聯查詢/操作

package com.mybatis.test; import java.io.Reader; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessi

Java 執行緒學習筆記 單例設計模式延遲載入/懶漢模式DCL解決執行緒安全問題

package extthread; import test.MyObject; public class MyThread extends Thread { @Override publi

Python學習筆記裝飾器

before 原來 return wrap 文本 wiki 模塊 http 學習筆記 摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318

如鵬網學習筆記JQuery

on() jquery操作 等於 asc 空字符串 name屬性 string 包含 ret 一、jQuery簡介   jQuery是一個JavaScript庫,特性豐富,包含若幹對象和很多函數,可以替代傳統DOM編程的操作方式和操作風格   jQuery通過對DOM

Python學習筆記

def __init__ 實現 完成 cti uniq ive 枚舉 elf 一、Python的多重繼承功能   Python中的主線是單一繼承的   Python中可以存在功能類,即專註於完成一定功能的類,相當於其他一些動態語言中的接口的概念   class Class_

EF學習筆記:實施繼承

long cannot oid data- turn cati com list pac 學習總目錄:ASP.NET MVC5 及 EF6 學習筆記 - (目錄整理) 上篇鏈接:EF學習筆記(十) 處理並發 本篇原文鏈接:Implementing Inheritance 面

R語言學習筆記:廣義線性模型

學習筆記 Education 5.0 1.3 style only 可能性 div erro #Logistic 回歸 install.packages("AER") data(Affairs,package="AER") summary(Affairs) a

python學習筆記之函數

last 函數返回 traceback keep disco show 全局變量 not 默認參數 牛刀小試:   定義一個無參函數 1 >>> def myFirstFunc(): 2 ... print("Hello python

JavaScript學習筆記——閉包

進行 性能 ole 直接 狀態 聲明變量 垃圾 函數 官方網站 在學習廖雪峰前輩的JavaScript教程中,遇到了一些需要註意的點,因此作為學習筆記列出來,提醒自己註意! 如果大家有需要,歡迎訪問前輩的博客https://www.liaoxuefeng.com/學習。

學習筆記——數據庫的索引碎片、計劃緩存、統計信息

部分 null 文章 mage like 分享 show not 決定 1.索引碎片 數據庫存儲本身是無序的,建立了聚集索引,會按照聚集索引物理順序存入硬盤。既鍵值的邏輯順序決定了表中相應行的物理順序 而且在大多數的情況下,數據庫寫入頻率遠低於讀取頻率,索引的存在為了讀

Linux學習筆記用戶組管理 、用戶管理

.net nologin follow 另一個 window ftp log product windows文件 一、linux和windows互傳文件 目前我所學到的linux與windows互傳文件的方法有兩種; yum install -y lrzsz輸入sz

hadoop學習筆記:MapReduce數據類型

筆記 ash all 記錄 write 一個 操作 png bool 一、序列化 1 hadoop自定義了數據類型,在hadoop中,所有的key/value類型必須實現Writable接口。有兩個方法,一個是write,一個是readFileds。分別用於讀(反序列化操

Nodejs學習筆記—數據采集器示例request和cheerio

列表 意思 9.1 很多 AD 開發 com http undefined 寫在之前   很多人都有做數據采集的需求,用不同的語言,不同的方式都能實現,我以前也用C#寫過,主要還是發送各類請求和正則解析數據比較繁瑣些,總體來說沒啥不好的,就是效率要差一些,   用nodej

ASP.NET Core 2 學習筆記Cookies & Session

自動 asp Go 內存 rtu serialize .html call names 原文:ASP.NET Core 2 學習筆記(十一)Cookies & Session基本上HTTP是沒有記錄狀態的協定,但可以通過Cookies將Request來源區分出來,並

javaweb學習筆記:JSP1

目錄 jsp(1) 1.基本概念 1 .1Jsp的執行過程 1.2 JSP與servlet 2 JSP語法 2.1 Jsp模板 2.2 Jsp表示式 2.3 Jsp指令碼 2.4 Jsp宣告 2.5 Jsp註釋 jsp(1) 1.基本

Spring MVC 學習總結——IDEA+Maven+模組實現SSM框架整合

一、SSM概要 與SSH(Struts/Spring/Hibernate/)一樣,Spring+SpringMVC+MyBatis也有一個簡稱SSM,Spring實現業務物件管理,Spring MVC負責請求的轉發和檢視管理, MyBatis作為資料物件持久化引擎。這樣搭配的優點是:輕量、自由度高、Spri

python基礎教程第三版)學習筆記

第十一章 檔案 11.1 開啟檔案 要開啟檔案,可使用函式open,它位於自動匯入的模組io中。函式open將檔名作為唯一必不可少的引數,並返回一個檔案物件。 from contextlib import contextmanager import sys,pprint f=open('xx.

學習筆記:使用K-Means演算法檢測DGA域名

1.資料收集與清洗:同(十) 2.特徵化:同(十) 3.訓練樣本 model = KMeans(n_clusters = 2, random_state=random_state) y_pred = model.fit_predict(x)  4.效果驗證:使用TSNE將

機器學習筆記: TensorFlow實戰三MNIST數字識別問題

1 - MNIST數字識別問題 前面介紹了這樣用TensorFlow訓練一個神經網路模型和主要考慮的問題及解決這些問題的常用方法。下面我們用一個實際的問題來驗證之前的解決方法。 我們使用的是MNIST手寫數字識別資料集。在很多深度學習教程中,這個資料集都會被當做一個案例。 1.1

Python學習筆記關鍵字、函式和方法

關鍵字是 Python內建的、具有特殊意義的識別符號            關鍵字後面不需要使用括號   函式封裝了獨立功能,可以直接呼叫