В предыдущей статье «Javaweb Practical Mall Project Development (i)» создала классы организации и инструменты страниц. В этой статье используется Mybatis для создания слоев DAO.
Кроме того, документация Mybatis API может быть использована в качестве ссылки
1. Использование Mybatis
1. Представьте пакет полки
Здесь я представляю пакеты Mybatis и MySQL в LIB
2. Написать config.xml для настройки среды базы данных
Сначала разместите код, затем объясните один за другим
<? xml version = "1.0" Encoding = "UTF-8"?> <! Конфигурация doctype public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <portivuration> <protertes resourcees = "configeries =" confieLies = "conifceeries =" confieLies = "confieLies =" confieLies = "confieLies =" confieLies = "confieLies =" resourcees = ". <name пакета = "com.model"/> </typealiases> <среды default = "разработка"> <среда идентификатор = "разработка"> <transactionManager type = "jdbc"/> <dataSource type = "Booled"> <Property name = "Driver" value = "$ {Driver}"/> name = "url" value = "$ {url}"/"/> <" urlame = "url"/"/"/"/"/"" urlame = "urer"/"/"/"/> <name =" url "value =" $ {url} "/"/> <"url" url "value =". value = "$ {username}"/> <name = "password" value = "$ {password}"/> </dataSource> </ervenery> <!-Second Environment-> <Environment Id = "publish"> <TransactionManager = "jdbc"/> <dataSource type = "Пул"/> </Environment> </Environments> </configuration> </> </> <dataSource Type = "Pooled"/> </Environment> </Environments> </configuration>Первым шагом является представление формата файла XML, то есть DTD, который необходимо скопировать непосредственно из шаблона, предоставленного Mybatis.
<! Конфигурация Doctype public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd">
Вопрос 1
Функция свойств заключается в настройке соответствующего файла свойств, ресурс определяет соответствующий маршрут, и мы можем настроить драйвер базы данных, URL, имя пользователя, пароль и т. Д. В файле свойств. Обратитесь к следующему. Таким образом, Mybatis автоматически прочитает следующие параметры, и вы можете использовать $ {}, чтобы ссылаться на его в XML.
Driver = com.mysql.jdbc.driver url = jdbc: mysql: // localhost: 3306/shop username = root password = 123456
Вопрос 2
Typealiases настраивают псевдоним под указанным путем. Мы можем настроить одно псевдоним одно имя <typealias type = "com.model.user" alias = "user"/> таким образом, com.model.user изменяется на пользователь. Нет необходимости писать все имена позже. Вам нужен только пользователь, чтобы заменить модификацию пакетов <name пакета = "com.model"/>. Таким образом, вы можете изменить все классы пакета, а псевдоним по умолчанию - имя класса объекта.
Вопрос 3
Среды используются для настройки среды базы данных и могут настроить несколько сред, такие как среда разработки и среда выпуска, по умолчанию относится к среде по умолчанию
Обратите внимание, что в окружающей среде нет S, которая представляет собой среду в условиях среды. Это отличается от ID, поэтому ID должен быть уникальным.
TransactionManager представляет тип базы данных соединений, JDBC подключается к Java
DataSource Настройка режима источника данных, объединение - это режим пула соединений. Для других режимов вы можете перейти к официальному документу, чтобы проверить его и выбрать в соответствии с вашими потребностями.
Свойство предназначено для настройки подключения к базе данных. Не перемещайте имя, измените значение = "Driver". Вот использование {} для прочтения конфигурации в верхнем файле свойств. Обратите внимание на сопоставление имени, чтобы прочитать его.
3. Напишите отображение Mapper SQL
Здесь я пишу метод загрузки userdao, то есть читаю пользователя на основе идентификатора. Следующий код эквивалентен функции общедоступной загрузки пользователя (INT ID). Для mybatis есть два типа замены #{} замены автоматически цитируются в соответствии с типом, например, тип строки #{name}, замененный «Имя». Другой - замена $ {}, которая напрямую заменяется в исходном формате и не будет добавлять другие вещи.
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <pale> <see ud = "load" parametepe "int" inte "int" in vadetty vematepe = "int" int "=" ud "=" ud "int" int "int ved" in int ". resultType = "user"> select * из пользователя, где id =#{id} </select> </mapper>Первый шаг - представить файл заголовка DTD и сформулировать правила для файла XML
Выберите тег, указывая, что в настоящее время это оператор SELECT
Атрибут ID эквивалентен имени функции, на которое ссылается ID
Атрибут ParameterType, который представляет входящий тип параметра, может указать основной тип или пользовательский тип. Если это пользовательский тип, его метод получения будет автоматически вызван для получения своих атрибутов.
Свойство RestureType, тип возврата значения, может напрямую настраивать тип и автоматически вызовет метод SET, чтобы установить параметры запроса и использовать больше свойств в последующих статьях.
4. Позвоните в карту карты
Перед вызовом вам нужно сначала настроить отображение в config.xml. Обратите внимание, что XML, настроенный здесь, является путем файла.
<mappers> <mapper resource = "com/model/user.xml"/> </mappers>
Затем напишите тестовый класс
public static void main(String[] args) { try { InputStream is = Resources.getResourceAsStream("Config.xml");//Read the configuration file SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);//Use the configuration file to create factory SqlSession session = factory.openSession();//Get session User user = session.selectone (user.class.getname ()+". Load", 1); // вызовать систему функций загрузки. }} результат:
5. Класс инструментов SQLSession
Написание тестовых классов, подобных вышеуказанному, слишком хлопотно, поэтому я инкапсулирую SQLSession, чтобы облегчить использование слоя DAO
package com.util;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.ioexception; импорт java.io.inputstream;/*** Создан NL101 на 2016/2/23. */public class sessionUtil {private static sqlSessionFactory factory = null; static {try {inputStream IS = resources.getResourCeasStream ("config.xml"); // Читать файл конфигурации file = new sqlSessionFactoryBuilder (). Build (IS); // Создание фабрики с использованием файла конфигурации} catch (ioException e) {e.printStackTrace ();); }} / ** * получить сеанс * @return * / public static sqlsession getsession () {return factory.opensession (); } / ** * Закрыть сеанс * @param session * / public static void closesession (sqlsession session) {if (session! = Null) session.close (); session = null; }}Выше приведено основное использование mybatis, и теперь он начинает инкапсулировать слой DAO
2. Инкапсулируйте дао
1. Userdao.java
Общественная загрузка пользователя (INT ID) Получите пользователя на основе идентификатора
Это было написано выше
public boolean add (пользователь пользователя) добавить пользователя
XML -код
<!-Добавьте пользователя-> <INSERT ID = "ADD" PARAMETERTYPE = "USER"> Вставьте в значения пользователя (null,#{username},#{password},#{Nickname},#{type}) </insert>Код Java
/** /*** Добавить пользователя* @param Пользователь Пользователь должен быть добавлен* @return true Success* /public boolean add (Пользователь пользователя) {int isAdd = 0; SQLSession Session = sessionUtil.getSession (); try {isadd = session.insert (user.class.getName ()+". добавить", user); session.commit (); // отправить} catch (Exception e) {session.rollback (); // rolleback, если отправка не удастся} наконец {sessionUtil.closesession (session); } System.out.println (ISADD); вернуть Исадд> 0; } public Boolean Delete (INT ID) Удалить пользователяXML -код
<!-Удалить пользователя-> <delete id = "delete" parametertype = "int"> удалить из пользователя, где id =#{id} </delete>Код Java
/ ** * Удалить пользователя на основе идентификатора идентификатора @param для удаления идентификатора пользователя * @return true успех */ public boolean delete (int id) {int isdelete = 0; SQLSession Session = sessionUtil.getSession (); try {isdelete = session.delete (user.class.getName ()+". удалить", id); session.commit (); } catch (Exception e) {session.rollback (); // Неудача return System.out.println ("Удалить пользователь не удался"); e.printstacktrace (); } наконец {sessionUtil.closesession (session); } вернуть isDelete> 0; } public boolean update (пользователь пользователя) Обновите пользовательXML -код
<!-изменить пользователя-> <update id = "update" parametertype = "user"> обновление пользователя username =#{username}, password =#{password}, nickname =#{nickname}, type =#{type} где id =#{id} </update>, type =#{type}#{id} </update>Код Java
/ *** Обновить пользователь* @param пользователь пользователь должен быть обновлен* @return True Success*/ public Boolean Update (пользователь пользователя) {int isupdate = 0; SQLSession Session = sessionUtil.getSession (); try {isupdate = session.delete (user.class.getName ()+". Обновление", пользователь); session.commit (); } catch (Exception e) {session.rollback (); // Неудача return System.out.println ("Обновление не удалось"); e.printstacktrace (); } наконец {sessionUtil.closesession (session); } вернуть isupdate> 0; } Общедоступный пользовательский логин (String UserName, String Password) определяет, существует ли пользовательXML -код
<!-Решение пользователя входа в систему-> <select id = "login" parametertype = "string" resultype = "user"> select * из пользователя, где username =#{username} </select>Код Java
/ *** Определите, существует ли пользователь* @param username username* @param пароль пароля* @return существует возвращение пользователя возврата natur null*/ public user login (String username, String password) {user user = null; SQLSession Session = sessionUtil.getSession (); try {user = session.selectone (soapbinding.use.class.getName ()+". Login", имя пользователя); // Когда пароль неверен, установите пользователя на null if (! User.getpassword (). Equals (пароль)) {user = null; }} наконец {sessionUtil.closesession (session); } вернуть пользователь; } public Pager Find (имя строки, сортировка строки, порядок строки) обработка страниц XML -код:
Динамический SQL используется здесь. Что касается динамического SQL, это использование тегов, таких как где, если, выберите и т. Д. Вы можете обратиться к официальному документу. Кроме того, в Mybatis концепция NULL не существует. Например, вы передаете user = null, но при замене он заменяется строкой «нулевой». Если это значение недоступно, оно ноль.
<!-код странификации-> <select id = "find" parametertype = "map" resultype = "user"> select * from user <if test = "name! = Null"> где (имя пользователя, как #{name} или никнам, например #{name}) </if> $ {sort} $ {Ording} Limit #{Pagestart}, # #{Pagize {PAGESIZE {PAGESISIZE {PAGEISIZE} {PAGESIZE} {PAGESIZE} {PAGESIZE} {PAGESIZE) {PAGESIZE} {PAGE #/PAGESIZ <!-Общее количество записей страниц-> <select id = "findcount" parametertype = "map" outdetype = "int"> select count (*) из пользователя <if test = "name! = Null"> где (имя пользователя, как #{name} или ник, как #{name}) </if> </select>Код Java: В целом, он все еще основан на странице, разработанной предыдущей статьей
/*** Запрос страницы, основанный на указанных условиях* @param Имя Условия запроса, NULL представляет безусловное* @param sort sort sort sort, nul SystemContext.getPagesize (); // Размер страницы Pager <user> pagers = new Pager <> (); Map <string, object> maps = new hashmap <> (); if (name! = null &&! name.equals ("")) {name = "%"+name+"%"; maps.put ("имя", имя); } if (sort == null || sort.equals ("")) {sort = "id"; // сортирован по идентификатору по умолчанию} if (order == null || order.equals ("")) {order = "asc"; // sort sort} maps.put ("sort", sort); maps.put ("order", order); maps.put ("pagestart", pagestart); maps.put ("pagesize", pagesize); SQLSession Session = sessionUtil.getSession (); Список <user> dataS = null; try {datas = session.selectlist (user.class.getName ()+". Найти", карты); // Получить записи pagers.setDatas (dataS); pagers.setPagesize (PageSize); pagers.setpageStart (Pagestart); int totalRecord = session.selectone (user.class.getName ()+". FindCount", maps); // Получить общее количество записей pagers.setTotalRecord (totalRecord); Pagers.SetPageIndex (Pagestart/PageSize+1); } наконец {sessionUtil.closesession (session); } вернуть страницы; } Текущая структура проекта
В следующей статье я напишу общее основание, чтобы облегчить написание кода. И продолжайте изучать использование других свойств Mybatis. Спасибо за чтение.