私はこれが直接あなたがプロパティファイルまたはYMLについて尋ねるどのように対処していませんが、私はプロジェクト内のSQL文を管理するための最良の方法について尋ねると、一般的にあなたの質問を解釈知っています。非常に多くのSQLコードを持つプロジェクトで作業していたので、私はMyBatisがあまりにも多くの苦情を犯さずに済むことに気付きました。簡単に言えば、外部化SQLから外部XMLファイルへの外部処理は既に処理されており、より多くのSQLを蓄積する際に、ファイル内のsqlの管理性を良好なレベルに保つことができます。
設定するには、基本的にBeanを設定し、2つのmybatis xmlファイルを作成し、リポジトリ用のJavaインターフェイスを作成する必要があります。
public class User {
private Long id;
private String name;
...
}
public interface UserRepository {
List<User> findAll();
User findById(@Param("id") Long userId);
}
@Paramは、SQL
META-INF /レポ/ SQLで#{ID}の式に 'ID' 値をマッピングします:あなたの例を取ると、ここでは、ユーザリポジトリのMyBatisのです/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.bushcoder.so.app.user.UserRepository">
<resultMap id="user" type="com.bushcoder.so.app.user.User">
<id property="id" column="userId"/>
<result property="name" column="name"/>
</resultMap>
<select id="findAll" resultMap="user">
SELECT id, name FROM user
</select>
<select id="findById" parameterType="long" resultMap="user">
SELECT id, name FROM user WHERE id = #{id}
</select>
</mapper>
注:#
META-INF /レポ/ SQL/SQLMAP-config.xmlがuserRepository.findByIdへの呼び出しを介して渡された値を供給される{ID}。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//www.mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<mappers>
<mapper resource="META-INF/repo/sql/userMapper.xml"/>
</mappers>
</configuration>
「META-INF/repo/sql/sqlmap-config.xml」パスは、Java設定でmybatisに必要なBeanを設定するために使用されます。したがって、設定には4つのBean、つまりsqlSessionFactory、sqlSessionTemplate、dataSource、およびuserRepositoryが必要です。これらはSpringの処理クラスのどこかにある必要があります。私のプロトタイププロジェクトで
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource());
sqlSessionFactory.setConfigLocation(new ClassPathResource("META-INF/repo/sql/sqlmap-config.xml"));
return sqlSessionFactory.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate() throws Exception {
return new SqlSessionTemplate(sqlSessionFactory());
}
@Bean
public DataSource dataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase db = builder
.setType(EmbeddedDatabaseType.H2)
.addScript("META-INF/repo/db/ddl/create-database-script.sql")
.addScript("META-INF/repo/db/dml/database-seeder-script.sql")
.build();
return db;
}
@Bean
public UserRepository userRepository() throws Exception {
return sqlSessionTemplate().getMapper(UserRepository.class);
}
私はH2データベースに行って、スキーマとシードデータの世話をするためにEmbeddedDatabaseBuilderを使用しています。
META-INF /レポ/ DB/DDL /作成、データベースscript.sql:
CREATE TABLE if NOT EXISTS user (
id INTEGER PRIMARY KEY,
name VARCHAR(30)
);
META-INF /レポ/ DB/DML /データベースシーダー-script.sql:
INSERT INTO user (id, name) VALUES (1, 'BOB');
INSERT INTO user (id, name) VALUES (2, 'LARRY');
INSERT INTO user (id, name) VALUES (3, 'FRANK');
INSERT INTO user (id, name) VALUES (4, 'CHARLIE');
INSERT INTO user (id, name) VALUES (5, 'GARRY');
あなたはおそらく、リポジトリをサービスに結び付けます。あなたはより多くのSQLを蓄積し始めると、あなたは新しいリポジトリのインターフェース、そのマッチングマッパーファイルを作成し、今
@SpringBootApplication
@Import (AppConfig.class)
public class MybatisConfigExampleApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(MybatisConfigExampleApplication.class, args);
final UserService users = (UserService) context.getBean("userServiceImpl");
final List<User> allUsers = users.findAll();
System.out.println("allUsers = " + allUsers);
final User userById_5 = users.findById(5L);
System.out.println("userById_5 = " + userById_5);
}
}
:呼び出し元のコードは、このようなことができ
public interface UserService {
List<User> findAll();
User findById(Long userId);
}
@Service
public class UserServiceImpl implements UserService {
@Inject
private UserRepository userRepository;
@Override
public List<User> findAll() {
return userRepository.findAll();
}
@Override
public User findById(Long userId) {
return userRepository.findById(userId);
}
}
:このようになります。新しい<mapper>
要素を追加してsqlmap-config xmlファイルを使用してマッパーxmlファイルをリンクし、新しいリポジトリをSpringのconfigにBeanとして追加します。さらに、userMapper.xmlが大きすぎて厄介になり始めた場合、小さなファイルに分解してUserRepositoryインターフェイスを保持することができます。
あなたはこのために良い解決策を見つけましたか? – andre3wap
@ andre3wap Nope。まだありません – ashishjmeshram
私は同じことをしたいです。良い解決策を見つけましたか? – Thirumal