MyBatisによる日付クエリとLog4j2の設定

データベーステーブルから特定の日付のデータを取得する方法について説明します。以下は、必要なMyBatisとLog4j2の設定です。

mybatis設定

web.xmlspring-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>

タグ: MyBatis log4j2 Java Spring SQL

7月30日 05:13 投稿