Далее, предыдущая статья «Javaweb Practical Mall Development Development (II)» в основном реализует General Foundao.java и использует ResultMap для картирования связанных объектов.
1. General Baserao.java
Поскольку каждый должен использовать его, используются дженерики. Проблема, на которую следует обратить внимание, заключается в том, что коды, такие как user.getClass (). GetName () должны быть изменены. Метод модификации состоит в том, чтобы передать его с помощью класса параметров TC, а затем использовать tc.getName ().
Полный код:
пакет com.dao; import com.model.pager; import com.util.sessionutil; import com.util.systemcontext; import org.apache.ibatis.session.sqlsession; import java.util.hashmap; import java.util.list; import java.util.map;/*** ******************************************** */public class foundao <t> {/** * Взять тип t на основе идентификатора идентификатора @param, чтобы удалить идентификатор t type * @return */public t load (class <t> tc, int id) {sqlsession session = sessionutil.getsession (); T t = null; try {t = session.selectone (tc.getname ()+". Load", id); } наконец {sessionUtil.closesession (session); } return t; } / *** Добавить тип t type* @param t t type, чтобы добавить* @return true успешно* / public boolean add (t t) {int isadd = 0; SQLSession Session = sessionUtil.getSession (); try {isadd = session.insert (t.getClass (). getName ()+". добавить", t); session.commit (); // commit} catch (Exception e) {session.rollback (); // rolle обратно, если отправка не удастся} nakual {sessionUtil.closesession (session); } вернуть Isadd> 0; } / *** Удалить t -тип на основе идентификатора* @param id, чтобы удалить идентификатор t* @return true успешно* / public boolean delete (class <t> t, int id) {int isdelete = 0; SQLSession Session = sessionUtil.getSession (); try {isdelete = session.delete (t.getName ()+". Delete", id); session.commit (); } catch (Exception e) {session.rollback (); // Неудача return System.out.println ("Удалить сбой"); e.printstacktrace (); } наконец {sessionUtil.closesession (session); } вернуть isDelete> 0; } / *** Обновление t type* @param t пользователь должен быть обновлен* @return true успешно* / public boolean update (t t) {int isupdate = 0; SQLSession Session = sessionUtil.getSession (); try {isupdate = session.delete (t.getClass (). getName ()+". Update", t); session.commit (); } catch (Exception e) {session.rollback (); // Неудача return System.out.println ("Обновление не удалось"); e.printstacktrace (); } наконец {sessionUtil.closesession (session); } вернуть isupdate> 0; }/*** Запрос подключения на основе указанных условий* @param Карты Укажите коллекцию условий* @return*/public pager <t> find (class <t> t, map <string, объект> карты) {int pagestart = systemContext.getPageStart (); // page int PageSize = SystemContext.getPageSize (); // seze pager <t> pageS = newStexText.getPageSize (); // page size pager <> new PageSize. maps.put ("pagestart", pagestart); maps.put ("pagesize", pagesize); SQLSession Session = sessionUtil.getSession (); Список <t> dataS = null; try {datas = session.selectlist (t.getName ()+". Найти", maps); // Получить записи pagers.setDatas (datas); pagers.setPagesize (PageSize); pagers.setpageStart (Pagestart); int totalRecord = session.selectone (t.getName ()+". FindCount", maps); // Получить общее количество записей Pagers.SetTotalRecord (TotalRecord); Pagers.SetPageIndex (Pagestart/PageSize+1); } наконец {sessionUtil.closesession (session); } вернуть пейджеры; } / *** Извлечь часть данных в соответствии с указанными условиями* @param Карты Укажите набор условий* @return* / public pager <t> list (class <t> t, map <string, object> maps) {pager <t> pages = new pager <> (); SQLSession Session = sessionUtil.getSession (); Список <t> dataS = null; try {datas = session.selectlist (t.getName ()+". List", maps); // Получить записи pagers.setDatas (datas); pagers.settotalrecord (data.size ()); } наконец {sessionUtil.closesession (session); } вернуть пейджеры; }}Тот же пользователь userdao.java также требует соответствующих модификаций
открытый класс userDao Extends foundao <user> { / ** * Удалить пользователя на основе идентификатора идентификатора идентификатора @param, чтобы удалить идентификатор пользователя * @return * / public user load (int id) {return super.load (user.class, id); }/* Другие функции не публикуются один за другим, все они написаны аналогичными способами*/}2. Картирование карты результата
Проще говоря, когда информация о поле в базе данных несовместима с атрибутами объекта, необходимо сопоставлять через ResultMap.
Например: в свойстве адреса есть класс пользовательских объектов, следующим образом
Адрес открытого класса {Private Int ID; Приватное название строки; Частный строковый телефон; Private String Postcode; // Черт объект пользователя напрямую вместо пользовательского пользователя user_id; `` `` `` `` `}Тогда мы хотим взять адрес, а также взять его соответствующего пользователя. Тем не менее, это два объекта, и оба имеют атрибуты идентификатора, поэтому Mybatis будет запутана при вызове метода SET для установки свойств. Цель использования ResultMap - устранить этот хаос.
Напишите загрузку SQL
<!-Загрузите адрес-> <!-Табличное соединение требуется здесь, и пользователь вывезен. Соединение также необходимо, чтобы убедиться, что полученный адрес не является пустым, и псевдоним идентификатор дубликата атрибута-> <select id = "load" parametertype = "int" resultmap = "addressmap"> select *, t1.id как 'a_id' от адреса t1 правый use user t2 on (t1.user_id = t2.id), где t1.id =#{id}; </select>Здесь мы используем ResultMap для карты, имя этой Result Map является Addermap.
AddressMap
<resultMap id = "addressmap" type = "address" Autompoping = "true"> <!-Сопоставление A_ID в результате как идентификатор, а другое Automaping = true автоматически соответствует-> <id Column = "a_id" Property = "ID"/> <!-Извлеките соответствующие свойства-> <Association Property = "Пользователь" javatype = "user"> <!-MAPPING ASPERTION ASPAPION ASPAPIN свойство = "id"/> <result column = "username" property = "username"/> <result column = "lickname"/> <result column = "lickname"/> <result column = "lickname"/> <result column = "type" property = "type"/> </association> </resultmap>
После завершения вышеуказанной конфигурации при поиске Mybatis автоматически вызовет соответствующий метод SET и установит атрибуты в класс Entity.
тест
пакет com.dao; import com.model.address; public class addressdao extends foundao <drade> {public static void main (string [] args) {addressDao addresdao = new addressDao (); Адрес адрес = addresdao.load (1); System.out.println (address.toString ()); } / *** Загрузите адрес* @param ID идентификатор адреса, который будет загружен* @return возвращать адрес для загрузки, и NULL не загружается* / public Adder Load (INT ID) {return Super.load (Adder.Class, id); }} Как видно на визуализациях, пока атрибуты отображения снимаются, все те, которые не отображаются, являются нулевыми.
Следуйте этой идее, чтобы выполнить другие функции
XML -код:
<? 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"> <mapper namespace = "com.moder. База данных не согласована с атрибутами объекта, вам необходимо сопоставить ее через ResultMap-> <resultMap ID = "AddressMap" type = "Address" Automaping = "true"> <!-MAP A_ID в результате как идентификатор, другие автомагипирование = True Will автоматически совпадают-> <id = "a_id" = "id"/> <! javaType="User" > <!--Map user_id to user's id --> <id column="user_id" property="id"/> <result column="username" property="username"/> <result column="nickname" property="nickname"/> <result column="nickname"/> <result column="type" property="type"/> </association> </resultMap> <!--Load an address --> <!-Табличное соединение требуется здесь, и пользователь вынужден. Соединение гарантирует, что полученный адрес не является пустым, и подселяет его для дубликата идентификатора атрибута -> <select id = "load" parametertype = "int" resultmap = "addressmap"> select *, t1.id как 'a_id' из адреса t1 правый use user t2 on (t1.user_id = t2.id), где t1.id =#{id}; </select> <!-Добавить адрес-> <insert id = "add" parametertype = "address"> вставьте в значения адреса (null,#{name},#{phone},#{postcode}, $ {user_id}) </in int> <!-Удалить адрес-> <delete "delete" parameterpe = "int" intret xtreate indrete indrete indrete indrete indet intrete in intte " </delete> <!-изменить адрес-> <update id = "update" parametertype = "address"> indald name name =#{name}, phone =#{phone}, postcode =#{postcode} где id =#{id} </update> <!-Узнайте All Adderes ucdified User-> <select ID = "list" mape = "resmoners =" remineMAP "=" resmoners "=" rescemPe = "resmoners" = "remineMAP" = "restemAp" = "remineMAP" = "restemAp" = "restemAp" = "restunepe =" Выберите *, t1.id как 'a_id' из адреса T1 Правое соединение пользователя T2 On (t1.user_id = t2.id), где t1.user_id =#{user_id} </select> </mapper>код Java:
пакет com.dao; import com.model.address; import com.model.pager; import java.util.hashmap; import java.util.map;/*** Создан NL101 на 2016/2/23. */public class addresdao extends foundao <drade> {public static void main (string [] args) {addresdao addressDao = new addressDao (); Pager <drads> pagers = addresdao.list (1); System.out.println (pagers.getDatas (). Size ()); } / ** * Загрузите адрес * @param ID Идентификатор адреса, который будет загружен * @return возвращать адрес, который будет загружен, и null не сбои * / public адрес (int id) {return super.load (address.class, id); } / *** Добавить адрес* @param Адрес. Адрес, который должен быть добавлен* @param user_id user_id, соответствующий адресу, который должен быть добавлен* @return true успешно* / public boolean -адрес (адрес int user_id) {userdao userdao = new userdao (); if (userdao.load (user_id) == null) {return false; } return super.add (адрес); } / *** Удалить адрес* @param идентификатор, чтобы удалить идентификатор, соответствующий адресу* @return true delete успешно* / public boolean delete (int id) {return super.delete (address.class, id); } / *** Обновление адреса* @param Адрес Адрес, который должен быть обновлен* @return True Update успешно* / public boolean update (адрес адрес) {return super.update (адрес); } / *** Обновление адреса* @param Адрес Адрес, который должен быть обновлен* @return True Update успешно* / public boolean update (адрес адрес) {return super.update (адрес); } / ** * Выберите все адреса пользователя на основе идентификатора пользователя * @param user_id * @return * / public pager <drade> list (int user_id) {map <string> maps = new hashmap <> (); maps.put ("user_id", user_id); return super.list (address.class, maps); }}Если слой ADO написан таким образом, проблем не будет.
Выше всего об этой статье. Это все о разработке всего проекта Javaweb Mall. Я надеюсь, что это будет полезно для вашего обучения.