データベーステーブルから特定の日付のデータを取得する方法について説明します。以下は、必要なMyBatisとLog4j2の設定です。
mybatis設定
web.xml で spring-mybatis.xml を参照します。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/spring-mybatis.xml</param-value>
</context-param>
spring-mybatis.xml でデータベース操作のマッピングファイルとMyBatisの設定ファイルを指定します。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.risk.model"/>
<property name="mapperLocations" value="classpath*:mybatis/*.xml"/>
<property name="configLocation" value="classpath:conf/mybatis-config.xml" />
</bean>
mybatis-config.xml でLog4j2の設定を行います。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<settings>
<setting name="logImpl" value="LOG4J2"/>
</settings>
</configuration>
日付クエリのXMLとコード
<mapper namespace="com.risk.dao.HighLimitDao">
<resultMap type="com.risk.entity.HighLimitEntity" id="hResultMap" >
<id property="index" column="index"/>
<result property="date" jdbcType="DATE" column="date" javaType="java.util.Date" />
<result property="open" column="open"/>
<result property="high" column="high"/>
<result property="low" column="low"/>
<result property="volume" column="volume"/>
</resultMap>
<select id="query" parameterType="java.util.HashMap" resultMap="hResultMap">
select *
from limit
where 1=1
<if test="date != null">
AND date=#{date}
</if>
</select>
</mapper>
対応するJava実装クラス
public class HighLimitEntity {
private Long index;
private Date date;
private String code;
private Double open;
private Double close;
private Double high;
private Double low;
}
@Repository
public class HighLimitDaoImpl implements HighLimitDao {
@Autowired
private SqlSessionFactory sqlSessionFactory;
public List<HighLimitEntity> query(Map<String, Object> params){
SqlSession sqlSession = sqlSessionFactory.openSession();
List<HighLimitEntity> entities = sqlSession.selectList("com.risk.dao.HighLimitDao.query", params);
sqlSession.close();
return entities;
}
}<br></br><br></br>Map<String, Object> params = new HashMap<String, Object>();
<em><br></br>Date currentDate = new Date();</em>
Date targetDate = null;<br></br>SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");<br></br><br></br>try {<br></br> String dateString = dateFormat.format(currentDate);<br></br> System.out.println("date:" + dateString);<br></br> targetDate = dateFormat.parse(dateString);<br></br> System.out.println("date:" + targetDate);<br></br> params.put("date", targetDate);<br></br>} catch (Exception e) {<br></br> e.printStackTrace();<br></br> return null;<br></br>}
highLimitDao.query(params)
log4j2.xml
デバッグログを追加してMyBatisのエラーを確認するためには、log4j2.xml でSQLクエリのログを定義します。これにより、クエリの過程がログに出力されます。
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="File" fileName="../logs/test.log" append="true">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
</appenders>
<loggers>
<logger name="com.risk.test" level="info" additivity="false">
<appender-ref ref="Console"/>
</logger>
<logger name="log4j.logger.java.sql.Statement" level="info" additivity="false">
<appender-ref ref="File"/>
</logger>
<Logger name="com.risk.dao" level="debug" additivity="false">
<AppenderRef ref="File"/>
</Logger>
<root level="info">
<appender-ref ref="Console"/>
<appender-ref ref="File"/>
</root>
</loggers>
</configuration>