1.今天抱着一颗学习的心继续学习MyBatis,然后跟着博主学到了一对多的级联查询(通过学生查找班级)。行吧,附上代码记录一下自己的学习笔记。
这是一对多的关系查询,用到了两张表。
package com.southwind.entity;
import lombok.Data;
@Data
public class Student {
private int id;
private String name;
private Classer classer;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.southwind.entity;
import lombok.Data;
import java.util.List;
@Data
public class Classer {
private int id ;
private String name;
private List<Student> students;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.southwind.repository;
import com.southwind.entity.Student;
public interface StudentRepository {
public Student findById(int id);
}
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.southwind.repository.StudentRepository">
<select id="findById" parameterType="int" resultMap="studentMap">
select s.id,s.name,c.id as cid,c.name as cname
from student s,class c
where s.id = #{id} and s.cid = c.id
</select>
<resultMap id="studentMap" type="com.southwind.entity.Student">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<association property="classer" javaType="com.southwind.entity.Classer">
<id column="cid" property="id"></id>
<result column="cname" property="name"></result>
</association>
</resultMap>
</mapper>
package com.southwind.test;
import com.southwind.repository.StudentRepository;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class Test_3 {
public static void main(String[] args) {
InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentRepository studentRepository = sqlSession.getMapper(StudentRepository.class);
System.out.println(studentRepository.findById(1));
sqlSession.close();
}
}
<mapper resource="com/southwind/repository/StudentRepositoryMapper.xml"></mapper>
附上运行结果图:
接下来是多对一的查询:
package com.southwind.repository;
import com.southwind.entity.Classer;
public interface ClassesRepository {
public Classer findById(int id);
}
- 接下来是ClassesRepository.xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.southwind.repository.ClassesRepository">
<select id="findById" parameterType="int" resultMap="classesMap">
select s.id,s.name,c.id as cid,c.name as cname
from student s,class c
where c.id = #{id} and s.cid = c.id
</select>
<resultMap id="classesMap" type="com.southwind.entity.Classer">
<id column="cid" property="id"></id>
<result column="cname" property="name"></result>
<collection property="students" ofType="com.southwind.entity.Student">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
</collection>
</resultMap>
</mapper>
package com.southwind.test;
import com.southwind.repository.ClassesRepository;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class Test_4 {
public static void main(String[] args) {
InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
ClassesRepository classesRepository = sqlSession.getMapper(ClassesRepository.class);
System.out.println(classesRepository.findById(1));
sqlSession.close();
}
}
- 贴上运行结果:
数据还有很多操作语句,嗯,有待加强自己的SQL知识。