Отношения, которые мы в основном изучаем сегодня,-это отношения один к одному и отношения с одним ко многим.
1. Отношения один на один
Давайте объясним это с помощью примеров. (Жена соответствует мужу).
1) Информация о базе данных
Создать таблицу t_wife (id int primary key auto_increment, wife_name varchar (), fk_husband_id int); создать таблицу t_husband (id int первичный ключ Auto_increment, Huse_Name varchar ()); вставьте в значения t_husband (null, 'hello');
2) Соответствующий код Javabean
Несмотря на то, что в базе данных есть только один иностранные ключи, настроенные одной стороной, эта связь с одним к одному является двусторонним отношением.
Мужэб. Ява
Пакет com.cy.mybatis.beans; импорт java.io.serializable;/*** один на один*@author acer **/public class Musherbean реализует сериализуемые {частный статический финальный длинный долгих сериалов = L; частное целочисленное идентификатор; частное название строкости; частная жена жена; {super (); this.id = id; this.name = name; this.wife = жена;} public integer getId () {return id;} public void setId (integer id) {this.id = id;} public String getName () {return name;} public void setname (slound name) {name = illy; Setwife (жена жены) {this.wife = жена;}@overridepublic string toString () {return "Муж [id =" + id + ", name =" + name + ", жена =" + жена + "]";}} Wifebean.java
package com.cy.mybatis.beans;import java.io.Serializable;/*** one to one* @author acer**/public class WifeBean implements Serializable{private static final long serialVersionUID = L;private Integer id;private String name;private HusbandBean husband;public WifeBean() {super();}public WifeBean(Integer id, String name, HusbandBean husband) {super (); this.id = id; this.name = name; this.husband = муж;} public integer getId () {return id;} public void setId (integer id) {this.id = id;} public String getName () {return name;} public void setNam void sethusband (муж о муже) {this.husband = муж;}@overridepublic string toString () {return "Жена [id =" + id + ", name =" + name + ", mude =" + hure + "]";}} 3) Далее установите два интерфейса, мужумаппер и Wifemapper.
Мужмаппер
package com.cy.mybatis.mapper;import com.cy.mybatis.beans.HusbandBean;public interface HusbandMapper {/***Query husband information based on id* @param id* @return* @throws Exception*/public HusbandBean selectHusbandById (int id) throws Exception;/***Query husband and wife information based on id* @param id* @return* @throws Exception*/public HusbandBean Selecthusbandandwife (INT ID) бросает исключение;} 4) Определите файл Mhousmapper.xml
<? xml version = "." Encoding = "utf-"?> <! Doctype Mapper public "-// mybatis.org/dtd Mapper." «http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.husbandmapper "> <resultmap type =" javatype "javatype =" javatype = "javatype =" javatype = "javatype =" javatype = "javatype =" javatype = " Property = "name" column = "name" javatype = "java.lang.string"/> <!- ассоциация ассоциации сложных типов; Многие результаты будут упакованы в ассоциацию карты встроенного результата этого типа или обратитесь к Column = "ID" Идентификатор здесь относится к идентификатору первичного ключа из таблицы T_WIFE. Эта жена запроса, поэтому в жене есть метод Mapper-> <Association Property = "Жена" Colun = "id" javatype = "selectbean" select = "com.cy.mybatis.mapper.wifemapper.selectwifebyhusbandidid"> </association> </resultmap> <!-Resultpe возвращается полностью квалифицированное название или ALAIS of the as at at wepased of the as. -> <SELECT ID = "SELECTHUSBANDBYID" refultype = "Huhhabean"> SELECT * FROM T_HUSBAND, где id =#{id} </select> <!-Имя Результаты Ссылка на внешний результат. Возвращает коллекцию. -> <SELECT ID = "SELECTHUSBANDANDWIFE" RESSUTMAP = "MUDEANDWIFE"> SELECT * FROM T_HUSBAND, где id =#{id} </select> </mapper>Есть метод в Wifemapper.xml
<? xml version = "." Encoding = "utf-"?> <! Doctype Mapper public "-// mybatis.org/dtd Mapper." "http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.wifemapper "> <select id =" selectwifehusbandid "outdype =" shakebean "> select * select * from t_wif </mapper>
5) Напишите реализацию
Пакет com.cy.mybatis.service; import org.apache.ibatis.session.sqlsession; import com.cy.mybatis.beans.husbandbean; импорт com.cy.mybatis.mapper.husbandmapper; импорт com.cy.mybatis.tools.dbtols; public class inetoonservice {public wods wods wods wode wods woids {public stecs.codse.com. {selecthusbandandwife ();} private static void selecthusbandandwife () {sqlsession session = dbtools.getsession (); hushomapper hm = session.getmapper (hhoushapper.class); try {мужа мужа = hm.selecthusandwife () system.rintln; session); {e.printstacktrace ();}}} Примечание. Класс инструментов был написан в предыдущей главе, которая очень похожа на то, что установлено на вчерашней основе.
Уведомление:
Mybatis фактически работает на XML. Все наши методы непосредственно определены в XML. Написание интерфейса-это просто лучше соответствовать нашему трехслойному мышлению. Если вы не пишете интерфейс, вы можете напрямую управлять методами в XML до сеанса.
Пока есть методы в XML, его можно использовать, а метод вызова: имя пространства имен+ метод;
При использовании ResultType для исключения обязательно убедитесь, что имя вашего атрибута такое же, как и имя поля;
Если это не то же самое, используйте ResultMap.
2. Одно ко многим отношениям
Давайте объясним это с помощью примеров. (Одна блокировка соответствует нескольким ключам).
2.1) Здесь нет данных в информации о базе данных, мы используем пакет для добавления данных
Создать таблицу t_key (id int первичный ключ Auto_increment, key_name varchar (), fk_lock_id int); Создать таблицу t_lock (id int первичный ключ Auto_increment, lock_name varchar ());
2.2) Класс сущности
Keybean.java
Пакет com.cy.mybatis.beans; import java.io.serializable;/*** manytoone***/public class ключевой бухгал. {super (); this.id = id; this.key = key; this.lock = lock;} public integer getId () {return id;} public void setId (integer id) {this.id = id;} public String getKey () {return key;} public void setkey (String Key) {this.Key = key;} public lockbean letlock () strollock; lock) {this.lock = lock;}@overridepublic string toString () {return "Keybean [id =" + id + ", key =" + key + ", lock =" + lock + "]";}} lockbean.javapackage com.cy.mybatis.beans; import.io.serializable; **/public Class Lockbean реализует Serializable {Private Static Long Long SerialVersionUid = l; Private Integer ID; Private String Lock; Private List <Keybean> Keys; public Lockbean () {super ();} public Lockbean (integer id, string lock, list <keybean> keys) {super (); ID = int. keys = keys; getId () {return id;} public void setId (integer id) {this.id = id;} public String getLock () {return Lock;} public void setlock (String Lock) {this.lock = lock;} public list> getKeys () {return keys;} public void setKeys (list> keys) {this. keys = keyspuble@oversebys@eplidepuls@keyspupys) {this. String toString () {return "lockbean [id =" + id + ", keys =" + keys + ", lock =" + lock + "]";}} 2.3) Установить интерфейс
Keymapper.javapackage com.cy.mybatis.mapper; import java.util.list; import org.apache.ibatis.annotations.param; импорт com.cy.mybatis.beans.keybean; public interface keymapper {/*** Добавить ключи в пакете* @return* Это рекомендуется использовать @param ("/**** pactorsavekeys (@param ("keys") list <weebean> keys);} lockmapper.javapackage com.cy.mybatis.mapper; import org.apache.ibatis.annotations.param; import com.cy.mybatis.beans.lockbean; public interfect lockmapper {/*** add lock* @par @@par @par @par @par @par @par @par @public intre Savelock (@param ("lock") Lockbean Lock);/*** Запрос информацию о блокировке на основе идентификатора* @param id* @return*/public lockbean findlockbyid (int id);/*** Запрос информации о блокировке и ключе на основе идентификатора* onemany* @param id* @return*/public lockeanceascyys (int id); 2.4) Создать файл XML
Keymapper.xml
<? xml version = "." Encoding = "utf-"?> <! Doctype Mapper public "-// mybatis.org/dtd Mapper." "http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.keymapper "> <resultmap id =" keymap "type =" keybean "> <id property =" id "colund =" javatype = "java. свойство = "key" column = "key_name" javatype = "java.lang.string"/> </resultmap> <!-Коллекция-это элемент, используемый для обезвреживания (требуется), вспомогательные, списки, установить-> <!-Элемент представляет псевдоним, когда каждый элемент в коллекции инитурирован. -> <!-Разделитель указывает, какой символ используется в качестве разделителя между каждой итерацией. -> <INSERT ID = "batchSaveKeys"> INSERT в T_KEY VALUES <foreach collection = "keys" item = "key" separator = ","> (null,#{key.key},#{key.lock.id}) </foreach> </insert> <select = "findkeysblockid" roldmap = "keymap"> select * resclick_llock_llocl #{id} </select> </mapper> lockmapper.xml <? xml version = ".". " Encoding = "utf-"?> <! Doctype Mapper public "-// mybatis.org/dtd Mapper." «http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.lockmapper "> <!-custom return type-> <resultmap id =" lockmap "type =" lockbear "> <ID Property =" ID "=" ID "ID" javatype = "java.lang.integer"/> <result property = "lock" = "lock_name" javatype = "java.lang.string"/> <result property = "lock" column = "lock_name" javatype = "java.lang. select = "com.cy.mybatis.mapper.keymapper.findkeysbylckid"> </collection> </resultMap> <INSERT ID = "Savelock"> вставьте в значения t_lock (null, #{lock.lock}) </insert> <select id = "findlockyid" resultmap = "lockmap"> select * select * из t_loc id = "findlockandkeys" resultmap = "lockandkeysmap"> select * from t_lock, где id = #{id} </select> </mapper> 2.5) реализация
пакет com.cy.mybatis.service; import java.util.arraylist; import java.util.list; import org.apache.ibatis.session.sqlsession; импорт com.cy.mybatis.beans.keybean; импорт com.cy.mybatis.beans.lockbean; импорт. com.cy.mybatis.mapper.lockmapper; import com.cy.mybatis.tools.dbtools; открытый класс OneTomanyService {public static void main (string [] args) {// savelock (); // batchsavekeys (); findlockandkeys ();} private static void findlockandkeys () {sqlsession session = dbtools.getsession (); lockmapper lm = session.getmapper (lockmapper.class); lockbean lock = lm.findlockandkeys (); System.out.println (lockberse); Dbtools.getSession ();; lockmapper lm = session.getmapper (lockmapper.class); keymapper km = session.getmapper (keymapper.class); lockbean lock = lm.findlockbyid (); list <ключ> keys = new ArrayList <KeyBean> (); для (int i =; Keybean (null, "key"+i, lock); keys.add (key);} km.batchsavekeys (keys); session.commit ();} private static void savelock () {sqlsession session = dbtools.getsession (); lockmapper lm = session.getmapper (lockmapper.class); null); lm.savelock (lock); session.commit ();}} Результаты показывают:
3. партийная операция и страница страдания
Здесь я буду использовать пользователя из предыдущей главы и напишу основной код.
Сначала определите объект Paging.
Пакет com.cy.mybatis.beans; import java.util.list;/*** Определить объект страниц** @Автор**/public class Page Установите public int getPageno () {return pageno;} public void setpageno (int pageno) {this.pageno = pageno;} public int getPagetotal () {return pagetotal;} public void setPagetotal (int pagetotal) {pagetotal = pagetotal; {return rowstotal;} public void setRowStotal (int rowstotal) {this.RowStotal = rowStotal; pagetotal = rowstotal % pagesize ==? Rowstotal / pagesize: rowstotal / pagesize +;} public int getPageSize () {return PageSize;} public void setPagesize (int pagesize) {this.pagesize = pagesize;} public list <?> get -stist () {return list;} public void setlist (sixt> {this.List = stride@@@@@@@@@@@@spectrizt@@@@@spectrizing@ {return "pager [pageno =" + pageno + ", pagetotal =" + pagetotal + ", rowstotal =" + rowstotal + ", pagesize =" + pageize + ", lize =" + list + "]";}} usermapper.java interface. пакет com.cy.mybatis.mapper; import java.util.list; import java.util.map; import org.apache.ibatis.annotation.param; import com.cy.mybatis.beans.userbean; public insermapper {/*** add* @param* @return* @throws exception*/public ins ins ins ins ins ins ins ins ins ins inspus Пользователь) Throws Exception;/*** Использовать* @param user* @param id* @return* @throws excection*/public int updateUser (@param ("u") пользователь пользователь, @param ("id") int id) throws Exception;/*** exception* @param id* @return* @Throws Exception*/public int hAleteUser (int id) throws exection; Exception*/public userbean selectUserById (INT ID) Throws Exception;/*** Запрос всех пользовательских информации* @return* @Throws Exception*/public list <userBean> selectAllUser () Throws Exception;/*** PACTION ADD* @param пользователь* @return* @Throws Exception*/public int batchinsertUser (@param ("userbean use exception) throws exception)******* return* @Throws Exception*/public int batchDeleteUser (@param ("list") list <Integer> list) throws Exception;/*** Данные запроса на падении* @param parma* @return* @Throws Exception*/public <ServiceBean> pageruser (карта <строка, объект> parma) throws excect CountUser (map <string, object> parmas) бросает исключение;} xml file <? xml version = ".". "." Encoding = "utf-"?> <! Doctype Mapper public "-// mybatis.org/dtd Mapper." «http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.usermapper "> <!-Пользовательский набор результатов возврата-> <resultmap id =" usermap "type =" userbean "> <ID Property =" ID "=" ID "ID" javaType="java.lang.Integer"></id><result property="username" column="username" javaType="java.lang.String"></result><result property="password" column="password" javaType="java.lang.String"></result><result property="account" column="account" javatype = "java.lang.double"> </result> </resultMap> <!- атрибут ID в различных тегах должен быть таким же, как и имя метода в интерфейсе, а значение атрибута идентификатора должно быть уникальным и не может быть использован повторно. The parameterType property specifies the parameter type used when querying, and the resultType property specifies the result set type returned by the query --> <!-- useGeneratedKeys: (It is only useful for insert) This tells MyBatis to use the JDBC's getGeneratedKeys method to retrieve the primary key generated internally by data (for example, the auto-increment field of database management systems like MySQL and SQLServer). Значение по умолчанию: false. -> <!-KeyProperty: (Полезно только для вставки) Отметьте свойство. Mybatis установит свою ценность через GetGeneratedKeys или через дочерний элемент SelectKey of Insert. По умолчанию: не установлен. -> <!-#{} Контент является заполнителем. Когда параметр является javabean, он указывает значение свойства объекта Bean, которое размещено-> <insert id = "insertuser" usegeneratedkeys = "true" keyproperty = "user.id"> insert в t_user (username, password, account) values (#{user.username},#{user.pass},#us usemount} </upport) wpass. id = "UpdateUser"> Update t_user set username =#{u.username}, password =#{u.password}, account =#{u.account}, где id =#{id} </update> <delete id = "deleteUser" parametertype = "int"> delete from t_user where where wher =#{id} </selete> </selet id = "selectuserbyid" parametertype = "int" resultmap = "usermap"> select * from t_user, где id =#{id} </select> <select id = "selectalluser" resultmap = "usermap"> select * from t_user </select> <!-пакетные операции и теги Foreach-> <inserted id = "batchinsert" batcherser '"batchEnsert" BatchEnserter "BatchInserter". ParameterType = "java.util.list"> вставьте в значения t_user <foreach collection = "users" item = "userator", ","> (null,#{users.username},#{users.password},#{users.account}) </foreeach> in insert> <lelete id = "batchDele (<foreach collection = "list" item = "list" sepreator = ",">#{id} </foreach>) </delete> <!-Коллекция-это элемент, используемый для обезвреживания (требуется), вспомогательные, списки, установить-> <!-Элемент представляет псевдоним, когда каждый элемент в наборе является инитурирован. -> <!-Разделитель представляет то, что символ используется в качестве разделителя между каждой итерацией. -> <select id = "pageruser" parametertype = "java.util.map" resultmap = "usermap"> select * from t_user где = <if test = "username! = null"> и имя пользователя, как '%$ {username}%' </if> limit $ {index}, $ {pagezize} </if> $ {pagezize} </if> select> "</if> $ {pagezize} </if> $ {pagegize} </if> $ {pageSize} </if> $ ParameterType = "java.Util.map" refultype = "int"> select Count (*) из t_user где = <if test = "username! = null"> и имя пользователя, как '%$ {username}%' </if> </select> </mapper> #. Когда генерируя SQL, цитаты будут собираться для символов для характера. $ При генерации SQL цитаты не будут собраны. Его можно использовать для классов тестирования параметров, таких как заказ по пакету com.cy.mybatis.service; импорт java.util.arraylist; import java.util.hashmap; импорт java.util.list; импорт java.util.map; импорт org.apache.ibatis.session.sessession; com.cy.mybatis.tools.dbtools; import com.cy.mybatis.mapper.usermapper; public class userservice {/*** @param args*/public static void main (string [] args) {// insertuser (); // deleteUser (); // uppatreUser (); // selectUser (); // selectAllUser; BatchInserTuser (); // batchDeleteUser (); // countuser (); pageruser ();} private static void countuser () {sqlsession session = dbtools.getsession (); usermapper mapper = session.getmapper (usermapper.class); map <string> params = neval Hashmap <string, object> (); params.put ("username", "kitty"); int index =; params.put ("index", index); // с какой страницы запустить. MySQL начинается с params.put ("pagesize",); // Количество полос данных, отображаемых на страницу int county; try {count = mapper.countuser (params); system.out.println (count);} catch (Exception e) {e.printStackTrace ();}} private void pageruser () {sqlascess ssesession = squessessessessessessessession =} Dbtools.getsession (); usermapper mapper = session.getmapper (usermapper.class); map <string, object> params = new hashmap <string, object> (); params.put ("username", "kitty"); params.put ("index",); // какая страница. MySQL начинается с params.put ("pagesize",); // Количество полосок данных, отображаемых на страницу Try {list <userbean> u = mapper.pageruser (params); for (пользователь пользователь: u) {System.out.println ("----------"+userbean);}} catch (Exception e) {e.printstacktrace ();}} private static void batchdeleteuser () {sqlsession session = dbtools.getsession (); session.getmapper (usermapper.class); list <Integer> ids = new ArrayList <Integer> (); for (int i =; i <; i ++) {ids.add (i);} try {mapper.batchdeleteuser (ids); session.commit ();} catch (Exception e) {E.printStack (); BatchInserTuser () {sqlSession Session = dbtools.getSession (); UserMapper mapper = session.getMapper (usermapper.class); list <userbean> users = new ArrayList <serseanbean> (); для (int i =; i <; i ++) {userbean user = new userbean .); users.add (user);} try {mapper.batchinsertuser (users); session.commit ();} catch (Exception e) {e.printstacktrace ();}}/*** Новый пользователь*/private void insertuser () {sqlSession session = dbtools.getsession (); session.getmapper (usermapper.class); userbean user = new userbean ("yi", ",.); try {mapper.insertuser (user); system.out.println (user.toString ()); session.commit ();} catch (execcement e) {e.printstacktrace (); session.roll ();} catch (Exception e) {e.printStacktrace (); session.Roll ();); (Exception e) {e.printStacktrace (); void deleteUser () {sqlSession session = dbtools.getSession (); usermapper mapper = session.getmapper (usermapper.class); try {mapper.deleteuser (); session.commit ();} catch (Exception e) {e.printstacktrace (); UpdateUser () {sqlSession Session = dbtools.getSession (); usermapper mapper = session.getmapper (usermapper.class); userbean user = new userbean ("xiao ming", "",.); try {mapper.updateuser (user,); session.com (); {e.printstacktrace (); session.rollback ();}}/*** пользователь запроса по идентификатору*/private static void selectuserbyid () {sqlsession session = dbtools.getsession (); usermapper mapper = session.getmapper (usermapper.class); try {userbean user = user = user = user = user = usterbean = session.getmapper (usermapper.class); mapper.selectuserbyid (); System.out.println (user.tostring ()); session.commit ();} catch (exception e) {e.printstacktrace (); session.rollback ();}}/*** Запрос всех пользователей*/private static void selectalluser () {sqlsession session = dbtsession ();). mapper = session.getmapper (usermapper.class); try {list <userbean> user = mapper.selectalluser (); system.out.println (user.tostring ()); session.commit ();} catch (Exception e) {e.printstacktrace (); session.rollback (); Взгляните на общий проект:
Все должно быть упорно!