Mybatis学习笔记(三)--------xml方式多表查询(一对多)

10 篇文章 0 订阅
6 篇文章 0 订阅

注意细节:1、在编写映射文件的时候<collection > 里面类型要使用oftype

2、在涉及到多个表的时候,这个时候我们传入的参数可以为hashmap 简单方便操作。

一、目录结构

二、代码实现

2.1实体类EStudent.java 

public class EStudent implements Serializable{
	private long id;
	private String name;
    private int age;
    private	Major major;//面向对象的方式
    private int stu_id;
	  // getter,setter方法
    
	  public Major getMajor() {
		return major;
	}

	public int getStu_id() {
		return stu_id;
	}

	public void setStu_id(int stu_id) {
		this.stu_id = stu_id;
	}

	public void setMajor(Major major) {
		this.major = major;
	}

	public long getId() {
		return id;
	}

	public void setId(long 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 EStudent(){}
}

2.2实体类Major 

 

import java.io.Serializable;
import java.util.List;

public class Major implements Serializable{
	private int marjor_id;
	private String major;
	private List<EStudent> stu;
	

	public Major() {
		
	}
	
	public int getMarjor_id() {
		return marjor_id;
	}

	public void setMarjor_id(int marjor_id) {
		this.marjor_id = marjor_id;
	}




	public String getMajor() {
		return major;
	}

	public void setMajor(String major) {
		this.major = major;
	}

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

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

	

	
	
}

2.3MajorMapper 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.student.entity.majortest">
	<select id="searchStudent" resultMap="selectMajor">
		SELECT *FROM esmajor,estudent WHERE esmajor.major_id=estudent.stu_id
	</select>
	<insert id="insertStudent" parameterType="com.student.entity.Major">
		INSERT INTO esmajor(marjor_id,major)VALUES(#{marjor_id},#{major})
	</insert>
	<update id="updateStudent" parameterType="hashmap">
		UPDATE estudent SET estudent.`name`=#{name} WHERE stu_id=#{stu_id} AND #{stu_id} IN (SELECT esmajor.marjor_id FROM esmajor)
	</update>
	<resultMap id="selectMajor" type="com.student.entity.Major">
		<id column="marjor_id" property="marjor_id"/>
		<result property="major" column="major"/>
		<collection property="stu" ofType="com.student.entity.EStudent">
			<id column="id" property="id" />
			<result column="name" property="name"/>
			<result column="age" property="age"/>
			<result column="stu_id" property="stu_id"/>
		</collection>
	</resultMap>
</mapper>

2.4数据库链接ConnectionSql

import java.io.IOException;

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

public class ConnectionSql {
	static SqlSessionFactory factory;
	
	static {
		String resource="batis.xml";
		try {
			if(factory==null) {
				factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource));
				
			}
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
	public static SqlSession getSession() {
		return factory.openSession();
	}
}

2.5测试类MybatisTest2

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.student.entity.EStudent;
import com.student.entity.Major;
import com.student.jdbc.ConnectionSql;

public class MybatisTest2 {
	public static void main(String[] args) {
		SqlSession session = ConnectionSql.getSession();
		/*
		 * 多表查询
		List<Major> majorList = session.selectList("com.student.entity.majortest.searchStudent");
		for (Major major2 : majorList) {
			List<EStudent> stuList = major2.getStu();
			for (EStudent eStudent : stuList) {
				System.out.println(major2.getMajor() + eStudent.getName());
			}
		}*/
		/*
		 * 插入(后面不能使用where语句)
		 * 
		Major major = new Major();
		major.setMarjor_id(5);
		major.setMajor("嵌入式");
		int a = session.insert("com.student.entity.majortest.insertStudent",major);
		session.commit();
		System.out.println(a);
		 */
		/*
		 * update 更新语句
		 * 在涉及多张表的时候,咱们可以放弃使用对象来操作的方式,就是查询的那种方式,我们可以使用hashmap通过这个方便操作。
		 * 备注,要学会灵活使用这些操作
		 * 这里删除操作类似,我就不写了
		 */
		HashMap<String,Object> argMap = new HashMap<String,Object>();
		argMap.put("name","灰太狼");
		argMap.put("stu_id", 3);
		int a = session.update("com.student.entity.majortest.updateStudent", argMap);
		session.commit();
		System.out.println(a);
	}
}

 2.6数据库文件配置batis.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>
	
		
	<typeAliases>
        <typeAlias  type="com.student.entity.EStudent" alias="Student"/>
    </typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/db_batis?useUnicode=true&amp;characterEncoding=utf8" />
				<property name="username" value="root" />
				<property name="password" value="" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="com\student\entity\MajorMapper.xml" />
	</mappers>
</configuration>

 三、Mybatis学习笔记相关架包

https://pan.baidu.com/s/1vBUGoBrtPc2CSIyh4fWXWQ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小生不财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值