Spring3+Spring-data-mongodb1.5.6示例
来源:互联网 发布:iphone软件下载 编辑:程序博客网 时间:2024/06/05 23:44
A: maven2 pom.xml
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.5.6.RELEASE</version> </dependency> <!-- bean validate--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.3.2.Final</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>el-impl</artifactId> <version>2.2</version> </dependency>
说明:
1 . 为什么Spring-data-mongodb的版本是1.5.6?
这个版本对应的Spring-data版本是1.4.6,对应的Spring-framework版本是3.2.14,大于此版本需要spring-framework 4,从这个地址可以知道:
Spring-data-parent.pom
2. 为什么还需要hibernate-validator?
缺少这个依赖会抛以下异常:
Caused by: javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath. at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:271) at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:191) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1573) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1511)
B: spring的配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd"> <!-- 加载配置属性文件 --> <util:properties id="propertyConfigurer" location="classpath:spring-data-mongo.properties" /> <context:property-placeholder ignore-unresolvable="true" properties-ref="propertyConfigurer" /> <context:annotation-config /> <!-- spring data --> <mongo:mongo host="${mongo.host}" port="${mongo.port}" /> <mongo:db-factory dbname="${mongo.database}" mongo-ref="mongo" /> <!-- set the mapping converter to be used by the MongoTemplate --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> <bean class="org.springframework.data.mongodb.core.mapping.event.LoggingEventListener" /> <bean id="forumMemberOnlineService" class="net.htage.lab.cache.mongo.ForumMemberOnlineMongo"> <property name="mongoTemplate" ref="mongoTemplate" /> </bean></beans>
C: 实体和实现类
import java.io.Serializable;import org.springframework.data.annotation.Id;import org.springframework.data.mongodb.core.mapping.Document;import org.springframework.data.mongodb.core.index.Indexed;import org.springframework.data.mongodb.core.mapping.Field;/** * * @author xiaofanku@live.cn * @since 20170908 */@Document(collection = "apo_forum_online")public class ForumMemberOnline implements Serializable{ @Id private String ID; @Indexed @Field private int memberId=0; @Indexed @Field private int uid=0; @Indexed @Field private String sessionId; @Field private String nickname="guest"; //GET/SET}
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.data.mongodb.core.FindAndModifyOptions;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.query.Criteria;import org.springframework.data.mongodb.core.query.Query;import org.springframework.data.mongodb.core.query.Update;/** * * @author xiaofanku@live.cn * @since 20170908 */public class ForumMemberOnlineMongo implements ForumMemberOnlineService{ private static final Logger logger=LoggerFactory.getLogger(ForumMemberOnlineMongo.class); private MongoTemplate mongoTemplate; @Override public ForumMemberOnline save(ForumMemberOnline entity) { try{ logger.error("[OLD]session:"+entity.getSessionId()); mongoTemplate.insert(entity); logger.error("[OLD]id:"+entity.getID()); return entity; }catch(Exception e){ throw new NullPointerException(); } } //ETC}
说明:
1. mongoTemplate.insert方法会返回@Id注解的属性
2. 无法对实体作注解,可以使用转换器
实体
/** * * @author xiaofanku@live.cn * @since 20170908 */public class ForumMemberOnline implements Serializable{ private Long ID; private int memberId=0; private int uid=0; private String sessionId; private String nickname="guest"; //GET/SET}
转换器
/** * * mongodb 出库时使用 * @author xiaofanku@live.cn * @since 20170908 */public class ForumMemberOnlineReadConverter implements Converter<BasicDBObject, ForumMemberOnline>{ private static final Logger logger=LoggerFactory.getLogger(ForumMemberOnlineReadConverter.class); @Override public ForumMemberOnline convert(BasicDBObject doc) { logger.error("converting read start"); ForumMemberOnline fmo=new ForumMemberOnline(); fmo.setID(doc.getLong("_id")); fmo.setMemberId(doc.getInt("memberId")); fmo.setUid(doc.getInt("uid")); fmo.setSessionId(doc.getString("sessionId")); fmo.setNickname(doc.getString("nickname")); return fmo; }}
/** * mongodb 入库时转换 * @author xiaofanku@live.cn * @since 20170908 */public class ForumMemberOnlineWriteConverter implements Converter<ForumMemberOnline, DBObject>{ private static final Logger logger=LoggerFactory.getLogger(ForumMemberOnlineWriteConverter.class); @Override public DBObject convert(ForumMemberOnline fmo) { logger.error("converting write start"); DBObject dbo = new BasicDBObject(); if(fmo.getID()>0){ dbo.put("_id", fmo.getID()); } dbo.put("memberId", fmo.getMemberId()); dbo.put("uid", fmo.getUid()); dbo.put("sessionId", fmo.getSessionId()); dbo.put("nickname", fmo.getNickname()); return dbo; }}
Spring 配置中增加
<mongo:mapping-converter> <mongo:custom-converters> <mongo:converter> <bean class="package.ForumMemberOnlineReadConverter "/> </mongo:converter> <mongo:converter> <bean class="package.ForumMemberOnlineWriteConverter "/> </mongo:converter> </mongo:custom-converters> </mongo:mapping-converter> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> <constructor-arg name="mongoConverter" ref="mappingConverter"/> </bean>
附注:需要自已解决ID的生成, mongodb的实现参考:Spring Data MongoDB – Auto Sequence ID example
mongodb生成的_id是一个数字和字母混合的字符序列, 也可以使用java来解决
D: 最后
[1]. 文档参考地址: Spring Data MongoDB - Reference Documentation
[2]. 在线API: Spring Data MongoDB 1.5.6.RELEASE API
[3]. 完整的pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>net.htage</groupId> <artifactId>lab</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>lab</name> <properties> <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--spring framework--> <spring-framework.version>3.2.14.RELEASE</spring-framework.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> <version>1.3</version> <scope>test</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.5.6.RELEASE</version> </dependency> <!-- java unit test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring-framework.version}</version> <scope>test</scope> </dependency> <!-- Logging with SLF4J & Log4J --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.12</version> </dependency> <!-- bean validate--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.3.2.Final</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>el-impl</artifactId> <version>2.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> <compilerArguments> <endorseddirs>${endorsed.dir}</endorseddirs> </compilerArguments> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.6</version> <executions> <execution> <phase>validate</phase> <goals> <goal>copy</goal> </goals> <configuration> <outputDirectory>${endorsed.dir}</outputDirectory> <silent>true</silent> <artifactItems> <artifactItem> <groupId>javax</groupId> <artifactId>javaee-endorsed-api</artifactId> <version>7.0</version> <type>jar</type> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build></project>
完整的示例下载地址:Baidu网盘
[4]. 同时使用JPA(不是Spring-data-jpa)+Spring-data-mongodb无法同时工作
正常DEBUG:
DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class class net.htage.lab.entity.ForumMemberOnline for index information.
不能工作的DEBUG:
DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class class org.eclipse.persistence.tools.schemaframework.ForeignKeyConstraint for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class class org.eclipse.persistence.tools.schemaframework.IndexDefinition for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class class org.eclipse.persistence.internal.helper.DatabaseTable for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class class org.eclipse.persistence.internal.helper.DatabaseField for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class class org.eclipse.persistence.mappings.AttributeAccessor for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class class org.eclipse.persistence.mappings.DatabaseMapping for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class class org.eclipse.persistence.mappings.querykeys.QueryKey for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class interface org.eclipse.persistence.sessions.changesets.UnitOfWorkChangeSet for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class interface org.eclipse.persistence.sessions.changesets.ObjectChangeSet for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class interface org.eclipse.persistence.sessions.changesets.ChangeRecord for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class class org.eclipse.persistence.internal.sessions.ChangeRecord for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class interface org.eclipse.persistence.exceptions.ExceptionHandler for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class class org.eclipse.persistence.exceptions.IntegrityChecker for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class class org.eclipse.persistence.sequencing.Sequence for index information.DEBUG [org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator] - Analyzing class interface org.eclipse.persistence.mappings.converters.Converter for index information.
阅读全文
0 0
- Spring3+Spring-data-mongodb1.5.6示例
- Spring-data-mongodb1.8.2 连接 MongoDB3.0 副本集
- Spring-Data-Jpa Crud示例
- spring-data-mongodb使用示例
- 基于spring3和mongodb3的spring-data-mongodb框架集成
- Spring3.0_构建Spring开发环境的小示例
- Spring Data MongoDB hello world 示例
- Spring-data-redis配置及使用示例
- Spring-Data-Mongodb数据库连接代码示例
- spring data jpa 分页配置 及简单示例
- Spring Boot示例 - 2. 使用Spring Boot + Spring Data REST + Spring Data JPA构建符合HATEOAS规范的REST应用
- spring3学习入门示例工程
- m2eclipse+spring3 hello world示例
- Spring3.x--Spring消息
- spring3 ApplicationContext bean spring
- 【Spring3】(1)初识Spring
- Spring 概述--spring3
- Spring3 升级Spring 4
- Js获取css样式小结(只是获取样式,不是设置样式)
- bootstrap中模态框上弹出另外一个模态框
- 微信扫码关注公众号,公众号发放红包。一
- 经典Servlet+JSP+JavaBean开发模式(MVC)原理与创建工程
- VMware虚拟机文件夹中各文件作用详解
- Spring3+Spring-data-mongodb1.5.6示例
- 数据库存储过程
- 【LeetCode算法练习(C语言)】Median of Two Sorted Arrays
- GAN论文整理
- ubuntu设置开机启动程序
- 论文记录-Deep Compression:Compressing DeepNeural Networks With Pruning, Trained Quantization And Huffman
- Slf4j (一) HelloWorld示例
- 抓取数据为json文件,读入csv
- 基于Redis的简单分布式锁的原理