cassandra入门(三):便捷的@Accessor注解
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.mapping.Result;
import com.datastax.driver.mapping.annotations.Accessor;
import com.datastax.driver.mapping.annotations.Param;
import com.datastax.driver.mapping.annotations.Query;
import com.google.common.util.concurrent.ListenableFuture;
import com.zoo.Address;
@Accessor
public interface UserAccessor {
@Query("SELECT * FROM complex.users WHERE id = ?")
User getOnePosition(UUID userId);
@Query("SELECT * FROM complex.users")
Result User getAll();
@Query("SELECT * FROM complex.users")
ListenableFuture Result User getAllAsync();
@Query("insert into complex.users(id, name, addresses) values (:id, :name, :addresses)")
ResultSet insertUser(@Param("id") UUID id, @Param("name") String name,
@Param("addresses") Map String, Address addresses);
@Query("UPDATE complex.users SET name= :name WHERE id= :id")
ResultSet updateName(@Param("id") UUID id, @Param("name") String name);
@Query("UPDATE complex.users SET addresses[:name]=:address WHERE id= :id")
ResultSet updateAddress(@Param("id") UUID id, @Param("name") String addressName,
@Param("address") Address address);
@Query("DELETE FROM complex.users WHERE id = ?")
ResultSet deleteOne(UUID userId);
}
import java.util.UUID;
import com.datastax.driver.mapping.annotations.Column;
import com.datastax.driver.mapping.annotations.Frozen;
import com.datastax.driver.mapping.annotations.Table;
import com.zoo.Address;
import com.zoo.BaseEntity;
@Table(keyspace = "complex", name = "users")
public class User extends BaseEntity {
private UUID id;
private String name;
@Column(name = "addresses")
@Frozen("map text,frozen address ")
private Map String, Address address;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map String, Address getAddress() {
return address;
}
public void setAddress(Map String, Address address) {
this.address = address;
}
}
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Host;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.Session;
import com.datastax.driver.mapping.MappingManager;
import com.datastax.driver.mapping.Result;
import com.google.common.util.concurrent.ListenableFuture;
import com.zoo.Address;
import com.zoo.Phone;
/**
*
* @author yankai913@gmail.com
* @date 2015-11-4
*
*/
public class AccessorClient {
private Cluster cluster;
private Session session;
// 放一个公共userId
private UUID userId = UUID.fromString("fbdf82ed-0063-4796-9c7c-a3d4f47b4b25");
public Session getSession() {
return this.session;
}
/**
* 连接集群,创建执行cql的session对象。
*
* @param node
*/
public void connect(String node) {
cluster = Cluster.builder().addContactPoint(node).build();
Metadata metadata = cluster.getMetadata();
System.out.printf("Connected to cluster: %s\n", metadata.getClusterName());
for (Host host : metadata.getAllHosts()) {
System.out.printf("Datacenter: %s; Host: %s; Rack: %s\n", host.getDatacenter(),
host.getAddress(), host.getRack());
}
session = cluster.connect();
System.out.println();
}
public void insert() {
MappingManager manager = new MappingManager(getSession());
UserAccessor userAccessor = manager.createAccessor(UserAccessor.class);
Map String, Address addresses = new HashMap String, Address
Address address = new Address();
address.setCity("Honolulu");
address.setStreet("123 Arnold Drive");
address.setZipCode(95476);
List Phone phones = new ArrayList Phone
Phone phone1 = new Phone("job1", "10086");
Phone phone2 = new Phone("job2", "10000");
phones.add(phone1);
phones.add(phone2);
address.setPhones(phones);
addresses.put("Work", address);
userAccessor.insertUser(userId, "tom", addresses);
}
public void select() {
// getAll
MappingManager manager = new MappingManager(getSession());
UserAccessor userAccessor = manager.createAccessor(UserAccessor.class);
Result User users = userAccessor.getAll();
for (User user : users) {
System.out.println("getAll:" + user);
}
// getOne
User user = userAccessor.getOnePosition(userId);
System.out.println("getOne:" + user);
// getAllAsync
ListenableFuture Result User future = userAccessor.getAllAsync();
try {
for (User _user : future.get()) {
System.out.println("getAsync:" + _user);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
public void update() {
MappingManager manager = new MappingManager(getSession());
UserAccessor userAccessor = manager.createAccessor(UserAccessor.class);
userAccessor.updateName(userId, "jack");
}
public void update2() {
MappingManager manager = new MappingManager(getSession());
UserAccessor userAccessor = manager.createAccessor(UserAccessor.class);
Address address = new Address();
List Phone phones = new ArrayList Phone
Phone phone2 = new Phone("job2", "10010");
phones.add(phone2);
address.setPhones(phones);
userAccessor.updateAddress(userId, "Work", address);
}
public void delete() {
MappingManager manager = new MappingManager(getSession());
UserAccessor userAccessor = manager.createAccessor(UserAccessor.class);
userAccessor.deleteOne(userId);
}
public void dropSchema() {
session.execute("DROP KEYSPACE complex;");
}
public void close() {
session.close();
cluster.close();
}
public static void main(String[] args) {
AccessorClient client = new AccessorClient();
try {
client.connect("127.0.0.1");
client.select();
client.insert();
client.select();
client.update();
client.select();
client.update2();
client.select();
client.delete();
client.select();
client.dropSchema();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
client.close();
}
}
}
Connected to cluster: Test Cluster
Datacenter: datacenter1; Host: /127.0.0.1; Rack: rack1
getOne:null
getOne:{“address”:{“Work”:{“city”:”Honolulu”,”phones”:[{"alias":"job1","number":"10086"},{"alias":"job2","number":"10000"}],”street”:”123 Arnold Drive”,”zipCode”:95476}},”id”:”fbdf82ed-0063-4796-9c7c-a3d4f47b4b25″,”name”:”tom”}
getOne:{“address”:{“Work”:{“city”:”Honolulu”,”phones”:[{"alias":"job1","number":"10086"},{"alias":"job2","number":"10000"}],”street”:”123 Arnold Drive”,”zipCode”:95476}},”id”:”fbdf82ed-0063-4796-9c7c-a3d4f47b4b25″,”name”:”jack”}
getOne:{“address”:{“Work”:{“phones”:[{"alias":"job2","number":"10010"}],”zipCode”:0}},”id”:”fbdf82ed-0063-4796-9c7c-a3d4f47b4b25″,”name”:”jack”}
getOne:null
ElasticSearch 学习笔记(四)-----ES在SpringBoot中的集成以及项目应用开发指南 接上一篇ElasticSearch 学习笔记(三)-----ES的设计原理以及分词器说明。今天我们主要介绍ES 与SpringBoot 的集成以及项目应用开发指南。
SpringCloud微服务实战——搭建企业级开发框架(二十八):扩展MybatisPlus插件DataPermissionInterceptor实现数据权限控制 一套完整的系统权限需要支持功能权限和数据权限,前面介绍了系统通过RBAC的权限模型来实现功能的权限控制,这里我们来介绍,通过扩展Mybatis-Plus的插件DataPermissionInterceptor实现数据权限控制。 简单介绍一下,所谓功能权限,顾名思义是指用户在系统中拥有对哪些功能操作的权限控制,而数据权限是指用户在系统中能够访问哪些数据的权限控制,数据权限又分为行级数据权限和列级数据权限。
SpringCloud微服务实战——搭建企业级开发框架(五):数据库持久化集成MySql+Druid+MyBatis-Plus 在引入相关数据库持久化相关依赖库之前,我们可以考虑到,当我们因业务开发需要,引入各种各样的依赖库时,Jar包冲突是我们必须面对的一个问题,Spring为了解决这些Jar包的冲突,推出了各种bom,最著名的就是Spring IO Platform bom,其中最核心的三个是:spring-framework-bom、spring-boot-dependencies、platform-bom。我们这里参考Spring管理Jar包的方式,新建一个GitEgg-Platform平台工程,提供各种第三方组件的配置及自定义方法,使用子工程gitegg-platform-bom统一管理GitEgg自定义方法
MyBatis基础搭建及架构概述(上) MyBatis是第一个支持自定义SQL、存储过程和高级映射的类持久框架。MyBatis消除了大部分JDBC的样板代码、手动设置参数以及检索结果。MyBatis能够支持简单的XML和注解配置规则。使Map接口和POJO类映射到数据库字段和记录。 下面我们通过一个简单的项目搭建来带你认识一下MyBatis的使用和一些核心组件的讲解。
MyBatis基础搭建及架构概述(下) MyBatis是第一个支持自定义SQL、存储过程和高级映射的类持久框架。MyBatis消除了大部分JDBC的样板代码、手动设置参数以及检索结果。MyBatis能够支持简单的XML和注解配置规则。使Map接口和POJO类映射到数据库字段和记录。 下面我们通过一个简单的项目搭建来带你认识一下MyBatis的使用和一些核心组件的讲解。
相关文章
- 深入理解Java:注解(Annotation)自定义注解入门
- Java_myBatis入门写法
- 1scrapy框架使用-入门,创建项目,生成爬虫,编写爬虫,使用pipeline,使用log,
- CSS入门、速成(已经学过HTML)
- Leetcode学习计划之动态规划入门day20(322,518)
- golang goroutine协程概念及入门:轻量级线程(或用户态线程)
- Kindeditor在线HTML富文本编辑器使用入门
- 微搭低代码从入门到精通08-轮播容器
- NodeJs——(13)用连接池来控制mysql(入门版)
- Docker入门学习及其安装
- y44.第三章 Kubernetes从入门到精通 -- k8s 资源对象(十七)
- 3D游戏从入门到精通-17
- python web py入门(68)- jQuery - 按钮事件的响应顺序
- 【递归算法】递归算法的快速入门
- Linux基础入门到精通之CentOS镜像下载