小編這次要給大家分享的是詳解mybatis關(guān)系映射之一對(duì)多和多對(duì)一,文章內(nèi)容豐富,感興趣的小伙伴可以來(lái)了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
涿鹿網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
本實(shí)例使用用戶(hù)和訂單的例子做說(shuō)明: 一個(gè)用戶(hù)可以有多個(gè)訂單, 一個(gè)訂單只對(duì)應(yīng)一個(gè)用戶(hù)。(其中應(yīng)用到注釋?zhuān)?/p>
1.代碼的結(jié)構(gòu)
2. 建表語(yǔ)句:
CREATE DATABASE test; USE test; CREATE TABLE person( personId VARCHAR(36) PRIMARY KEY, personName VARCHAR(64), personAddress VARCHAR(128), personTel VARCHAR(11) ); CREATE TABLE orders( orderId VARCHAR(36) PRIMARY KEY, orderNumber VARCHAR(20), orderPrice INT, pid VARCHAR(36) ); INSERT INTO person VALUES('1', '木子', '湖北', '110'); INSERT INTO person VALUES('2', '木子大大', '武漢', '120'); INSERT INTO person VALUES('1', '木子苗苗', '天門(mén)', '119'); INSERT INTO orders VALUES('1', '001', 100, '1'); INSERT INTO orders VALUES('2', '002', 200, '1'); INSERT INTO orders VALUES('3', '003', 300, '2'); INSERT INTO orders VALUES('4', '004', 400, '2'); INSERT INTO orders VALUES('5', '005', 500, '3'); SELECT p.*, o.* FROM person p JOIN orders o ON (p.personId=o.pid) WHERE p.personId = '1' ; *指顯示所有字段
3. 用戶(hù)實(shí)體:
package com.mybatis.domain; import java.util.List; import lombok.Data; @Data//注釋?zhuān)≒erson為單方) public class Person { private String personid; private String personname; private String personaddress; private String persontel; //這個(gè)代表多方里面的內(nèi)容(Orders) private Listorders; @Override public String toString() { return "Person [personid=" + personid + ", personname=" + personname + ", personaddress=" + personaddress + ", persontel=" + persontel + ", orders=" + orders + "]"; } }
4. 訂單實(shí)體:
package com.mybatis.domain; import lombok.Data; @Data//(Orders為多方) public class Orders { private String orderid; private String ordernumber; private Integer orderprice; //對(duì)象(單方Person)與外鍵進(jìn)行關(guān)聯(lián) private Person person; }
5.寫(xiě)PersonMapper.java的接口
package com.mybatis.dao.mapper; import com.mybatis.domain.Orders; import com.mybatis.domain.Person; import java.util.List; public interface PersonMapper { int deleteByPrimaryKey(String personid); int insert(Person record); Person selectByPrimaryKey(String personid); ListselectAll(); int updateByPrimaryKey(Person record); //一對(duì)多查詢(xún)(根據(jù)id查詢(xún)) public List findPersonAndOrders(String pid); //一對(duì)多查詢(xún)返回一個(gè)對(duì)象 public Person selectPersonById(String id); }
6. 一對(duì)多實(shí)體配置: PersonMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
7.寫(xiě)OrdersMapper.java的接口
package com.mybatis.dao.mapper; import com.mybatis.domain.Orders; import java.util.List; public interface OrdersMapper { int deleteByPrimaryKey(String orderid); int insert(Orders record); Orders selectByPrimaryKey(String orderid); ListselectAll(); int updateByPrimaryKey(Orders record); //多查一 根據(jù)id public Orders selectOrderById(String oid); //多查一 根據(jù)orderNumber public Orders selectOrderNumber(String number); }
8.多對(duì)一實(shí)體配置:OrdersMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
9.其他配置
db.properties配置(sql語(yǔ)句的基本鏈接) db.driver=com.MySQL.jdbc.Driver db.url=jdbc:mysql://localhost:3306/wang1?useUnicode=true&characterEncoding=utf8 db.username=root db.password=123456 log4j.properties配置(注釋?zhuān)? # Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n mybatis.xml(逆向生成domain、dao層) <?xml version="1.0" encoding="UTF-8" ?>generatorConfig.xml配置(對(duì)MySQL進(jìn)行操作)下面標(biāo)紅部分根據(jù)自己建立的進(jìn)行修改 <?xml version="1.0" encoding="UTF-8"?> D盤(pán)中要有此包mysql-connector-java-5.1.7-bin.jar
10.測(cè)試文件
package com.mybatis.test; import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.List; import lombok.Data; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import com.mybatis.dao.mapper.OrdersMapper; import com.mybatis.dao.mapper.PersonMapper; import com.mybatis.domain.Orders; import com.mybatis.domain.Person; public class TestStudentMapper { SqlSessionFactory sessionFactory = null; // 這方法之前 @Before public void setup() throws Exception { String resource = "mybatis.xml"; // 這個(gè)是加載配置文件 InputStream inputStream = Resources.getResourceAsStream(resource); // 得到會(huì)話(huà)工廠(chǎng) sessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } //查詢(xún)一對(duì)多 根據(jù)這個(gè)person里面的id號(hào)就能查詢(xún)出這個(gè)用戶(hù)有多少個(gè)訂單記錄 // @Test public void testSelectPersonById(){ SqlSession sq = sessionFactory.openSession(); // 得到dao層的實(shí)現(xiàn)類(lèi) PersonMapper u = sq.getMapper(PersonMapper.class); Person person = u.selectPersonById("2"); System.out.println(person); } //多對(duì)一 根據(jù)多對(duì)一id進(jìn)行查詢(xún) // @Test//多對(duì)一關(guān)聯(lián)查詢(xún) public void testSelectOrderById(){ SqlSession sq = sessionFactory.openSession(); // 得到dao層的實(shí)現(xiàn)類(lèi) OrdersMapper u = sq.getMapper(OrdersMapper.class); Orders od = u.selectOrderById( "2"); System.out.println(od.getPerson().getPersonname()); System.out.println(od.getPerson().getPersonaddress()); } @Test//多對(duì)一關(guān)聯(lián)查詢(xún) public void testSelectOrderNumber(){ SqlSession sq = sessionFactory.openSession(); // 得到dao層的實(shí)現(xiàn)類(lèi) OrdersMapper u = sq.getMapper(OrdersMapper.class); Orders od = u.selectOrderNumber("001"); System.out.println(od.getPerson().getPersonname()); System.out.println(od.getPerson().getPersonaddress()); } }
如有問(wèn)題請(qǐng)多多指教!希望給您帶來(lái)幫助!祝您生活愉快。
看完這篇關(guān)于詳解mybatis關(guān)系映射之一對(duì)多和多對(duì)一的文章,如果覺(jué)得文章內(nèi)容寫(xiě)得不錯(cuò)的話(huà),可以把它分享出去給更多人看到。