Цель этого учебника - использовать отдельный слой, написанный на Java для доступа к таблицам в базе данных. Этот слой обычно называют слоем доступа к данным (DAL)
Самым большим преимуществом использования DAL является то, что он упрощает операцию доступа базы данных, непосредственно используя некоторые методы, такие как insert () и find (), а не всегда сначала выполняя ссылки, а затем выполняя некоторые запросы.
Этот слой обрабатывает все вызовы и запросы, связанные с базой данных, и запросы.
Создайте базу данных
Мы хотим создать простую таблицу для пользователя, мы можем использовать эти поля для создания
id int
Имя Varchar (200)
пароль varchar (200)
возраст инт
Объект передачи данных
Этот слой должен содержать простой класс, называемый объектом передачи данных (DTO). Этот класс является просто простой картой, соответствующей таблице в базе данных, и каждый столбец в таблице соответствует переменной элемента класса.
Наша цель состоит в том, чтобы использовать простые объекты Java, а не обработку операторов SQL и других команд, связанных с базой данных для добавления, удаления, изменения и проверки базы данных.
Если мы хотим составить таблицу в код Java, нам просто нужно создать класс (фасоль), содержащий одинаковые поля.
Чтобы лучше инкапсулировать, в дополнение к конструкторам, мы должны объявить все переменные поля частными, создавать аксессов (Getters и Setters), одним из которых является конструктор по умолчанию.
Пользователь открытого класса {Private Integer ID; Приватное название строки; частный проход строки; частный целый возраст;}Чтобы правильно отобразить поля, мы должны рассмотреть значение нулевого значения в базе данных. Для исходных значений Java по умолчанию, таких как тип Int, его значение по умолчанию составляет 0, поэтому мы должны предоставить новый тип данных, который может вместить нулевые значения. Мы можем заменить int, используя класс специального типа - инкапсуляцию, такой как Integer.
Наконец наш класс должен выглядеть так:
Пользователь открытого класса {Private Integer ID; Приватное название строки; частный проход строки; частный целый возраст; public user () {} public user (string name, string pass, integer age) {this.name = name; this.pass = pass; this.age = возраст; } public user (INTEGER ID, String Name, String Pass, Integer Age) {this.id = id; this.name = name; this.pass = pass; this.age = возраст; } public integer getage () {return Age; } public void setage (целый возраст) {this.age = age; } public integer getId () {return id; } public void setId (Integer id) {this.id = id; } public String getName () {return name; } public void setName (string name) {this.name = name; } public String getPass () {return Pass; } public void setPass (String Pass) {this.Pass = pass; }}Хорошей практикой является предоставление пустого конструктора по умолчанию, полный конструктор и полный конструктор без параметров идентификатора.
Подключиться к базе данных
Мы можем использовать промежуточный класс для облегчения соединения с базой данных. В этом классе мы предоставим параметры подключения к базе данных, такие как база данных JDBC, URL -адрес, имя пользователя и пароль, и определим эти переменные как окончательные (лучше получить эти данные из свойств или файлов конфигурации XML)
Предоставляет метод для возврата объекта соединения или возврата NULL, когда подключение к удалению или выбросьте исключение времени выполнения.
Общественная статическая конечная строка url = "jdbc: mysql: // localhost: 3306/testdb"; public Static Final String user = "testuser"; public Static Final String Pass = "testPass";/*** Получить объект соединения* @Return Connection Object*/public static connecte getConnection () {try {Drivermanger.registerdriver (new Driver ();); return Drivermanager.getConnection (URL, пользователь, Pass); } catch (sqlexception ex) {бросить новое runtimeexception («Ошибка подключения к базе данных», Ex); }}Мы также можем включить основной метод в классе для проверки соединения. Полный класс выглядит так:
Import com.mysql.jdbc.driver; импорт java.sql.connection; import java.sql.drivermanager; import java.sql.sqlexception;/** * Подключиться к базе данных * @author hany.sad */public contanity wation {public Static final String url = "Jdbc: mysql://///class wepalt {public static url =" jdbc://////class wepalt url url = " Public Static Final String user = "testuser"; public static final String pass = "testpass"; / ** * Получить соединение с базой данных * @return Connection объект */ public Static Connection getConnection () {try {DriverManager.RegisterDriver (new Driver ()); return Drivermanager.getConnection (URL, пользователь, Pass); } catch (sqlexception ex) {бросить новое runtimeexception («Ошибка подключения к базе данных», Ex); }} / ** * Тестовое соединение * / public static void main (string [] args) {connection connection = connectionFactory.getConnection (); }}Объект доступа данных
Слой DAO может выполнять операции CRUD. Он может добавлять, удалять, изменять и проверять наши таблицы.
Наш интерфейс слоя DAO должен выглядеть так:
public interface userdao {user getUser (); Установить <user> getallusers (); Пользователь getUserbyusernameandpassword (); логический вставщик (); Boolean UpdateUser (); Boolean deleteUser ();}Найти пользователей
Пользователи могут запросить любые уникальные поля, такие как идентификатор, имя или электронная почта. В этом примере мы используем идентификатор, чтобы найти пользователя. Первый шаг - создать соединение через класс Connector, а затем выполнить оператор SELECT, чтобы получить пользователя с его идентификатором 7. Мы можем использовать этот оператор для запроса пользователя:
Выберите * из пользователя, где id = 7
Именно здесь мы делаем динамический оператор, чтобы получить идентификатор из параметров.
Выполнив этот запрос, получен набор результатов, где сохраняется пользователь или NULL. Мы можем использовать следующий () метод результатов, чтобы определить, есть ли значение. Если верно возвращается, мы будем продолжать использовать данные GetTers для получения пользовательских данных из результатов. Когда мы инкапсулируем все данные в пользователя, мы возвращаем их. Если пользователь с этим идентификатором не существует или происходит какого -либо другого исключения (например, неверный оператор SQL), этот метод вернет NULL.
public user getUser (int id) {connection connection = connectionFactory.getConnection (); try {ratement stmt = connection.createStatement (); Resultset rs = stmt.executequery ("select * из пользователя, где id =" + id); if (rs.next ()) {user user = new user (); user.setid (rs.getint ("id")); user.setName (rs.getString ("name")); user.setpass (rs.getstring ("pass")); user.setage (rs.getint ("age")); вернуть пользователь; }} catch (sqlexception ex) {ex.printstacktrace (); } return null;}Будет удобнее использовать отдельный метод для извлечения данных из набора результатов, потому что во многих методах мы будем называть его.
Этот новый метод вызовет SQLEXCEPTION и ради ограничений, он должен быть частным:
Частный пользователь ExtractUserFromResultset (ResultSet RS) Throws SQLexception {user user = new user (); user.setid (rs.getint ("id")); user.setName (rs.getString ("name")); user.setpass (rs.getstring ("pass")); user.setage (rs.getint ("age")); вернуть пользователь;}Наш метод выше должен быть изменен в новый метод:
public user getUser (int id) {connection connection = connectionFactory.getConnection (); try {ratement stmt = connection.createStatement (); Resultset rs = stmt.executequery ("select * из пользователя, где id =" + id); if (rs.next ()) {return extractuserfromresultset (rs); }} catch (sqlexception ex) {ex.printstacktrace (); } return null;}Метод входа в систему
Операция входа в систему аналогична. Мы хотим предоставить альтернативные идентификаторы пользователей и пароля, которые не повлияют на список параметров и операторы запроса. Если имя пользователя и пароль верны, этот метод возвращает действительного пользователя, в противном случае NULL. Поскольку существует много параметров, использование подготовленного предприятия будет более полезным.
Общедоступный пользователь getUserByuserNameAndPassword (String User, String Pass) {Connector Connector = new Connector (); Connection Connection = connector.getConnection (); Попробуйте {подготовку ps = connection.prepareStatement ("select * из пользователя, где пользователь =? и Pass =?"); Ps.setString (1, пользователь); Ps.SetString (2, Pass); ResultSet rs = ps.executequery (); if (rs.next ()) {return extractuserfromresultset (rs); }} catch (sqlexception ex) {ex.printstacktrace (); } return null;}Как запросить всех пользователей
Этот метод вернет всех пользователей, поэтому мы должны вернуть их в массивоподобном контейнере. Но потому что мы не знаем, сколько записей. Было бы лучше использовать коллекцию, такую как набор или список:
public set getallusers () {connector connector = new Connector (); Connection Connection = connector.getConnection (); try {ratement stmt = connection.createStatement (); Resultset rs = stmt.executequery ("select * из пользователя"); Установить пользователи = new hashset (); while (rs.next ()) {user user = ExtractUserFromResultSet (RS); users.add (пользователь); } вернуть пользователи; } catch (sqlexception ex) {ex.printstacktrace (); } return null;}Вставить метод
Метод вставки примет пользователя в качестве параметра и использует объект подготовленного Statatement для выполнения оператора обновления SQL. Метод executeUpdate возвращает количество затронутых строк. Если мы добавим одну строку, это означает, что метод должен вернуть 1, если это так, мы возвращаем true, в противном случае мы возвращаем ложь
public boolean insertuser (пользователь пользователя) {connector connector = new Connector (); Connection Connection = connector.getConnection (); Попробуйте {подготовленный Statement ps = connection.prepareStatement («Вставьте в пользовательские значения (null,?,?,?)»); Ps.setString (1, user.getName ()); Ps.setString (2, user.getPass ()); ps.setint (3, user.getage ()); int i = ps.executeupdate (); if (i == 1) {return true; }} catch (sqlexception ex) {ex.printstacktrace (); } вернуть false;}Метод обновления
Метод обновления аналогичен методу вставки. Единственное изменение - это оператор SQL
Public Boolean UpdateUser (пользователь пользователя) {Connector Connector = new Connector (); Connection Connection = connector.getConnection (); Попробуйте {подготовлено ps = connection.prepareStatement («Обновление набора пользователя имя =?, pass =?, age =? где id =?»); Ps.setString (1, user.getName ()); Ps.setString (2, user.getPass ()); ps.setint (3, user.getage ()); ps.setint (4, user.getid ()); int i = ps.executeupdate (); if (i == 1) {return true; }} catch (sqlexception ex) {ex.printstacktrace (); } вернуть false;}Удалить метод
Метод удаления - использовать простой запрос, подобный
Удалить из пользователя, где id = 7
Отправка запроса с помощью параметра идентификатора удалит эту запись. Если успешно удалить, 1 будет возвращен
public boolean deleteuser (int id) {connector connector = new Connector (); Connection Connection = connector.getConnection (); try {ratement stmt = connection.createStatement (); int i = stmt.executeupdate ("удалить из пользователя, где id =" + id); if (i == 1) {return true; }} catch (sqlexception ex) {ex.printstacktrace (); } вернуть false;}Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!