mybatis使用注解实现一对多查询
因为此博文和前几篇博文是同一时间写的,所以是在前面几篇博文的代码基础上写的,代码看着一样。
主要的功能是:
一个老师可以对应多个学生,那么我们查询一个老师的信息,也可以看到那多个学生的信息。
项目结构如下:
实习类和mybatis-fig.xml在前一篇博文中粘贴了,这里就不复制了
实体类 Teacher:
在实体类中有一个List 里面用来存放学生信息。
package hym.bean;
import java.util.List;
public class Teacher {
private int id;
private String name;
private List<student> students;
public List<student> getStudents() {
return students;
}
public void setStudents(List<student> students) {
this.students = 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;
}
@Override
public String toString() {
return "Teacher{" +
"id=" + id +
", name='" + name + '\'' +
", students=" + students +
'}';
}
}
mapper
StudentMapper
package hym.mapper;
import hym.bean.student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
public interface StudentMapper {
//普通的CRUD操作,可以忽略
@Select("select * from student")
List<student> SeletALL();
@Delete("delete from student where id = #{id}")
int DeleteStudent(int id);
@Insert("insert into student values(#{id},#{name},#{age},#{score},#{tid})")
int InsertStudent(student student);
@Update("update student set score = #{score} where id = #{id}")
int UpdateStudent(student student);
//根据老师的ID来查询学生信息。老师的id 学生的实体类属性是tid.
@Select("select * from student where tid = #{tid}")
student SelectByTid(int tid);
}
TeacherMapper
待会着重来讲一下这块。
package hym.mapper;
import hym.bean.Teacher;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface TeacherMapper {
//数据库中设计 一位老师有多名学生,现在通过老师id来查询出信息,同时包含学生信息
@Results(value = {
@Result(id = true,property = "id",column = "id"),
@Result(property = "name" ,column = "name"),
@Result(property = "students", column = "id" ,many = @Many(select = "hym.mapper.StudentMapper.SelectByTid"))
})
@Select("select * from teacher")
List<Teacher> SelectTeacher();
}
主函数
package hym;
import hym.bean.Teacher;
import hym.bean.student;
import hym.mapper.StudentMapper;
import hym.mapper.TeacherMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class main {
public static void main(String[] args) {
InputStream inputStream = null;
SqlSessionFactory sqlSessionFactory = null;
try {
inputStream = Resources.getResourceAsStream("mybatis-cfg.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
SqlSession sqlSession = sqlSessionFactory.openSession();
//使用xml文件方法
/*List<Teacher> objects = sqlSession.selectList("com.hym.SelectTeacherAll");
for(Teacher s : objects){
System.out.println(s.toString());
}*/
//StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
//查询全部
/*List<student> students = studentMapper.SeletALL();
for (student s : students){
System.out.println(s.toString());
}*/
//增加学生
/*student student = new student(8,"小勇",23,67,1);
int i = studentMapper.InsertStudent(student);
System.out.println(i);*/
//删除学生
/*int i = studentMapper.DeleteStudent(8);
System.out.println(i);*/
//修改学生信息,此处修改学生分数
/* student student = new student();
student.setId(1);
student.setScore(100);
int i = studentMapper.UpdateStudent(student);
System.out.println(i);
sqlSession.commit();*/
//一对多联合查询
TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);
List<Teacher> teachers = teacherMapper.SelectTeacher();
for (Teacher t : teachers){
System.out.println(t.toString());
}
sqlSession.close();
}
}