一直想学MongoDB,正好碰上项目需要,故花了一天时间去研究MongoDB,在这做个总结。
首先面对的就是下载MongoDB,首先想到的是到官网上去下载,但是官网不知道是什么原因,一点击下载就是空白页,虽然一开始还填了一些个人资料上去。
MongoDB官网下载
后面在网上找资料发现了各个版本的下载地址:
http://dl.mongodb.org/dl/linux/x86_64
http://dl.mongodb.org/dl/win32/x86_64
我下载的是mongodb-win32-x86_64-2008plus-ssl-3.6.0-rc3-69-gefea76a.zip这个版本,然后解压到本地目录,再在环境变量path中配置好D:\mongodb\bin。在“D:\Mongodb”目录下新建“data”文件夹,它将会成为数据存放的根目录。
C:\Users\LX>d:
d:\>cd d:\mongodb\bin
d:\mongodb\bin>mongod --dbpath d:\mongodb\data
然后新开cmd窗口,原有窗口勿关闭,如果窗口关闭则服务也关闭。
dos代码如下:
C:\Users\LX>d:
D:\>cd d:\mongodb\bin
d:\mongodb\bin>mongo 127.0.0.1:27017
则可看到如下效果:
C:\Users\LX>d:
D:\>cd d:\mongodb\bin
d:\mongodb\bin>mongo 127.0.0.1:27017
MongoDB shell version v3.6.0-rc3-69-gefea76a
connecting to: mongodb://127.0.0.1:27017/test
MongoDB server version: 3.6.0-rc3-69-gefea76a
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2017-11-20T15:12:36.768+0800 I CONTROL [initandlisten]
2017-11-20T15:12:36.769+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-11-20T15:12:36.769+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-11-20T15:12:36.770+0800 I CONTROL [initandlisten]
2017-11-20T15:12:36.770+0800 I CONTROL [initandlisten] ** WARNING: This server is bound to localhost.
2017-11-20T15:12:36.771+0800 I CONTROL [initandlisten] ** Remote systems will be unable to connect to this server.
2017-11-20T15:12:36.771+0800 I CONTROL [initandlisten] ** Start the server with --bind_ip to specify which IP
2017-11-20T15:12:36.772+0800 I CONTROL [initandlisten] ** addresses it should serve responses from, or with --bind_ip_all to
2017-11-20T15:12:36.773+0800 I CONTROL [initandlisten] ** bind to all interfaces. If this behavior is desired, start the
2017-11-20T15:12:36.774+0800 I CONTROL [initandlisten] ** server with --bind_ip 127.0.0.1 to disable this warning.
2017-11-20T15:12:36.774+0800 I CONTROL [initandlisten]
2017-11-20T15:12:36.775+0800 I CONTROL [initandlisten] Hotfix KB2731284 or later update is not installed, will zero-out data files.
2017-11-20T15:12:36.776+0800 I CONTROL [initandlisten]
2017-11-20T15:12:36.777+0800 I CONTROL [initandlisten] ** WARNING: The file system cache of this machine is configured to be greater than 40% of the total memory. This can lead to increased memory pressure and poor performance.
2017-11-20T15:12:36.777+0800 I CONTROL [initandlisten] See http://dochub.mongodb.org/core/wt-windows-system-file-cache
2017-11-20T15:12:36.778+0800 I CONTROL [initandlisten]
2017-11-20T15:20:39.680+0800 E - [main] Error loading history file: FileOpenFailed: Unable to fopen() file C:\Users\LX/.dbshell: 系统找不到指定的文件。
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> use admin
switched to db admin
> show collections
system.version
>
如上,则表示安装成功。
新建一个SpringBoot项目,pom文件如下:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-mongodbartifactId>
dependency>
<dependency>
<groupId>org.mongodbgroupId>
<artifactId>mongo-java-driverartifactId>
dependency>
yml配置文件添加mongodb配置如下:
spring:
data:
mongodb:
uri: mongodb://localhost:27017
database: test
综上,springBoot就算是整合好MongoDB了,为验证整合成功,特写代码如下:
User.java(引用了 lombok,具体请百度)
@Data
@AllArgsConstructor
@ToString
public class User {
@Id
private Integer id;
private String name;
private Integer age;
}
UserRepository.java
public interface UserRepository extends MongoRepository<User, String>{
User findByName(String name);
}
UserService.java
@Repository
public interface UserService {
void save(User user);
User findByName(String name);
}
UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public void save(User user) {
userRepository.save(user);
}
@Override
public User findByName(String name) {
return this.findByName(name);
}
}
Application.java
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private UserRepository repository;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... args) throws Exception {
repository.deleteAll();
repository.save(new User(1,"name1",19));
repository.save(new User(2,"name2",20));
System.out.println("User found with findAll():");
System.out.println("-------------------------------");
for (User user : repository.findAll()) {
System.out.println(user);
}
System.out.println("------------------------");
System.out.println("User found with findByName('name1'):");
System.out.println("--------------------------------");
System.out.println(repository.findByName("name1"));
}
}
测试结果如下:
Customers found with findAll():
-------------------------------
User(id=1, name=name1, age=19)
User(id=2, name=name2, age=20)
------------------------
Customer found with findByName('name1'):
--------------------------------
User(id=1, name=name1, age=19)
测试通过。