MyBatis使用級聯(lián)操作解決lombok構(gòu)造方法識別失敗問題
先解決一下idea無法識別lombok構(gòu)造方法的問題,解決方案是在idea的插件中下載并安裝lombok插件。
MyBatis級聯(lián)操作,列舉最簡單的student-classes(學生與班級)的關(guān)系表:
create table if not exists student ( id int primary key auto_increment, name varchar(20) not null comment '學生姓名', cid int not null comment '班級id' );
create table if not exists classes ( id int primary key auto_increment, name varchar(20) not null comment '班級名' );
接下來,創(chuàng)建關(guān)系表對應(yīng)的實體類:
@Data
public class Student {
private long id;
private String name;
private Classes classes;
}
@Data
public class Classes {
private long id;
private String name;
private List<Student> students;
}
在repository包下新建StudentRepository接口:
public interface StudentRepository {
public Student findById(long id);
}
然后創(chuàng)建對應(yīng)的mapper文件StudentRepository.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.wts.repository.StudentRepository">
<resultMap id="studentMap" type="com.wts.entity.Student">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<association property="classes" javaType="com.wts.entity.Classes">
<id column="cid" property="id"></id>
<result column="cname" property="name"></result>
</association>
</resultMap>
<select id="findById" parameterType="long" resultMap="studentMap">
select s.id,s.name,c.id as cid,c.name as cname from student s,classes c where s.id = #{id} and s.cid = c.id
</select>
</mapper>
注意這里有幾個限制:
1.命名空間,xml文件的namespace必須是對應(yīng)接口的全類名
2.Statement標簽的id必須與接口方法相同,其中parameterType為參數(shù),resultType為返回類型,復(fù)雜類型用resultMap
3.復(fù)雜類型resultMap中多對一用association,一堆多用集合collection
MyBatis執(zhí)行sql返回的結(jié)果集會和關(guān)系對象映射起來,注意列與字段的對應(yīng)關(guān)系。
然后將mapper引入:
<mappers> <mapper resource="com/wts/repository/StudentRepository.xml"></mapper> </mappers>
編寫測試方法:
@Test
public void test03() {
InputStream inputStream = AppTest.class.getClassLoader().getResourceAsStream("config.xml");
SqlSessionFactory sqlSessionFactory = (new SqlSessionFactoryBuilder()).build(inputStream);
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
// 級聯(lián)查詢
StudentRepository studentRepository = sqlSession.getMapper(StudentRepository.class);
System.out.println(studentRepository.findById(1L));
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Data Jpa 復(fù)合主鍵的實現(xiàn)
這篇文章主要介紹了Spring Data Jpa 復(fù)合主鍵的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04
IDEA快速搭建spring?boot項目教程(Spring?initializr)
這篇文章主要介紹了IDEA快速搭建spring?boot項目教程(Spring?initializr),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
SpringBoot常用讀取配置文件的3種方法小結(jié)
本文主要介紹了SpringBoot常用讀取配置文件的3種方法小結(jié),主要包括@Value讀取配置文件,@ConfigurationProperties 讀取配置文件和讀取配置文件中的List,具有一定的參考價值,感興趣的可以了解一下2023-10-10

