Bootã®O/Rãããã¼ã«MyBatisã使ãããã
DBã¢ã¯ã»ã¹å±¤ã«ä½ã使ããã£ã¦ãæ¬å½ã«ãã話é¡ã«ãªãã¾ãããã
ãããã§ééããªãã§ãããã£ã¦ããéæ¿ã®é¸æè¢ããªããããã ã¨æãããã§ãã
ãSQLãæ¸ãããæ¥æ¬äººããªåã¨ãã¦ã¯ãæ¶å»æ³çã«MyBatisã使ã£ã¦ãã¾ãã
æ¶å»æ³ã£ã¦è¨ãããã«ã¯ãæ¶ãã鏿è¢ãããããã§ã
Hibernate : ã¢ã¤ãã³ãã©ã¤ã¯ ãã¤ããã¼ããµã³
JPA : ã¢ã¤ãã³ãã©ã¤ã¯ ãã¤ããã¼ããµã³
Doma : ã¢ã¤ãã³ãã©ã¤ã¯ APT
S2JDBC : ãã£ããã ã¦ã¼ãº ã¦ã£ãº ã¹ããªã³ã°
DBflute : å°ãæåãéããã§ãã
Mirage : éçºæ¢ã¾ã£ã¡ãã£ããã
ãã³ãã¯Mirageãããã大好ç©ã§ãéå»ã«å®æ¡ä»¶ã«æå
¥ããæã«ã¯
ã¾ã£ããåé¡ãèµ·ããªãã¦ç´ æ´ãããã£ãã®ã§ãã
éçºãæ¢ã¾ã£ã¦ãããã¨ã¨ãå®ç¸¾çãªã¢ã¬ã§ãªããªã使ãã«ãããã§ãã
ãããªããã§æ¶å»æ³çã«æ®ã£ãMyBatisã使ããã
Spring Boot + MyBatisã®è¨å®ããã¾ããã
ã¨ããã§ããã¼ãã«ã®ã«ã©ã åã¯ã¹ãã¼ã¯ã±ã¼ã¹ãJavaã®Entityã¯ãã£ã¡ã«ã±ã¼ã¹ã
ã¨ããçµã¿åããã§ä½¿ããã¨ã¯ãã¨ã¦ããããããã¨ã ã¨æãã¾ããã
MyBatisã§ãããè¡ãããã«ã¯ãè¨å®ãã¡ã¤ã«ãæ¸ãå¿
è¦ãããã¾ãã
ï¼ãããã¯Configurationã¯ã©ã¹ã使ãï¼
ã¾ããJava8ã§ä½¿ããããã«ãªã£ãLocalDateã¯ã©ã¹ãå©ç¨ããå ´åã
TypeHandlerã¨è¨å®ãã¡ã¤ã«ãæ¸ãå¿
è¦ãããã¾ãã
ãã®è¾ºããçãè¾¼ãã ã®ãã以ä¸ã«ãªãã¾ãã
src/main/java/é©å½ãªããã±ã¼ã¸/MyBatisConfig.java
import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration @MapperScan("package.names.to.persistence") // Mapper層ã®ããã±ã¼ã¸åãæå® public class DataConfig { @Bean public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setTypeAliasesPackage(Entity.class.getPackage().getName()); sessionFactory.setConfigLocation(new ClassPathResource("/mybatis-config.xml")); return sessionFactory; } }
ãã®ããã«ãmybatis-config.xmlãèªã¿è¾¼ãããã«è¨å®ãå ¥ãã¾ããã
è¨å®ãã¡ã¤ã«ã¯ããããªæãã«ãªãã¾ãã
src/main/resources/mybatis-config.xml
<?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="mapUnderscoreToCamelCase" value="true"/> </settings> <typeHandlers> <typeHandler handler="xxx.LocalDateTypeHandler"/> </typeHandlers> </configuration>
ã¹ãã¼ã¯ã±ã¼ã¹ãããã£ã¡ã«ã±ã¼ã¹ã¸ã®å¤æã¨
LocalDateã使ãããã®åãã³ãã©ã®å®ç¾©ãæ¸ãã¦ãã¾ãã
åãã³ãã©ã®å®è£
ã¯ããããªæãã§ãã
src/main/java/xxx/LocalDateTypeHandler.java
package xxx; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedTypes; import java.sql.CallableStatement; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.time.LocalDate; @MappedTypes(LocalDate.class) public class LocalDateTypeHandler extends BaseTypeHandler<LocalDate> { @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, LocalDate localDate, JdbcType jdbcType) throws SQLException { preparedStatement.setDate(i, Date.valueOf(localDate)); } @Override public LocalDate getNullableResult(ResultSet resultSet, String s) throws SQLException { Date date = resultSet.getDate(s); if (date == null) { return null; } return date.toLocalDate(); } @Override public LocalDate getNullableResult(ResultSet resultSet, int i) throws SQLException { return resultSet.getDate(i).toLocalDate(); } @Override public LocalDate getNullableResult(CallableStatement callableStatement, int i) throws SQLException { return callableStatement.getDate(i).toLocalDate(); } }
ãããªæãã§è¨å®ãããã°ããã¨ã¯ä¸ã®ä¸ã«ãããµã³ãã«éãã«
Mapperã¯ã©ã¹ãä½ããdomainã¯ã©ã¹ãä½ããSQLãæ¸ããXMLãã¡ã¤ã«ãä½ãã°åãã¾ãã
ãã IDEããJUnitãåãããå¾ã«ãmvn spring-boot:runã§èµ·åãããã
éã«ãmvn spring-boot:runãã¦èµ·åï¼åæ¢ããå¾ã«ãJUnitãå®è¡ããããããã¨
ãªããè¨å®ãã¡ã¤ã«ãè¦ã¤ãããç¡éã«ã¼ãã«ãªã£ã¦ãã¾ããªã©ãå¾®å¦ã«ãã®ã¼ãªæåããã¾ãã
ãã¨ãMyBatisã®Configurationã¯ã©ã¹ã¨ãSpringã®Configurationã¢ããã¼ã·ã§ã³ã¯
ååã被ã£ã¦ãã¾ã£ã¦ããããMyBatisã®Configurationã¯ã©ã¹ã使ãã«ããã¨ãã
ã©ãããSpring Boot + MyBatisã®çµã¿åããã¯ãããªãã¦ãªãå°è±¡ãããã¾ãã
ããå°ããã¼ã¸ã§ã³ãä¸ããã°ãè¯ãæãã«ãªã£ã¦ããã®ããªï¼