Мы продолжаем писать простой сайт на языке Java и сегодня настало время подключить базу данных к нашему веб приложению. Подключать мы будем MySql базу данных, но схема будет работать для любой другой реляционной базы. Мы будем использовать jdbc драйвер для подключения. Он очень прост и понятен в обращении.
Хотя реальное приложение Вы скорее всего не будете подключать к базе данных через jdbc драйвер – этот пример даст Вам понимание как работать с базой данных.
Для начала откроем наше приложение в том виде, в котором мы его оставили с предыдущей статьи. Напомню, что мы подключили статические ресурсы и добавили внешний вид. Хочу сразу уточнить, что так приложение писать не нужно. Я имею ввиду такую последовательность. База данных – это основа всего приложения. С ее проектирования и нужно начинать. Я начал именно с ней, но выложил статьи в разной последовательности. О внешнем виде нужно думать в последнюю очередь.
Тематикой нашего сайта будет простой блог. Как я уже сказал выше, у меня уже есть готовая схема базы данных.
Она очень примитивна и проста. Ее цель показать, как работать с такими вещами.
К стати говоря, создал эту схему я в MySql Workbench – это бесплатное приложение, в котором можно проектировать базу данных, а потом експортировать все это в код. В конце статьи есть подробное видео, где все это проделывается. Поэтому на это мы не будем тратить время.
В нашей базе есть четыре таблицы. Теперь наша задача создать в нашей программе четыре java класса, которые будут отвечать за отображение этих таблиц. Мы по сути дела создаем сущности, которые представляют собой объектное представление данных из базы данных.
Я намерено опускаю такие термины как EJB, JPA, Entity POJO, хотя мы используем или будем из использовать. Например классы-сущности, которые мы создадим для представления БД – это Entity. Дело в том, что на просторах Интернета есть очень много ресурсов, где все это четко излагается, но очень мало ресурсов, которые действительно показывают: как создать веб приложение с нуля и до запуска в сети Интернет. Я лично, когда начинал изучать веб для джава находил только отдельный статьи, в которых показывались отдельные части веб приложений. В нашей теме, если Вы будете идти от начало и до конца, то сможете написать самое простое, но полноценное приложение на Java, а уже когда начнете изучать все далее, эта практика поможет Вам изучать технологии и фреймворки легче.
Теперь к практике. Создайте в своем приложении новый пакет entity. Должна получиться такая структура:
Теперь в новом пакете нужно создать четыре класса: Article, Category, Role, Users имплементировать интерфейс Serializable для успешной передачи по сети. В видео ниже я использую Netbeans и его стандартные инструменты для генерации этих классов из базы данных. Но все же, я советую для начинающих сделать это вручную, чтобы Вы понимали где откуда берется. В каждом созданном классе нужно создать приватные поля, которые соответствуют названиям из базы данных. Для доступа к полям нужно создать геттеры и сеттеры. Для сравнения объекта нужно создать методы equals hashCode их можно с генерировать в еклипсе. Не плохо было бы добавить метод toString. Приведу пример на Article.
Вот, как выглядит наша таблица article в базе данных. Как видим у нее есть идентификатор id, поля title, body, которые будут хранить соответственно заголовок статьи и текст статьи. Есть поля category_id, users_id, которые будут хранить информацию о категории и пользователи соответственно. Эти поля – идентификаторы из таблиц category и users. Так нам и нужно построить класс Article:
private static final long serialVersionUID = 1L;
private String title;
private String body;
private Category category;
private Users users;
public Article() {
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public Users getUsers() {
return users;
}
public void setUsers(Users users) {
this.users = users;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((body == null) ? 0 : body.hashCode());
result = prime * result + ((category == null) ? 0 : category.hashCode());
result = prime * result + ((title == null) ? 0 : title.hashCode());
result = prime * result + ((users == null) ? 0 : users.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Article other = (Article) obj;
if (body == null) {
if (other.body != null)
return false;
} else if (!body.equals(other.body))
return false;
if (category == null) {
if (other.category != null)
return false;
} else if (!category.equals(other.category))
return false;
if (title == null) {
if (other.title != null)
return false;
} else if (!title.equals(other.title))
return false;
if (users == null) {
if (other.users != null)
return false;
} else if (!users.equals(other.users))
return false;
return true;
}
@Override
public String toString() {
return "Article [title=" + title + ", body=" + body + ", category=" + category + ", users=" + users + "]";
}
}
Как видите, ничего сложного. Обычный объект Java.
Поначалу, это может показаться сложной задачей. Не стесняйтесь подглянуть в код или видео. Все ссылки в конце статьи.
Далее нужно подключиться к базе данных. Для этого мы будем использовать mysql-connector-java. Нужно добавить его в pom.xml, а если Вы не используете мавен, но можно скачать jar файл и подключить его к своему проекту. Мы же используем maven и нам нужно только добавить зависимость в pom.xml. Вот, как он теперь выглядит:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.javamaster</groupId>
<artifactId>simplewebapp</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>simplewebapp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
</dependencies>
<build>
<finalName>simplewebapp</finalName>
</build>
</project>
Далее в проекте создайте пакет dao и в нем создайте класс ArticleDaoImpl. Код подключения к базе данных мы создадим в этом классе, но это временное решение. В следующей части мы вынесем его отдельно, а дао классы будут отвечать только за работу с базой.
Строка подключения имеет вид: DriverManager.getConnection(“jdbc:mysql://хост:порт/имяБазы“, “имяПользователя“, “пароль“);
Полный код метода подключения:
Connection con = null;
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/simpleapp", "root", "root");
System.out.println("Got our connection");
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
Наша база данных подключена к приложению. Теперь осталось реализовать методы, которые нам пригодятся в процессе работы приложения. Эту часть мы оставим для следующей статьи. В видео ниже я для примера реализовал один метод наполнения базы. Если есть желание, можете посмотреть. Если желания нет, в следующей статье все будет подробно описано.
Код на гитхаб: https://github.com/caligula95/simplewebapp-part3
Поделитесь плиз ссылкой на продолжение )
Скорее всего ее нет( Я наверное не дописал…