![](/img/trans.png)
[英]NullPointerException using Spring to @autowire mybatis mapper
[英]How do I create an object in MyBatis (Spring) mapper using select on a table (Spring)?
我是MyBatis和Spring的新手。 我有兩個SQL表,比方說大學列表和學生列表。
UNIVERSITY table has id, name, listOfStudents
STUDENTS table has name_ofStudent, GPA, age, major, id, universityId
我有University.java,Student.java,UniversityManager.java,StudentManager.java(兩者在其管理器中均具有crud操作)(read的參數是int id)。
如果這是我的UniversityMapper.xml(如下),如何“選擇”(按ID)大學? 我知道基本選擇的工作原理,但我的主要問題是,一旦選擇ID即可獲得大學的名稱,我也將如何獲得該學生的學生名單?
我想知道如何使用mybatis選擇與universityID匹配的學生列表,並創建一個學生對象並使它成為大學對象的一部分。
<?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="java.University">
<resultMap id="BaseResultMap" type="java.University">
<id column="ID" jdbcType="VARCHAR" property="id" />
<result column="NAME" jdbcType="VARCHAR" property="name" />
</resultMap>
<insert id="createUniversity" parameterType="java.University">
insert into DATABASE.University(ID, NAME)
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR})
</insert>
<select id="getUniversity" parameterType="int" resultMap="java.University">
(This is where I need help)
</select>
<update id="updateUniversity" parameterType="java.University">
update DATABASE.University
set ID= #{id,jdbcType=VARCHAR},
NAME= #{name,jdbcType=VARCHAR}
</update>
<delete id="deleteUniversity" parameterType="java.University">
delete from DATABASE.University
where ID= #{id,jdbcType=VARCHAR}
</delete>
</mapper>
所有這些都寫在他們提到Advanced ResultMap的部分的文檔中。
如果您的大學課程是這樣的:
public class University{
private Long id;
private String name;
private List<Student> students;
// getters, setters, etc.
}
您的學生班就像:
public class Student{
private String name_ofStudent;
private Double GPA;
private Integer age;
private String major;
private Long id;
private Long universityId;
// getters, setters, etc.
}
您可以通過以下查詢獲得大學及其學生的查詢:
<select parameterType="Long" resultMap="UniversityResultMap">
SELECT U.uni_id, U.uni_name, S.name_ofStudent, S.gpa, S.age, S.major, S.stu_id, S.stu_uni_id
FROM UNIVERSITY U
JOIN STUDENT S ON U.ID = S.UNIVERSITYID
WHERE U.ID = #{id}
</select>
然后,您可以將結果映射為:
<resultMap id="StudentResultMap" resultMap="java.Student">
<result column="NAME_OFSTUDENT" jdbcType="VARCHAR" property="name_ofStudent" />
<result column="GPA" jdbcType="DECIMAL" property="GPA" />
<result column="AGE" jdbcType="DECIMAL" property="age" />
<result column="MAJOR" jdbcType="VARCHAR" property="major" />
<result column="STU_ID" jdbcType="DECIMAL" property="id" />
<result column="STU_UNI_ID" jdbcType="DECIMAL" property="universityId" />
</resultMap>
<resultMap id="UniversityResultMap" parameterType="Long" resultMap="java.University">
<id column="UNI_ID" jdbcType="DECIMAL" property="id" />
<result column="NAME" jdbcType="VARCHAR" property="name" />
<collection property="students" ofType="java.Student" resultMap="StudentResultMap"/>
</resultMap>
如果您對類有不同的抽象概念,請告訴我們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.