Подключение базы данных MySql к Java приложению. Простой сайт на Java часть 3

Мы продолжаем писать простой сайт на языке 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:

Код    
  1. public class Article implements Serializable {
  2.  
  3.     private static final long serialVersionUID = 1L;
  4.     private String title;
  5.  
  6.     private String body;
  7.  
  8.     private Category category;
  9.  
  10.     private Users users;
  11.  
  12.     public Article() {
  13.     }
  14.  
  15.     public String getTitle() {
  16.         return title;
  17.     }
  18.  
  19.     public void setTitle(String title) {
  20.         this.title = title;
  21.     }
  22.  
  23.     public String getBody() {
  24.         return body;
  25.     }
  26.  
  27.     public void setBody(String body) {
  28.         this.body = body;
  29.     }
  30.  
  31.     public Category getCategory() {
  32.         return category;
  33.     }
  34.  
  35.     public void setCategory(Category category) {
  36.         this.category = category;
  37.     }
  38.  
  39.     public Users getUsers() {
  40.         return users;
  41.     }
  42.  
  43.     public void setUsers(Users users) {
  44.         this.users = users;
  45.     }
  46.  
  47.     @Override
  48.     public int hashCode() {
  49.         final int prime = 31;
  50.         int result = 1;
  51.         result = prime * result + ((body == null) ? 0 : body.hashCode());
  52.         result = prime * result + ((category == null) ? 0 : category.hashCode());
  53.         result = prime * result + ((title == null) ? 0 : title.hashCode());
  54.         result = prime * result + ((users == null) ? 0 : users.hashCode());
  55.         return result;
  56.     }
  57.     @Override
  58.     public boolean equals(Object obj) {
  59.         if (this == obj)
  60.             return true;
  61.         if (obj == null)
  62.             return false;
  63.         if (getClass() != obj.getClass())
  64.             return false;
  65.         Article other = (Article) obj;
  66.         if (body == null) {
  67.             if (other.body != null)
  68.                 return false;
  69.         } else if (!body.equals(other.body))
  70.             return false;
  71.         if (category == null) {
  72.             if (other.category != null)
  73.                 return false;
  74.         } else if (!category.equals(other.category))
  75.             return false;
  76.         if (title == null) {
  77.             if (other.title != null)
  78.                 return false;
  79.         } else if (!title.equals(other.title))
  80.             return false;
  81.         if (users == null) {
  82.             if (other.users != null)
  83.                 return false;
  84.         } else if (!users.equals(other.users))
  85.             return false;
  86.         return true;
  87.     }
  88.  
  89.     @Override
  90.     public String toString() {
  91.         return "Article [title=" + title + ", body=" + body + ", category=" + category + ", users=" + users + "]";
  92.     }
  93.  
  94.  
  95.  
  96.  
  97.    
  98. }

Как видите, ничего сложного. Обычный объект Java.

Поначалу, это может показаться сложной задачей. Не стесняйтесь подглянуть в код или видео. Все ссылки в конце статьи.

Далее нужно подключиться к базе данных. Для этого мы будем использовать mysql-connector-java. Нужно добавить его в pom.xml, а если Вы не используете мавен, но можно скачать jar файл и подключить его к своему проекту. Мы же используем maven и нам нужно только добавить зависимость в pom.xml. Вот, как он теперь выглядит:

Код    
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3.   <modelVersion>4.0.0</modelVersion>
  4.   <groupId>com.javamaster</groupId>
  5.   <artifactId>simplewebapp</artifactId>
  6.   <packaging>war</packaging>
  7.   <version>0.0.1-SNAPSHOT</version>
  8.   <name>simplewebapp Maven Webapp</name>
  9.   <url>http://maven.apache.org</url>
  10.   <dependencies>
  11.     <dependency>
  12.       <groupId>junit</groupId>
  13.       <artifactId>junit</artifactId>
  14.       <version>3.8.1</version>
  15.       <scope>test</scope>
  16.     </dependency>
  17.     <dependency>
  18.             <groupId>javax</groupId>
  19.             <artifactId>javaee-web-api</artifactId>
  20.             <version>6.0</version>
  21.             <scope>provided</scope>
  22.         </dependency>
  23. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  24.         <dependency>
  25.             <groupId>mysql</groupId>
  26.             <artifactId>mysql-connector-java</artifactId>
  27.             <version>5.1.34</version>
  28.         </dependency>
  29.  
  30.        
  31.   </dependencies>
  32.   <build>
  33.     <finalName>simplewebapp</finalName>
  34.   </build>
  35. </project>

Далее в проекте создайте пакет dao и в нем создайте класс ArticleDaoImpl. Код подключения к базе данных мы создадим в этом классе, но это временное решение. В следующей части мы вынесем его отдельно, а дао классы будут отвечать только за работу с базой.

Строка подключения имеет вид:  DriverManager.getConnection(«jdbc:mysql://хост:порт/имяБазы«, «имяПользователя«, «пароль«);

Полный код метода подключения: 

Код    
  1. private Connection getConnection(){
  2.         Connection con = null;
  3.         try {
  4.             con = DriverManager.getConnection("jdbc:mysql://localhost:3306/simpleapp", "root", "root");
  5.         System.out.println("Got our connection");
  6.         } catch (SQLException e) {
  7.             e.printStackTrace();
  8.         }
  9.         return con;
  10.     }

Наша база данных подключена к приложению. Теперь осталось реализовать методы, которые нам пригодятся в процессе работы приложения. Эту часть мы оставим для следующей статьи. В видео ниже я для примера реализовал один метод наполнения базы. Если есть желание, можете посмотреть. Если желания нет, в следующей статье все будет подробно описано.

Код на гитхаб: https://github.com/caligula95/simplewebapp-part3

Добавить комментарий