Rumah pangkalan data tutorial mysql mybatis“集合嵌套查询”和“集合嵌套结果”两种方法实现数据库

mybatis“集合嵌套查询”和“集合嵌套结果”两种方法实现数据库

Jun 07, 2016 pm 04:12 PM
mybatis capai Bersarang nombor kaedah Pertanyaan hasil berkumpul

两个实体类分别如下:User用户类和Goods商品类。一个用户对应多个商品(一对多) package com.leo.entity;import java.util.List;public class User {private Integer id;private String username;private Integer age;private String address;private ListG

两个实体类分别如下:User用户类和Goods商品类。一个用户对应多个商品(一对多)

package com.leo.entity;

import java.util.List;
public class User {
	private Integer id;
	private String username;
	private Integer age;
	private String address;
	private List<Goods> goodsList;

	public List<Goods> getGoodsList() {
		return goodsList;
	}
	public void setGoodsList(List<Goods> goodsList) {
		this.goodsList = goodsList;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", age=" + age
				+ ", address=" + address + ", goodsList=" + goodsList + "]";
	}
	
	
	
	
	
}

Salin selepas log masuk
Goods商品类

package com.leo.entity;

public class Goods {
	private Integer id;
	private String goodsName;
	private Integer goodsNumber;
	private Integer user_id;
	
	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getGoodsName() {
		return goodsName;
	}
	public void setGoodsName(String goodsName) {
		this.goodsName = goodsName;
	}
	public Integer getGoodsNumber() {
		return goodsNumber;
	}
	public void setGoodsNumber(Integer goodsNumber) {
		this.goodsNumber = goodsNumber;
	}
	public Integer getUser_id() {
		return user_id;
	}
	public void setUser_id(Integer user_id) {
		this.user_id = user_id;
	}
	
	
	
	
}
Salin selepas log masuk

User实体类的mapper映射文件:UserDao.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.leo.mapper.UserDao">		
		<resultMap type="User"  id="userMap">
			<id column="u_id" property="id" />
			<result column="username" property="username" />
			<result column="age" property="age" />
			<result column="address" property="address" />
			<!--当表之间的关系是一对多时,用 collection-->			<!-- 这里的 column="u_id"是为了传参数到嵌套的查询select="....."-->
			<collection property="goodsList" ofType="Goods" column="u_id" select="com.leo.mapper.GoodsDao.selectGoodsForUser" />
		</resultMap>		<!--goodsList是User实体类中的 私有属性集合 -->													
		<select id="getUserinfoById" parameterType="int"  resultMap="userMap">
		    select 
				u.id as u_id,
				u.username,
				u.age, 
				u.address 
			from
				user u
			 where 
				u.id =${value};
		</select>
	</mapper> 
Salin selepas log masuk

Goods实体类的mapper映射文件:GoodsDao.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.leo.mapper.GoodsDao">
		<select id="selectGoodsForUser" parameterType="int" resultType="Goods">
		  SELECT id,goodsName,goodsNumber,user_id FROM Goods WHERE user_id = #{value}
		</select>
	</mapper>  
Salin selepas log masuk


mabatis的环境配置文件mabatis-config.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>
	<!-- 我把数据源的内容放在db.properties文件中 -->
	<properties resource="com/leo/resources/db.properties" />
	
	<!--start-类型别名 :为mapper.xml中resultType取一个别名,看着不会很冗余-->
	<typeAliases>
	  <typeAlias alias="User" type="com.leo.entity.User"/>
	  <typeAlias alias="Goods" type="com.leo.entity.Goods"/>
	</typeAliases>
	<!-- end- 类型别名-->
	
	<!-- start- environments配置 -->
    <environments default="development">   
       <environment id="development">   
           <transactionManager type="JDBC"/>   
           <dataSource type="POOLED">   
               <property name="driver" value="${driverClass}"/><!-- 数据源配置 --> 
               <property name="url" value="${url}"/>   
               <property name="username" value="${username}"/>   
               <property name="password" value="${password}"/>   
           </dataSource>   
       </environment>   
    </environments>
    <!-- end- environments配置 -->   
    
    <!-- 连接到实体类的映射文件资源-->
    <mappers>   
        <mapper resource="com/leo/entity/UserDao.xml" />
        <mapper resource="com/leo/entity/GoodsDao.xml" />
    </mappers>   
</configuration>
Salin selepas log masuk
测试的servlet(也可以用main函数测试)

package com.leo.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.leo.entity.Goods;
import com.leo.entity.User;
import com.leo.mapper.GoodsDao;
import com.leo.mapper.UserDao;



/**
 * Servlet implementation class MybatisServlet
 */
@WebServlet("/MybatisServlet")
public class MybatisServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		InputStream is = Resources.getResourceAsStream("com/leo/resources/mybatis-config.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		SqlSession session = factory.openSession();
		
//		UserDao ud = session.getMapper(UserDao.class);
		GoodsDao gd = session.getMapper(GoodsDao.class);

		List<Goods> goodsList= gd.selectGoodsForUser(1);
		
//		User user = ud.getUserinfoById(1);		
//		System.out.println(user);
//		List<Goods> goodsList  =  user.getGoodsList();
		for (Goods goods : goodsList) {
			System.out.println(goods.getId()+"   "+ goods.getGoodsName()+"   "+goods.getGoodsNumber()+ "  "+ goods.getUser_id());
		}
		session.commit();
		session.close();
		
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
		
	}

}
Salin selepas log masuk

以上是集合嵌套查询,还有一种方式是集合嵌套结果,这种方式只需要一个实体类文件即可,它是一种级联查询,自动完成的

下面用集合嵌套结果这种方式:

只需要改动UserDao.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.leo.mapper.UserDao">
		
		
		<resultMap type="Goods" id="goodsMap">
			<id column="g_id" property="id"/>
			<result column="goodsName" property="goodsName"/>
			<result column="goodsNumber" property="goodsNumber"/>
			<result column="user_id" property="user_id"/>
		</resultMap>
		
		<resultMap type="User"  id="userMap">
			<id column="u_id" property="id" />
			<result column="username" property="username" />
			<result column="age" property="age" />
			<result column="address" property="address" />
			<collection property="goodsList" ofType="Goods" resultMap="goodsMap" /><!--两种方式的不同之处在这里,自己分析就可以知道-->
		</resultMap>
		<select id="getUserinfoById" parameterType="int" resultMap="userMap">
		    select 
				u.id as u_id,
				u.username,
				u.age,
				u.address,
				g.id as g_id,   <!--嵌套结果这种方式是使用了一次连接查询,而嵌套查询使用了两次 -->
				g.goodsName,
				g.goodsNumber,
				g.user_id
			 from
				user u
				inner join goods g on u.id = g.user_id
			 where 
				u.id =${value};
		</select>	
	</mapper>  
Salin selepas log masuk


希望可以帮到大家,有什么措辞不正确,希望得到指正,希望进步

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menulis novel dalam aplikasi Novel Percuma Tomato Kongsi tutorial cara menulis novel dalam Novel Tomato. Cara menulis novel dalam aplikasi Novel Percuma Tomato Kongsi tutorial cara menulis novel dalam Novel Tomato. Mar 28, 2024 pm 12:50 PM

Novel Tomato adalah perisian membaca novel yang sangat popular Kami sering mempunyai novel dan komik baru untuk dibaca dalam Novel Tomato Setiap novel dan komik sangat menarik ingin menulis ke dalam teks. Jadi bagaimana kita menulis novel di dalamnya? Kongsi tutorial novel Tomato tentang cara menulis novel 1. Mula-mula buka aplikasi novel percuma Tomato pada telefon bimbit anda dan klik pada Pusat Peribadi - Pusat Penulis 2. Lompat ke halaman Pembantu Penulis Tomato - klik pada Buat buku baru di penghujung novel.

Bagaimana untuk memulihkan kenalan yang dipadam pada WeChat (tutorial mudah memberitahu anda cara memulihkan kenalan yang dipadam) Bagaimana untuk memulihkan kenalan yang dipadam pada WeChat (tutorial mudah memberitahu anda cara memulihkan kenalan yang dipadam) May 01, 2024 pm 12:01 PM

Malangnya, orang sering memadamkan kenalan tertentu secara tidak sengaja atas sebab tertentu WeChat ialah perisian sosial yang digunakan secara meluas. Untuk membantu pengguna menyelesaikan masalah ini, artikel ini akan memperkenalkan cara mendapatkan semula kenalan yang dipadam dengan cara yang mudah. 1. Fahami mekanisme pemadaman kenalan WeChat Ini memberi kita kemungkinan untuk mendapatkan semula kenalan yang dipadamkan Mekanisme pemadaman kenalan dalam WeChat mengalih keluar mereka daripada buku alamat, tetapi tidak memadamkannya sepenuhnya. 2. Gunakan fungsi "Pemulihan Buku Kenalan" terbina dalam WeChat menyediakan "Pemulihan Buku Kenalan" untuk menjimatkan masa dan tenaga Pengguna boleh mendapatkan semula kenalan yang telah dipadamkan dengan cepat melalui fungsi ini. 3. Masuk ke halaman tetapan WeChat dan klik sudut kanan bawah, buka aplikasi WeChat "Saya" dan klik ikon tetapan di sudut kanan atas untuk memasuki halaman tetapan.

Bagaimana untuk menetapkan saiz fon pada telefon mudah alih (mudah melaraskan saiz fon pada telefon bimbit) Bagaimana untuk menetapkan saiz fon pada telefon mudah alih (mudah melaraskan saiz fon pada telefon bimbit) May 07, 2024 pm 03:34 PM

Menetapkan saiz fon telah menjadi keperluan pemperibadian yang penting kerana telefon mudah alih menjadi alat penting dalam kehidupan seharian manusia. Untuk memenuhi keperluan pengguna yang berbeza, artikel ini akan memperkenalkan cara meningkatkan pengalaman penggunaan telefon mudah alih dan melaraskan saiz fon telefon mudah alih melalui operasi mudah. Mengapa anda perlu melaraskan saiz fon telefon mudah alih anda - Melaraskan saiz fon boleh menjadikan teks lebih jelas dan mudah dibaca - Sesuai untuk keperluan membaca pengguna yang berbeza umur - Mudah untuk pengguna yang kurang penglihatan menggunakan saiz fon fungsi tetapan sistem telefon mudah alih - Cara memasukkan antara muka tetapan sistem - Dalam Cari dan masukkan pilihan "Paparan" dalam antara muka tetapan - cari pilihan "Saiz Fon" dan laraskan saiz fon dengan pihak ketiga aplikasi - muat turun dan pasang aplikasi yang menyokong pelarasan saiz fon - buka aplikasi dan masukkan antara muka tetapan yang berkaitan - mengikut individu

12306 Cara menyemak rekod pembelian tiket sejarah Cara menyemak rekod pembelian tiket sejarah 12306 Cara menyemak rekod pembelian tiket sejarah Cara menyemak rekod pembelian tiket sejarah Mar 28, 2024 pm 03:11 PM

Muat turun versi terbaharu aplikasi tempahan tiket 12306 Ia adalah perisian pembelian tiket perjalanan yang semua orang sangat berpuas hati dengannya -pengesahan nama untuk membeli tiket dalam talian Semua pengguna Anda boleh membeli tiket perjalanan dan tiket penerbangan dengan mudah dan menikmati diskaun yang berbeza. Anda juga boleh mula menempah tempahan terlebih dahulu untuk merebut tiket Anda boleh menempah hotel atau pemindahan kereta khas Dengan itu, anda boleh pergi ke mana-mana yang anda mahu pergi dan membeli tiket dengan satu klik lebih mudah dan memudahkan semua orang lebih selesa. Kini editor memperincikannya dalam talian Menyediakan 12306 pengguna cara untuk melihat rekod pembelian tiket sejarah. 1. Buka Keretapi 12306, klik Saya di sudut kanan bawah, dan klik Pesanan Saya 2. Klik Dibayar pada halaman pesanan. 3. Pada halaman berbayar

Rahsia penetasan telur naga mudah alih terbongkar (langkah demi langkah untuk mengajar anda cara berjaya menetas telur naga mudah alih) Rahsia penetasan telur naga mudah alih terbongkar (langkah demi langkah untuk mengajar anda cara berjaya menetas telur naga mudah alih) May 04, 2024 pm 06:01 PM

Permainan mudah alih telah menjadi sebahagian daripada kehidupan orang ramai dengan perkembangan teknologi. Ia telah menarik perhatian ramai pemain dengan imej telur naga yang comel dan proses penetasan yang menarik, dan salah satu permainan yang telah menarik perhatian ramai ialah versi mudah alih Dragon Egg. Untuk membantu pemain memupuk dan mengembangkan naga mereka sendiri dengan lebih baik dalam permainan, artikel ini akan memperkenalkan kepada anda cara menetas telur naga dalam versi mudah alih. 1. Pilih jenis telur naga yang sesuai Pemain perlu berhati-hati memilih jenis telur naga yang mereka suka dan sesuai dengan diri mereka, berdasarkan pelbagai jenis sifat dan kebolehan telur naga yang disediakan dalam permainan. 2. Tingkatkan tahap mesin pengeraman Pemain perlu meningkatkan tahap mesin pengeraman dengan menyelesaikan tugasan dan mengumpul prop Tahap mesin pengeraman menentukan kelajuan penetasan dan kadar kejayaan penetasan. 3. Kumpul sumber yang diperlukan untuk penetasan Pemain perlu berada dalam permainan

Bagaimana untuk menyemak kelayakan akademik anda di Xuexin.com Bagaimana untuk menyemak kelayakan akademik anda di Xuexin.com Mar 28, 2024 pm 04:31 PM

Bagaimana untuk menyemak kelayakan akademik saya di Xuexin.com? Anda boleh menyemak kelayakan akademik anda di Xuexin.com Ramai pengguna tidak tahu cara menyemak kelayakan akademik mereka di Xuexin.com Seterusnya, editor membawakan tutorial grafik kepada pengguna tentang cara menyemak kelayakan akademik mereka di Xuexin.com pengguna datang dan lihat! Tutorial penggunaan Xuexin.com: Cara menyemak kelayakan akademik anda di Xuexin.com 1. Pintu masuk Xuexin.com: https://www.chsi.com.cn/ 2. Pertanyaan laman web: Langkah 1: Klik pada alamat Xuexin.com di atas untuk masuk ke laman utama Klik [Education Query]; Langkah 4: Pada halaman log masuk Masukkan maklumat dan klik [Log Masuk];

Bolehkah fungsi generik dalam Go bersarang antara satu sama lain? Bolehkah fungsi generik dalam Go bersarang antara satu sama lain? Apr 16, 2024 pm 12:09 PM

Fungsi Generik Bersarang Fungsi generik dalam Go 1.18 membenarkan penciptaan fungsi yang digunakan untuk berbilang jenis dan fungsi generik bersarang boleh mencipta hierarki kod boleh guna semula: Fungsi generik boleh bersarang antara satu sama lain, mewujudkan struktur penggunaan semula kod bersarang. Dengan mengarang penapis dan fungsi pemetaan ke dalam saluran paip, anda boleh membuat saluran paip selamat jenis boleh guna semula. Fungsi generik bersarang menyediakan alat yang berkuasa untuk mencipta kod yang boleh digunakan semula, selamat jenis, menjadikan kod anda lebih cekap dan boleh diselenggara.

Perbezaan antara kaedah dan fungsi bahasa Go dan analisis senario aplikasi Perbezaan antara kaedah dan fungsi bahasa Go dan analisis senario aplikasi Apr 04, 2024 am 09:24 AM

Perbezaan antara kaedah dan fungsi bahasa Go terletak pada perkaitannya dengan struktur: kaedah dikaitkan dengan struktur dan digunakan untuk mengendalikan data struktur atau fungsi adalah bebas daripada jenis dan digunakan untuk melaksanakan operasi umum.

See all articles