Mybatis多对一的处理
多个学生对应一个老师
对于学生来说:关联一个老师 对象
1.建表:
注意两张表之间的主外键的关系
2.测试环境的搭建
- 导包
- mybatis核心配置文件
- mybatis工具类
- 实体类
- dao层接口
- mapper配置文件
- 测试
3.导包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>mybatisA</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>mybatis1</module>
<module>mybatis2</module>
<module>mybatis3</module>
<module>mybatis4</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
4.mybatis核心配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/momo/dao/UserMapper.xml"/>
</mappers>
</configuration>
5.实体类
package com.momo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
private int tid;
private String name;
}
package com.momo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private int sid;
private String name;
private int age;
private String sex;
private Date birthday;
// 作为学生来讲,要关联一个老师。
private Teacher teacher;
}
6.dao层接口的编写
package com.momo.dao;
import com.momo.entity.Student;
import java.util.List;
public interface UserMapper {
//查询所有
public List<Student> findByAllStudent1();
}
7.mapper文件的编写
<?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.momo.dao.UserMapper">
<!-- 按照结果嵌套查询-->
<select id="findByAllStudent1" resultMap="s_t">
select s.sid,s.name,s.age,s.sex,s.birthday,t.tid,t.name from teacher t,student s where t.tid = s.tid;
</select>
<resultMap id="s_t" type="com.momo.entity.Student">
<id property="sid" column="sid"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="sex" column="sex"/>
<result property="birthday" column="birthday"/>
<association property="teacher" javaType="com.momo.entity.Teacher">
<id property="tid" column="tid"/>
<result property="name" column="name"/>
</association>
</resultMap>
<!-- 根据查询嵌套查询-->
<select id="findByAllStudent1" resultMap="s_t">
select * from student;
</select>
<resultMap id="s_t" type="com.momo.entity.Student">
<id property="sid" column="sid"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="sex" column="sex"/>
<result property="birthday" column="birthday"/>
<association property="teacher" column="tid" javaType="com.momo.entity.Teacher" select="findTeacher"/>
</resultMap>
<select id="findTeacher" resultType="com.momo.entity.Teacher" parameterType="int">
select * from teacher where tid = #{tid};
</select>
</mapper>
8.在mybatis核心配置文件中记得绑定mapper配置文件
9.测试
package com.momo.test;
import com.momo.dao.UserMapper;
import com.momo.entity.Student;
import com.momo.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import java.util.List;
public class Test {
private SqlSession sqlSession;
private UserMapper userMapper;
@Before
public void init(){
sqlSession = MybatisUtils.getSqlSession();
userMapper = sqlSession.getMapper(UserMapper.class);
}
@After
public void close(){
sqlSession.close();
}
@org.junit.Test
public void testFindByAllStudent1(){
List<Student> list = userMapper.findByAllStudent1();
list.forEach(System.out::println);
}
}
注意:
- mybatis核心配置文件中一定要绑定mapper配置文件
- mapper配置文件中mapper中一定要加命名空间namespace
- 复杂属性在mapper中配置文件对象要用association
- 复杂属性在mapper中配置文件集合要用collection
- 注意属性名与字段名的问题