В данном уроке я бы хотел показать как работать с MongoDB и что вам для этого нужно.
Как установить MongoDB вы найдете тут ‘Как установить и настроить MongoDB на Windows 7?‘.
Шаг 0
Ну первое что стоит сделать это создать новый Maven project и добавить в pom.xml зависимость:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.11.2</version> </dependency>
После этого мы можем приступать к работе с MongoDB базой.
Шаг 1
Теперь предлагаю поставить UI клиент для MongoDB, советую этот Robomongo.
После того как вы поставите клиент вам нужно создать нового пользователя в MongoDB для уже существующей БД – ‘admin’.
Для этого в cmd или терминале коннектимся в MongoDB и добавляем нового пользователя для схемы ‘admin’.
mongo.exe connect use admin db.addUser('root', 'root');
У вас должно получится следующее:
Пользователя мы создали, имя схемы в БД знаем это – admin, можно переходить к коннекту.
Шаг 2 – Подключение к MongoDB
Теперь давайте подключимся к БД.
Создаем класс WorkWithMongo.java и в конструкторе этого класса создаем подключение к БД:
// это клиент который обеспечит подключение к БД private MongoClient mongoClient; // В нашем случае, этот класс дает // возможность аутентифицироваться в MongoDB private DB db; // тут мы будем хранить состояние подключения к БД private boolean authenticate; // И класс который обеспечит возможность работать // с коллекциями / таблицами MongoDB private DBCollection table; public WorkWithMongo(Properties prop) { try { // Создаем подключение mongoClient = new MongoClient( prop.getProperty("host"), Integer.valueOf(prop.getProperty("port")) ); // Выбираем БД для дальнейшей работы db = mongoClient.getDB(prop.getProperty("dbname")); // Входим под созданным логином и паролем authenticate = db.authenticate(prop.getProperty("login"), prop.getProperty("password").toCharArray()); // Выбираем коллекцию/таблицу для дальнейшей работы table = db.getCollection(prop.getProperty("table")); } catch (UnknownHostException e) { // Если возникли проблемы при подключении сообщаем об этом System.err.println("Don't connect!"); } }
Properties prop – это параметры которые будут передаваться при создании new WorkWithMongo(props); это мы рассмотрим чуть позже.
Шаг 3 – Создадим сущность
Создадим сущность и назовем её User.java:
public class User { private String id; private String login; public User(String login) { this.login = login; } public User() { } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } @Override public String toString() { return "User{" + "id='" + id + '\'' + ", login='" + login + '\'' + '}'; } }
Шаг 4 – Записать в MongoDB
Для того чтобы добавить запись в коллекцию нам нужно создать метод add(User user) в классе WorkWithMongo:
public void add(User user){ BasicDBObject document = new BasicDBObject(); // указываем поле с объекта User // это поле будет записываться в коллекцию/таблицу document.put("login", user.getLogin()); // записываем данные в коллекцию/таблицу table.insert(document); }
Шаг 5 – Получение записи с коллекции
public User getByLogin(String login){ BasicDBObject query = new BasicDBObject(); // задаем поле и значение поля по которому будем искать query.put("login", login); // осуществляем поиск DBObject result = table.findOne(query); // Заполняем сущность полученными данными с коллекции User user = new User(); user.setLogin(String.valueOf(result.get("login"))); user.setId(String.valueOf(result.get("_id"))); // возвращаем полученного пользователя return user; }
Получать мы будем по логину пользователя.
Шаг 6 – Обновление данных
// login - это старый логин пользователя // newLogin - это новый логин который мы хотим задать public void updateByLogin(String login, String newLogin){ BasicDBObject newData = new BasicDBObject(); // задаем новый логин newData.put("login", newLogin); // указываем обновляемое поле и текущее его значение BasicDBObject searchQuery = new BasicDBObject().append("login", login); // обновляем запись table.update(searchQuery, newData); }
В данном примере мы обновляем только login, но можно обновлять любые поля коллекции таким способом.
Шаг 7 – Удаление данных
Удалять мы также будем по логину пользователя:
public void deleteByLogin(String login){ BasicDBObject query = new BasicDBObject(); // указываем какую запись будем удалять с коллекции // задав поле и его текущее значение query.put("login", login); // удаляем запись с коллекции/таблицы table.remove(query); }
Шаг 8
Теперь проверим все это дело с помощью тестов.
Для тестирования я использовал Framework TestNG информацию о нем вы можете почитать в уроке ‘Тестирование с помощью TestNG в Java‘.
Сразу покажу вам полный листинг тестового файла который называется WorkWithMongoTest.java:
import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.Properties; public class WorkWithMongoTest { WorkWithMongo mongo; @BeforeMethod public void setUp() throws Exception { Properties prop = new Properties(); prop.setProperty("host", "localhost"); prop.setProperty("port", "27017"); prop.setProperty("dbname", "admin"); prop.setProperty("login", "root"); prop.setProperty("password", "root"); prop.setProperty("table", "users"); mongo = new WorkWithMongo(prop); } @AfterMethod public void tearDown() throws Exception { mongo.close(); } @Test public void testConnection() throws Exception { boolean authenticate = mongo.isAuthenticate(); Assert.assertEquals(true, authenticate); } @Test public void testAddUser() throws Exception { mongo.add(new User("test")); } @Test public void testGet() throws Exception { User user = mongo.getByLogin("test"); System.out.println(user); } @Test public void testDelete() throws Exception { mongo.deleteByLogin("test"); } @Test public void testUpdate() throws Exception { mongo.updateByLogin("test", "DevColibri"); } }
p.s. На этом все, задавайте вопросы в комментариях если что-то не понятно или предлагайте свои способы решение.
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
7 комментариев к статье "Java MongoDB с чего начать?"