MyBatis:SELECT結果を詰めるクラスに、デフォルトコンストラクタがなくてもOK

環境

  • Java8
  • Spring Boot 1.5.9
  • mybatis-spring-boot-starter: 1.3.1
    • mybatis: 3.4.5
  • MyBatis
  • Postgres9.6

やりたいこと

lessonテーブルの内容をSELECT文で取得したいです。

create_table.sql
CREATE TABLE public.lesson
(
  student_id integer NOT NULL DEFAULT nextval('lesson_student_id_seq'::regclass),
  lesson_name text NOT NULL,
  CONSTRAINT lesson_pkey PRIMARY KEY (student_id, lesson_name)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.lesson
  OWNER TO postgres;
SqlMapper.xml
    <select id="selectLesson" resultType="com.example.demo2.mybatis.domain.Lesson">
        SELECT
          student_id AS studentId
          ,lesson_name AS lessonName
        FROM lesson
    </select>
Lesson.java
@Data //lombok annotation
public class Lesson {

    private int studentId;

    private String lessonName;

}
StudentDao.java
@Component
public class StudentDao {
    @Autowired
    public SqlSession sqlSession;

    public List<Lesson> selectLessonList() {
        return sqlSession.selectList("selectLesson");
    }
}

StudentDaoクラスのselectLessonListメソッドを呼び出せば、lessonテーブルの中身を取得できます。

やりたいことは実現できました。。。

SELECT結果を詰めるクラスについて

SELECT結果を詰めるLessonクラスですが、以下のようにデフォルトコンストラクタがなくても、問題ありません。

Lesson.java
@Data //lombok annotation
public class Lesson {

    private int studentId;

    private String lessonName;

    public Lesson(int studentId, String lessonName) {
        this.studentId = studentId;
        this.lessonName = lessonName;
    }
}

デフォルトコンストラクタが必ず必要だと勘違いしていたので、メモとして残しておきます。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.