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

Mybatis学习笔记(二)------xml方式多表查询(多对一)编写目的 总结使用 mybatis 的相关经验和自己遇到一些 bug 以及需要注意的地方 1 在使用多对一查询时 属性使用 Javatype 2 在数据查找时 如果所查的表的主键相同时 可能出现只查出一个结构 这是 mybatis 内部处理机制 不做研究 出现这种类似问题

大家好,我是讯享网,很高兴认识大家。

编写目的:总结使用mybatis的相关经验和自己遇到一些bug以及需要注意的地方

1、在使用多对一查询时,属性使用Javatype

2、在数据查找时,如果所查的表的主键相同时,可能出现只查出一个结构,这是mybatis内部处理机制,不做研究,出现这种类似问题,只需要更该某个主键即可

一、目录结构


讯享网

二、具体实现

2.1实体类EStudent

package com.student.entity; public class EStudent { private long id; private String name; private int age; private Major major;//面向对象的方式 // getter,setter方法 public Major getMajor() { return major; } 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

讯享网public class Major { private int stu_id; private String major_name; public int getStu_id() { return stu_id; } public void setStu_id(int stu_id) { this.stu_id = stu_id; } public String getName() { return major_name; } public void setName(String name) { this.major_name = name; } } 

 2.3映射文件配置EstudentMapper

<?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.test"> <select id="getStudent" resultMap="selectStudent"> SELECT estudent.id, esmajor.major, estudent.`name`,estudent.age FROM estudent ,esmajor WHERE estudent.stu_id=esmajor.id </select> <insert id="insertStudent" parameterType="com.student.entity.EStudent"> INSERT INTO estudent(id,`name`,age,stu_id)VALUES(#{id},#{name},#{age},#{major.stu_id}); </insert> <update id="updateStudent" parameterType="hashmap"> update estudent set name=#{name},stu_id=#{stu_id} where id=#{id} </update> <delete id="deleteStudent" parameterType="com.student.entity.EStudent"> delete from estudent where estudent.id = #{id} </delete> <resultMap id="selectStudent" type="com.student.entity.EStudent"> <id property="id" column="id" /> <result property="name" column="name" /> <!-- 这里获取关联对象的数据 --> <!--使用多对一,多对多查询时,这里使用javaType--> <association property="major" javaType="com.student.entity.Major"> <id property="stu_id" column="id"/> <result property="major_name" column="major" /> </association> </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测试类MybatisTes1

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 MybatisTest1 { public static void main(String[] args) { SqlSession session = ConnectionSql.getSession(); //查找操作 List<EStudent> listStu = session.selectList("com.student.entity.test.getStudent"); for (EStudent eStudent : listStu) { System.out.println(eStudent.getName()+" "+eStudent.getMajor().getName()); } //插入操作 /* EStudent stu = new EStudent(); Major major =new Major(); major.setStu_id(3); stu.setId(2); stu.setName("范小明"); stu.setAge(20); stu.setMajor(major); int a = session.insert("com.student.entity.test.insertStudent", stu); */ /* //更新操作,这里使用是动态SQL语句,通过hashMap传递值 HashMap<String,Object> argMap = new HashMap<>(); argMap.put("id", 1); argMap.put("stu_id", 4); argMap.put("name", "汪坤"); int b = session.update("com.student.entity.test.updateStudent", argMap); */ EStudent stu = new EStudent(); Major major =new Major(); stu.setId(3); int c = session.update("com.student.entity.test.deleteStudent", stu); System.out.println(c); session.commit(); } } 

2.6数据库文件配置

讯享网<?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\EstudentMapper.xml" /> </mappers> </configuration> 

 

小讯
上一篇 2025-01-10 10:46
下一篇 2025-04-03 15:59

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/129886.html