LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-25

環境

  • 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;
    }
}

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1