一、Lombok
使用步骤:
-
安装Lombok插件
-
在POJO上加注解
- @Getter and @Setter
- @FieldNameConstants
- @ToString
- @EqualsAndHashCode
- @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
- @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
- @Data:无参构造器、get/set方法、equals、hashcode、toString、canEqual方法
- @Builder
- @SuperBuilder
- @Singular
- @Delegate
- @Value
- @Accessors
- @Wither
- @With
- @SneakyThrows
- @val
- @var
- experimental @var
- @UtilityClassß
package com.ola.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * ClassName:Author Package:com.ola.pojo * * @author morningj * @date 2021/1/10 15:50 */ @Data @AllArgsConstructor @NoArgsConstructor public class Author { private String AuthorID; private String Name; }
二、多对一处理(联表查询)
-
关联使用association
-
集合使用collection
-
按照查询嵌套处理(子查询)
package com.ola.dao;
import com.ola.pojo.Student;
import java.util.List;
/**
* ClassName:StudentMapper Package:ola.dao
*
* @author morningj
* @date 2021/1/12 12:31
*/
public interface StudentMapper {
public List<Student> getStudents();
}
<?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.ola.dao.StudentMapper">
<select id="getStudents" resultMap="StudentAndTeacher">
select *
from mybatis.student
</select>
<resultMap id="StudentAndTeacher" type="Student">
<association property="teacher" column="tid" javaType="Teacher" select="getTeacherById"/>
</resultMap>
<select id="getTeacherById" resultType="Teacher">
select *
from mybatis.teacher
where id = #{id};
</select>
</mapper>
@org.junit.Test
public void getStudents() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> students = mapper.getStudents();
for (Student student : students) {
System.out.println(student);
}
sqlSession.close();
}
- 按照结果嵌套处理
public List<Student> getStudent();
<select id="getStudent" resultMap="StudentTeacher">
select s.id sid, s.name sname, t.name tname
from mybatis.student s,
mybatis.teacher t
where s.tid = t.id;
</select>
<resultMap id="StudentTeacher" type="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<association property="teacher" javaType="Teacher">
<result property="name" column="tname"/>
</association>
</resultMap>
@org.junit.Test
public void getStudent() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> students = mapper.getStudent();
for (Student student : students) {
System.out.println(student);
}
sqlSession.close();
}
三、一对多处理(联表查询)
-
关联使用association
-
集合使用collection
-
按照结果嵌套处理
package com.ola.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* ClassName:Teacher Package:ola.pojo
*
* @author morningj
* @date 2021/1/12 12:29
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
private int id;
private String name;
private List<Student> students;
}
package com.ola.dao;
import com.ola.pojo.Teacher;
import org.apache.ibatis.annotations.Param;
/**
* ClassName:TeacherMapper Package:ola.dao
*
* @author morningj
* @date 2021/1/12 12:31
*/
public interface TeacherMapper {
Teacher getTeacher(@Param("tid") 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.ola.dao.TeacherMapper">
<select id="getTeacher" resultMap="TeacherStudent">
select s.id sid, s.name sname, t.name tname, t.id tid
from mybatis.student s,
mybatis.teacher t
where s.tid = t.id
and t.id = #{tid}
</select>
<resultMap id="TeacherStudent" type="Teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<!--因为POJO中Teacher类的students属性返回值是List,所以这里的collection中的返回Type要用ofType!-->
<collection property="students" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
</mapper>
package com.ola.dao;
import com.ola.pojo.Teacher;
import com.ola.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
/**
* ClassName:MyTest Package:com.ola.dao
*
* @author morningj
* @date 2021/1/12 14:33
*/
public class MyTest {
@Test
public void getTeacher() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = mapper.getTeacher(1);
System.out.println(teacher);
sqlSession.close();
}
}
- 按照查询嵌套处理(子查询)
Teacher getTeachers(@Param("tid") int id);
<!-- 按照查询嵌套处理 -->
<select id="getTeachers" resultMap="TeacherAndStudent">
select *
from mybatis.teacher
where id = #{tid}
</select>
<resultMap id="TeacherAndStudent" type="Teacher">
<collection property="students" javaType="ArrayList"
ofType="Student" select="getStudentByTeacherId" column="id"/>
</resultMap>
<select id="getStudentByTeacherId" resultType="Student">
select *
from mybatis.student
where tid = #{tid}
</select>
@Test
public void getTeachers() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teachers = mapper.getTeachers(1);
System.out.println(teachers);
sqlSession.close();
}