mysql 一对多映射_mybatis关系映射之一对多和多对一
本實例使用用戶和訂單的例子做說明:?一個用戶可以有多個訂單, 一個訂單只對應一個用戶。(其中應用到注釋)
1.代碼的結構
2. 建表語句:
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', '木子苗苗', '天門', '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. 用戶實體:
package com.mybatis.domain;
import java.util.List;
import lombok.Data;
@Data//注釋(Person為單方)
public class Person {
private String personid;
private String personname;
private String personaddress;
private String persontel;
//這個代表多方里面的內容(Orders)
private List orders;
@Override
public String toString() {
return "Person [personid=" + personid + ", personname=" + personname
+ ", personaddress=" + personaddress + ", persontel="
+ persontel + ", orders=" + orders + "]";
}
}
4. 訂單實體:
package com.mybatis.domain;
import lombok.Data;
@Data//(Orders為多方)
public class Orders {
private String orderid;
private String ordernumber;
private Integer orderprice;
//對象(單方Person)與外鍵進行關聯
private Person person;
}
5.寫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);
List selectAll();
int updateByPrimaryKey(Person record);
//一對多查詢(根據id查詢)
public List findPersonAndOrders(String pid);
//一對多查詢返回一個對象
public Person selectPersonById(String id);
}
6. 一對多實體配置: PersonMapper.xml
SELECT p.*,o.* FROM person o,orders b WHERE o.personid=#{pid};
select p.*, o.* from person p, orders o where p.personId = o.pid and p.personId = #{id}
7.寫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);
List selectAll();
int updateByPrimaryKey(Orders record);
//多查一 根據id
public Orders selectOrderById(String oid);
//多查一 根據orderNumber
public Orders selectOrderNumber(String number);
}
8.多對一實體配置:OrdersMapper.xml
select p.*, o.* from person p, orders o where p.personId = o.pid and o.orderId = #{oid}
select p.*, o.* from person p, orders o where p.personId = o.pid and o.orderId = #{number}
9.其他配置
db.properties配置(sql語句的基本鏈接)
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配置(注釋)
# 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層)
/p>
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
generatorConfig.xml配置(對MySQL進行操作)下面標紅部分根據自己建立的進行修改
/p>
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
D盤中要有此包mysql-connector-java-5.1.7-bin.jar
connectionURL="jdbc:mysql://localhost:3306/wang1" userId="root" password="123456">
10.測試文件
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";
// 這個是加載配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 得到會話工廠
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
//查詢一對多 根據這個person里面的id號就能查詢出這個用戶有多少個訂單記錄
// @Test
public void testSelectPersonById(){
SqlSession sq = sessionFactory.openSession();
// 得到dao層的實現類
PersonMapper u = sq.getMapper(PersonMapper.class);
Person person = u.selectPersonById("2");
System.out.println(person);
}
//多對一 根據多對一id進行查詢
// @Test//多對一關聯查詢
public void testSelectOrderById(){
SqlSession sq = sessionFactory.openSession();
// 得到dao層的實現類
OrdersMapper u = sq.getMapper(OrdersMapper.class);
Orders od = u.selectOrderById( "2");
System.out.println(od.getPerson().getPersonname());
System.out.println(od.getPerson().getPersonaddress());
}
@Test//多對一關聯查詢
public void testSelectOrderNumber(){
SqlSession sq = sessionFactory.openSession();
// 得到dao層的實現類
OrdersMapper u = sq.getMapper(OrdersMapper.class);
Orders od = u.selectOrderNumber("001");
System.out.println(od.getPerson().getPersonname());
System.out.println(od.getPerson().getPersonaddress());
}
}
如有問題請多多指教!希望給您帶來幫助!祝您生活愉快。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
總結
以上是生活随笔為你收集整理的mysql 一对多映射_mybatis关系映射之一对多和多对一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql游标遍历修改_mysql使用游
- 下一篇: mysql报196271错误_微软补丁造