package com.brightgenerous.datasource.mybatis.guice.mapper; import static com.brightgenerous.orm.mapper.MapperUtils.*; import java.util.Collections; import java.util.Map; import com.brightgenerous.bean.BeanUtils; import com.brightgenerous.datasource.mybatis.guice.bean.Header; import com.brightgenerous.datasource.mybatis.guice.bean.MultiKeyDetail; import com.brightgenerous.datasource.mybatis.guice.bean.SimpleKeyDetail; import com.brightgenerous.orm.mapper.MapperUtils.FieldColumn; import com.brightgenerous.orm.mapper.MapperUtils.PropertyReference; import com.brightgenerous.orm.mapper.Register; import com.brightgenerous.orm.mapper.TableDefines; public class MapperMethods extends com.brightgenerous.orm.mapper.MapperMethods { @Override protected TableDefines getDefines() { return defines; } @Override public Map<Class<?>, String> getTargetTables() { return targetTables; } private static final Map<Class<?>, String> targetTables; private static final TableDefines defines; // @formatter:off static { Register register = new Register(); { // // load(Register (Register), Bean Class (Class<?>), Table Name (String), // Alias Table Names (String[], option), // Primary Properties (Set<Entry<String[], Class<?>>>, option), // Property-Column Mappings (FieldColumn, option)); // // by load method, creates TableMapper and adds to Register. // "TableMapper" means the relationship between Bean Class and Database Table. // in other words, ORM. // "Primary Properties" means primary key mapping "Database Table Columns" to "Bean Class Properties" each. // "Property-Column" means mapping "Database Table Columns" to "Nested Bean Class Properties" each. // // here, "Database Table Columns" are build from Logical Bean Class Properties. // in brief, "Database Table Columns" are not reflected "Physical Database Table Columns". // load(register, Header.class, "t_header", BeanUtils.getPrimaryClassMap(Header.class)); load(register, MultiKeyDetail.class, "t_multi_key_detail", new FieldColumn[] { FieldColumn.create("header.headerNo", "header_no") }, BeanUtils.getPrimaryClassMap(MultiKeyDetail.class)); load(register, SimpleKeyDetail.class, "t_simple_key_detail", new FieldColumn[] { FieldColumn.create("header.headerNo", "header_no") }, BeanUtils.getPrimaryClassMap(SimpleKeyDetail.class)); } { targetTables = Collections.unmodifiableMap(register.getTargetTables()); } defines = new TableDefines(); { // // define(TableDefines (TableDefines), Table Name (String), // Property-Table Mappings (PropertyReference, option)); // // by define method, creates TatbleDefine and adds to TableDefines. // "TatbleDefine" means the relationship between "Target Table" and "Referenced Tables". // "Target Table" means table Mapped to Bean Class. // here, already loaded ORM, so it is obvious which Bean Class. // "Referenced Tables" mean tables Mapped to Properties. Bean Class has the Properties. // define(defines, register, "t_header"); define(defines, register, "t_multi_key_detail", PropertyReference.create("header", "t_header")); define(defines, register, "t_simple_key_detail", PropertyReference.create("header", "t_header")); } } // @formatter:on }