DAO层:
package com.method.userservice.service;
import com.method.userservice.entity.BaseEntity;
import com.method.userservice.util.Reflact;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.springframework.beans.factory.annotation.Autowired;
import java.lang.reflect.ParameterizedType;
public class Dao<T extends BaseEntity> {
@Autowired
private MongoDatabase mongoDatabase;
private MongoCollection mongoTemplate;
private Class<T> type;
public Dao() {
type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
public MongoCollection getDao() {
if (mongoTemplate == null)
mongoTemplate = mongoDatabase.getCollection(Reflact.getCollectionName(type));
return mongoTemplate;
}
}
MongoDB配置:
package com.method.userservice.core;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientURI;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import java.util.logging.Level;
import static java.util.logging.Logger.getLogger;
import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;
@Configuration
public class MongoConfig extends AbstractMongoConfiguration {
@Bean
public MongoClient mongoClient() {
return new MongoClient(new ServerAddress("localhost", 27017));
}
@Deprecated
@Bean
public MongoTemplate mongoTemplate() {
return new MongoTemplate(mongoClient(), "test");
}
@Bean
public GridFsTemplate gridFsTemplate() throws Exception {
return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter());
}
@Bean
public MongoDatabase mongoDatabase() {
return mongoClient().getDatabase("test");
}
@Override
protected String getDatabaseName() {
return "test";
}
}
service层:
public boolean transfer(String from, String to, Double money) {
ClientSession clientSession = mongoClient.startSession();
try {
clientSession.startTransaction();
super.getDao().updateOne(clientSession, Criteria.where("name").is(to).getCriteriaObject(), inc("balance", money));
int a = 1 / 0;
super.getDao().updateOne(clientSession, Criteria.where("name").is(from).getCriteriaObject(), inc("balance", -money));
clientSession.commitTransaction();
return true;
} catch (Exception e) {
e.printStackTrace();
clientSession.abortTransaction();
return false;
} finally {
clientSession.close();
}
}
拜了个拜~~