当前位置:网站首页>Vertx's responsive MySQL template
Vertx's responsive MySQL template
2022-07-03 07:25:00 【Sleeping Empire】
Introduce
Vertx Response type mysql client , be based on SQL Client Templates Template operation sql Script
1. maven Project dependence
<dependencies>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-config-yaml</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-mysql-client</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-sql-client-templates</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.lance.common</groupId>
<artifactId>vertx-common-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
2.YAML File configuration
server:
port: 8000
mysql:
host: 127.0.0.1
port: 3306
database: v_example
username: root
password: li123456
charset: utf8
collation: utf8_general_ci
maxSize: 30
reconnectAttempts: 3
reconnectInterval: 1000
poolName: v-pool
3. Start loading profile , And into the config In the middle
public class TemplateApplication {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
ConfigRetriever retriever = readYaml(vertx);
retriever.getConfig(json -> {
try {
JsonObject object = json.result();
DbHelper dbHelper = new DbHelper(object.getJsonObject("mysql"), vertx);
dbHelper.afterPropertiesSet();
DeploymentOptions options = new DeploymentOptions().setConfig(object);
vertx.deployVerticle(MainApp.class.getName(), options);
} catch (Exception ex) {
log.error("===> Vertx start fail: ", ex);
}
});
}
/**
* read yaml config
*
* @param vertx vertx
* @return ConfigRetriever
*/
private static ConfigRetriever readYaml(Vertx vertx) {
ConfigStoreOptions store = new ConfigStoreOptions()
.setType("file")
.setFormat("yaml")
.setOptional(true)
.setConfig(new JsonObject().put("path", "application.yaml"));
return ConfigRetriever.create(vertx, new ConfigRetrieverOptions().addStore(store));
}
}
4.Mysql Connection pool configuration
public class DbHelper {
private final JsonObject object;
private final Vertx vertx;
private static MySQLPool mySqlPool;
/**
* Get the client
*
* @return MySQLPool
*/
public static MySQLPool client() {
return mySqlPool;
}
/**
* initialization mysql Connect
*/
public void afterPropertiesSet() {
ConfigProperties.MysqlProperties properties = object.mapTo(ConfigProperties.MysqlProperties.class);
MySQLConnectOptions connectOptions = new MySQLConnectOptions()
.setPort(properties.getPort())
.setHost(properties.getHost())
.setDatabase(properties.getDatabase())
.setUser(properties.getUsername())
.setPassword(properties.getPassword())
.setReconnectAttempts(properties.getReconnectAttempts())
.setReconnectInterval(properties.getReconnectInterval())
.setCharset(properties.getCharset())
.setCollation(properties.getCollation());
PoolOptions poolOptions = new PoolOptions()
.setMaxSize(properties.getMaxSize())
.setName(properties.getPoolName())
.setShared(true);
mySqlPool = MySQLPool.pool(vertx, connectOptions, poolOptions);
}
}
5. Connection pool database sql perform
public class UserService {
/**
* find list
*/
public void list(RoutingContext ctx) {
MySQLPool pool = DbHelper.client();
SqlTemplate.forQuery(pool, select(null))
.mapTo(UserInfo.class)
.execute(null)
.onSuccess(rs -> {
List<UserInfo> list = new ArrayList<>();
rs.forEach(list::add);
ctx.json(R.data(list));
}).onFailure(e -> {
log.warn("Failure: ", e);
ctx.json(R.fail("list fail"));
});
}
/**
* find one
*/
public void detail(RoutingContext ctx) {
MySQLPool pool = DbHelper.client();
SqlTemplate.forQuery(pool, select("where user_id=#{userId}"))
.mapTo(UserInfo.class)
.execute(Collections.singletonMap("userId", ctx.pathParam("userId")))
.onSuccess(result -> {
if (result.size() > 0) {
ctx.json(R.data(result.iterator().next()));
return;
}
ctx.json(R.data(null));
}).onFailure(e -> {
log.warn("Failure: ", e);
ctx.json(R.fail("detail fail"));
});
}
/**
* add user info
*/
public void add(RoutingContext ctx) {
UserInfo user = ctx.getBodyAsJson().mapTo(UserInfo.class);
if (user == null) {
ctx.json(R.fail(" The parameter is empty. "));
return;
}
MySQLPool pool = DbHelper.client();
SqlTemplate.forUpdate(pool, "insert into t_user(username,password,age,status,create_time,update_time)value(#{username},#{password},#{age},1,now(),now())")
.mapFrom(UserInfo.class)
.execute(user)
.onSuccess(v -> ctx.json(R.success("save success")))
.onFailure(e -> {
log.warn("Failure: ", e);
ctx.json(R.fail("save fail"));
});
}
/**
* update user
*/
public void update(RoutingContext ctx) {
log.info("===>{}", ctx.getBodyAsJson());
UserInfo user = ctx.getBodyAsJson().mapTo(UserInfo.class);
if (user == null) {
ctx.json(R.fail(" The parameter is empty. "));
return;
}
MySQLPool pool = DbHelper.client();
SqlTemplate.forUpdate(pool, "update t_user set username=#{username},password=#{password},age=#{age},status=#{status},update_time=now() where user_id=#{userId}")
.mapFrom(UserInfo.class)
.execute(user)
.onSuccess(v -> ctx.json(R.success("update success")))
.onFailure(e -> {
log.warn("Failure: ", e);
ctx.json(R.fail("update fail"));
});
}
/**
* delete one
*/
public void delete(RoutingContext ctx) {
MySQLPool pool = DbHelper.client();
SqlTemplate.forUpdate(pool, "delete From t_user where user_id=#{userId}")
.execute(Collections.singletonMap("userId", ctx.pathParam("userId")))
.onSuccess(v -> ctx.json(R.success("delete success")))
.onFailure(e -> {
log.warn("Failure: ", e);
ctx.json(R.fail("delete fail"));
});
}
private String select(String where) {
String select = "SELECT user_id as userId, username,password,age,status,create_time as createTime,update_time as updateTime from t_user";
if (StringUtils.isNotBlank(where)) {
select += " " + where;
}
return select;
}
}
6. Full address of the project
边栏推荐
- Leetcode 198: 打家劫舍
- VMware network mode - bridge, host only, NAT network
- 2021-07-18
- 7.2刷题两个
- Various postures of CS without online line
- C代码生产YUV420 planar格式文件
- 4everland: the Web3 Developer Center on IPFs has deployed more than 30000 dapps!
- Interview questions about producers and consumers (important)
- gstreamer ffmpeg avdec解码数据流向分析
- Download address collection of various versions of devaexpress
猜你喜欢

Sorting, dichotomy

Hash table, generic

7.2 brush two questions

TreeMap

New stills of Lord of the rings: the ring of strength: the caster of the ring of strength appears

Basic components and intermediate components

【开发笔记】基于机智云4G转接板GC211的设备上云APP控制

TCP cumulative acknowledgement and window value update

带你全流程,全方位的了解属于测试的软件事故

你开发数据API最快多长时间?我1分钟就足够了
随机推荐
高并发内存池
Download address collection of various versions of devaexpress
Homology policy / cross domain and cross domain solutions /web security attacks CSRF and XSS
Advanced API (multithreading)
TCP cumulative acknowledgement and window value update
PgSQL converts string to double type (to_number())
Wireshark software usage
Store WordPress media content on 4everland to complete decentralized storage
gstreamer ffmpeg avdec解码数据流向分析
3311. 最长算术
IPv4 address
Book recommendation~
Advanced API (use of file class)
FileInputStream and fileoutputstream
为什么说数据服务化是下一代数据中台的方向?
Summary of Arduino serial functions related to print read
Jeecg data button permission settings
IP home online query platform
4everland: the Web3 Developer Center on IPFs has deployed more than 30000 dapps!
7.2刷题两个