1. Continue aprendendo o MyBatis hoje mesmo e siga o blogueiro para aprender consultas em cascata um-para-muitos (encontre turmas pelos alunos) Vamos, anexe o código para gravar suas anotações de estudo.
Primeiro anexe a estrutura do arquivo:
Novas tabelas foram adicionadas ao banco de dados:
Esta é uma consulta de relacionamento um para muitos, usando duas tabelas.
O próximo passo é definir os dados da tabela no banco de dados correspondente!
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;
}
}
Em seguida é a classe Classer:
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;
}
}
Crie uma interface StudentRepository
package com. southwind. repository;
import com. southwind. entity. Student;
public interface StudentRepository {
public Student findById ( int id) ;
}
Crie um arquivo XML para operar:
<?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>
Em seguida, crie uma classe de teste:
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 ( ) ;
}
}
Não se esqueça de registrar o arquivo XML
< mapper resource = " com/southwind/repository/StudentRepositoryMapper.xml" > </ mapper>
Anexe o gráfico de resultados em execução:
A seguir, uma consulta muitos-para-um:
A primeira é a interface ClassesRepository:
package com. southwind. repository;
import com. southwind. entity. Classer;
public interface ClassesRepository {
public Classer findById ( int id) ;
}
A seguir, está o arquivo 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>
Então a classe de teste Test_4:
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 ( ) ;
}
}
Cole o resultado em execução:
Os dados também têm muitas instruções de operação, bem, ele precisa fortalecer seu conhecimento sobre SQL.