Igniteにアクセスするメソッドを実装
MyBatis Dynamic SQLを使ってIgniteにアクセスするメソッドを実装します。
cf.
事前準備
- 下記SQLでIgnite上にテーブルを作成します:
CREATE TABLE IF NOT EXISTS Users (
name varchar PRIMARY KEY
, password varchar
, age int
);
実装
pom.xml
<!-- https://mvnrepository.com/artifact/org.mybatis.dynamic-sql/mybatis-dynamic-sql -->
<dependency>
<groupId>org.mybatis.dynamic-sql</groupId>
<artifactId>mybatis-dynamic-sql</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.19</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
application.properties
接続先のURLおよびドライバを指定します。
spring.datasource.url=jdbc:ignite:thin://192.168.151.10
spring.datasource.driver-class-name=org.apache.ignite.IgniteJdbcThinDriver
config/MyBatisConfig.java
package nob.example.easyapp.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* MyBatis関連のコンフィグクラスです。
*
* @author nob
*/
@Configuration
@MapperScan(basePackages = "nob.example.easyapp.domain.mapper") // mapperパッケージ配下をスキャン
public class MyBatisConfig {
@Bean
SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
return sessionFactory.getObject();
}
}
domain/entity/Users.java
package nob.example.easyapp.domain.entity;
import lombok.Value;
/**
* usersテーブルのエンティティクラスです。
*
* @author nob
*/
@Value
public class Users {
/** ユーザ名 */
private String name;
/** パスワード */
private String password;
/** 年齢 */
private Integer age;
}
domain/mapper/UsersDynamicSqlSupport.java
package nob.example.easyapp.domain.mapper;
import java.sql.JDBCType;
import org.mybatis.dynamic.sql.SqlColumn;
import org.mybatis.dynamic.sql.SqlTable;
/**
* usersテーブルのsqlSupportクラスです。
*
* @author nob
*/
public class UsersDynamicSqlSupport {
public static final Users users = new Users();
public static final SqlColumn<String> name = users.name;
public static final SqlColumn<String> password = users.password;
public static final SqlColumn<Integer> age = users.age;
public static final class Users extends SqlTable {
protected Users() {
super("Users"); // Ignite上のテーブル名
}
public final SqlColumn<String> name = column("name", JDBCType.VARCHAR);
public final SqlColumn<String> password = column("password", JDBCType.VARCHAR);
public final SqlColumn<Integer> age = column("age", JDBCType.INTEGER);
}
}
domain/mapper/UsersMapper.java
package nob.example.easyapp.domain.mapper;
import java.util.List;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.SelectProvider;
import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.mybatis.dynamic.sql.util.SqlProviderAdapter;
import nob.example.easyapp.domain.entity.Users;
/**
* usersテーブルのmapperクラスです。
*
* @author nob
*/
@Mapper
public interface UsersMapper {
/**
* データ全件検索
*
* @param selectStatement
* @return ユーザ情報リスト
*/
@SelectProvider(type = SqlProviderAdapter.class, method = "select")
List<Users> selectAll(SelectStatementProvider selectStatement);
/**
* データ登録
*
* @param insertStatement
*/
@InsertProvider(type = SqlProviderAdapter.class, method = "insert")
void insert(InsertStatementProvider<Users> insertStatement);
}
repository/UsersRepository.java
package nob.example.easyapp.repository;
import java.util.List;
import org.springframework.stereotype.Repository;
import nob.example.easyapp.domain.entity.Users;
/**
* usersテーブルのrepositoryインターフェースです。
*
* @author nob
*/
@Repository
public interface UsersRepository {
/**
* ユーザ情報を全件取得します。
*
* @return ユーザ情報リスト
*/
List<Users> selectAll();
/**
* ユーザ情報を登録します。
*
* @param users ユーザ情報
*/
void insert(Users users);
}
repository/impl/UsersRepositoryImpl.java
package nob.example.easyapp.repository.impl;
import java.util.List;
import org.mybatis.dynamic.sql.SqlBuilder;
import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
import org.mybatis.dynamic.sql.render.RenderingStrategies;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import nob.example.easyapp.domain.entity.Users;
import nob.example.easyapp.domain.mapper.UsersDynamicSqlSupport;
import nob.example.easyapp.domain.mapper.UsersMapper;
import nob.example.easyapp.repository.UsersRepository;
/**
* UsersRepositoryの実装クラスです。
*
* @author nob
*/
@Repository
public class UsersRepositoryImpl implements UsersRepository {
@Autowired
private UsersMapper usersMapper;
@Override
public List<Users> selectAll() {
SelectStatementProvider selectStatement = SqlBuilder.select(UsersDynamicSqlSupport.users.allColumns())
.from(UsersDynamicSqlSupport.users)
.build()
.render(RenderingStrategies.MYBATIS3);
return usersMapper.selectAll(selectStatement);
}
@Override
public void insert(Users users) {
InsertStatementProvider<Users> insertStatement = SqlBuilder.insert(users)
.into(UsersDynamicSqlSupport.users)
.map(UsersDynamicSqlSupport.name).toProperty("name")
.map(UsersDynamicSqlSupport.password).toProperty("password")
.map(UsersDynamicSqlSupport.age).toProperty("age")
.build()
.render(RenderingStrategies.MYBATIS3);
usersMapper.insert(insertStatement);
}
}
EasyappApplication.java
package nob.example.easyapp;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import nob.example.easyapp.domain.entity.Users;
import nob.example.easyapp.repository.UsersRepository;
@SpringBootApplication
public class EasyappApplication {
public static void main(String[] args) {
SpringApplication.run(EasyappApplication.class, args);
}
@Bean
CommandLineRunner run(UsersRepository repository) {
return args -> {
repository.insert(new Users("nob", "passwd", 13)); // データ登録
System.out.println(repository.selectAll()); // データ検索
};
}
}
動作確認
./mvnw spring-boot:runでアプリ起動後、Ignite上へのデータ登録および全件取得が実行されます。