MyBatis をデータベース操作に使用する場合、デバッグや最適化のために生成された SQL ステートメントを表示したい場合があります。この記事では、構成と具体的なコード例を通じて、MyBatis でこれを実現する方法を紹介します。 SQL ステートメントを表示します。
MyBatis で SQL ステートメントを表示するには、まずいくつかの設定を行う必要があります。次の設定を MyBatis 設定ファイル mybatis-config.xml
に追加します。
<configuration> <settings> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings> </configuration>
この設定は、MyBatis が SQL ステートメントを実行するときに、ログ出力として STDOUT_LOGGING を使用するように MyBatis に指示します。対応する SQL ステートメントを出力します。
User
テーブルUser
に対応するエンティティ クラスがあると仮定して、単純なマッパー ファイルを作成しましょうUserMapper.xml
:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.mapper.UserMapper"> <select id="selectUserById" resultType="com.example.model.User"> SELECT * FROM user WHERE id = #{id} </select> </mapper>
次に、このマッパー ファイルを使用し、生成された SQL ステートメントを表示する Java コードを記述します。 UserService
クラスがあるとします:
package com.example.service; import com.example.model.User; import com.example.mapper.UserMapper; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class UserService { private static final Logger logger = LogManager.getLogger(UserService.class); private SqlSessionFactory sqlSessionFactory; public UserService(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } public User getUserById(int id) { try (SqlSession sqlSession = sqlSessionFactory.openSession()) { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.selectUserById(id); logger.info(sqlSession.getConfiguration().getMappedStatement("com.example.mapper.UserMapper.selectUserById").getBoundSql(user).getSql()); return user; } } }
最後に、getUserById# を呼び出して、生成された SQL ステートメントを表示できます。 ## メソッド SQL ステートメント。たとえば、
main メソッドでは:
public static void main(String[] args) { String resource = "mybatis-config.xml"; try (InputStream inputStream = Resources.getResourceAsStream(resource)) { SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); UserService userService = new UserService(sqlSessionFactory); User user = userService.getUserById(1); // 这里将会输出生成的SQL语句 } catch (IOException e) { e.printStackTrace(); } }
以上がMyBatis で SQL ステートメントを表示する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。