工程目录结构查看:
1.数据库文件yhmis.sql
/*
SQLyog 企业版 - MySQL GUI v8.14
MySQL - 5.7.16-log : Database - mybatisdb3
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`mybatisdb3` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `mybatisdb3`;
/*Table structure for table `tb_door` */
DROP TABLE IF EXISTS `tb_door`;
CREATE TABLE `tb_door` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`tel` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
/*Data for the table `tb_door` */
insert into `tb_door`(`id`,`name`,`tel`) values (1,'永和大王(北三环西路店)','110-62112313'),(2,'永和大王(北京南站店)','007-62112323'),(3,'北京西','007-62112324');
/*Table structure for table `tb_order` */
DROP TABLE IF EXISTS `tb_order`;
CREATE TABLE `tb_order` (
`id` int(11) NOT NULL,
`door_id` int(11) DEFAULT NULL,
`order_no` varchar(7) DEFAULT NULL,
`order_type` varchar(50) DEFAULT NULL,
`person_num` tinyint(4) DEFAULT NULL,
`cashier` varchar(30) DEFAULT NULL,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`payment_type` varchar(30) DEFAULT NULL,
`price` double(8,2) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_Reference_2` (`door_id`),
CONSTRAINT `FK_Reference_2` FOREIGN KEY (`door_id`) REFERENCES `tb_door` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `tb_order` */
insert into `tb_order`(`id`,`door_id`,`order_no`,`order_type`,`person_num`,`cashier`,`create_time`,`end_time`,`payment_type`,`price`) values (2,2,'P000001','堂食',4,'王强','2018-04-24 16:05:00','2018-04-24 16:05:00','支付宝',18.00),(10,1,'P000011','堂食',1,'张静','2018-06-15 11:25:11','2018-04-17 07:24:38','微支付',8.00);
/*Table structure for table `tb_order_detail` */
DROP TABLE IF EXISTS `tb_order_detail`;
CREATE TABLE `tb_order_detail` (
`id` int(11) NOT NULL,
`order_id` int(11) DEFAULT NULL,
`num` tinyint(4) DEFAULT NULL,
`item` varchar(30) DEFAULT NULL,
`price` double(8,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `tb_order_detail` */
insert into `tb_order_detail`(`id`,`order_id`,`num`,`item`,`price`) values (1,10,1,'玉米肉松蛋饼2P<br/>1X --玉米肉松蛋饼<br/>1',8.00),(2,10,1,'爆有料三谷饭团套餐<br/>1X --爆有料三谷饭团 1X ',10.00),(3,2,4,'玉米肉松蛋饼2P<br/>1 X --玉米肉松蛋饼<br/>',32.00);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
2. 测试类OrderTest.java
package yhmis;
import java.io.IOException;
import java.io.InputStream;
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.swliu.yhmis.pojo.Order;
import com.swliu.yhmis.pojo.OrderMapper;
public class OrderTest {
//成员变量,线程安全的
private SqlSessionFactory factory;
@Before //获取factory
public void init() throws IOException{
InputStream is =
Resources.getResourceAsStream("sqlMapConfig.xml");
factory = new SqlSessionFactoryBuilder().build(is);
}
@Test //查询某个订单
public void get(){
SqlSession session = factory.openSession();
OrderMapper mapper = session.getMapper(OrderMapper.class);
//Order order = mapper.get(2);
Order order = mapper.get(10);
System.out.println(order);
}
}
3.配置事务、数据源、映射文件、全局配置文件 sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 加载资源文件 -->
<properties resource="jdbc.properties"/>
<!-- 全局配置,驼峰规则,默认不开启,结果值null -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 简化类,起别名 -->
<typeAliases>
<typeAlias type="com.swliu.yhmis.pojo.Order" alias="Order"/>
<typeAlias type="com.swliu.yhmis.pojo.Door" alias="door"/>
<typeAlias type="com.swliu.yhmis.pojo.OrderDetail" alias="OrderDetail"/>
</typeAliases>
<!-- 配置环境、事务、数据源、映射文件 -->
<environments default="test">
<environment id="test">
<!-- 支持两种类型:JDBC/MANAGE -->
<transactionManager type="JDBC"/>
<!-- 数据源:POOLED/UNPOOLED/JNDI -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 告诉mybatis映射文件存在 -->
<mappers>
<mapper class="com.swliu.yhmis.pojo.OrderMapper"/>
</mappers>
</configuration>
jdbc.properties数据源配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/yhmis?characterEncoding=utf8
username=root
password=rootswliu
4.配置映射文件的命名空间(java包): 包的路径.映射文件的名称 OrderMapper.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.swliu.yhmis.pojo.OrderMapper">
<!-- 查询某个订单,包含门店信息,包含订单详情信息 -->
<select id="get" parameterType="int" resultMap="orderRM">
SELECT o.id,d.id as is_door_id,o.door_id,o.order_no,o.order_type,o.person_num,o.cashier,
o.create_time,o.end_time,o.payment_type,o.price,
d.name,d.tel
FROM
( SELECT id,door_id,order_no,order_type,person_num,
cashier,create_time,end_time,payment_type,price
FROM tb_order WHERE id=#{pid} ) o
LEFT JOIN
( SELECT id,NAME,tel FROM tb_door ) d
ON d.id=o.door_id
</select>
<!-- 订单的映射 -->
<resultMap type="Order" id="orderRM">
<!-- 主键 -->
<id property="id" column="id"/>
<!-- 普通属性 -->
<result property="orderNo" column="order_no"/>
<result property="orderType" column="order_type"/>
<result property="personNum" column="person_num"/>
<result property="cashier" column="cashier"/>
<result property="createTime" column="create_time"/>
<result property="endTime" column="end_time"/>
<result property="paymentType" column="payment_type"/>
<result property="price" column="price"/>
<!-- 对一,一个订单所属一个门店
property 关联对象中声明的名称
javaType 关联对象它对应对象类
-->
<association property="door" javaType="Door">
<!-- 主键 -->
<id property="id" column="is_door_id"/>
<!-- 普通属性 -->
<result property="name" column="name"/>
<result property="tel" column="tel"/>
</association>
</resultMap>
</mapper>
对多语法:
<?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.swliu.yhmis.pojo.OrderMapper">
<!-- 订单的映射 autoMapping自动映射和驼峰规则全局设定来配合 -->
<resultMap type="Order" id="orderResultMap" autoMapping="true">
<!-- 主键 -->
<id property="id" column="id"/>
<!-- 对一,一个订单所属一个门店
property 关联对象中声明的名称
javaType 关联对象它对应对象类
select 指的另外查询标签id
column 当前表中对应外键
-->
<association property="door" select="getDoorInfo" column="door_id" javaType="Door" autoMapping="true"/>
<!-- 对多,一个订单有多个订单详情
property pojo中配置的属性名称
ofType 集合元素类型
个人感觉:orderDetails无主表order的外键不适用于懒加载
<collection property="orderDetails" ofType="OrderDetail" autoMapping="true"/>
-->
</resultMap>
<!-- 查询某个订单,包含门店信息,包含订单详情信息 -->
<select id="get" parameterType="int" resultMap="orderResultMap">
select id,door_id,order_no,order_type,person_num,
cashier,create_time,end_time,payment_type,price
from tb_order where id=#{pid}
</select>
<!-- 查询某个订单对应门店信息 -->
<select id="getDoorInfo" parameterType="int" resultType="door">
select * from tb_door where id=#{id}
</select>
</mapper>
对一联查结果:
SELECT o.id,d.id as is_door_id,o.door_id,o.order_no,o.order_type,o.person_num,o.cashier,
o.create_time,o.end_time,o.payment_type,o.price,
d.name,d.tel
FROM
( SELECT id,door_id,order_no,order_type,person_num,cashier,
create_time,end_time,payment_type,price
FROM tb_order WHERE id=10 ) o
LEFT JOIN
( SELECT id,NAME,tel
FROM tb_door ) d
ON o.door_id=d.id;
对多联查结果:
SELECT
o.id,o.order_no,o.order_type,o.person_num,o.cashier,o.create_time,o.end_time,o.payment_type,o.price,
o.is_door_id,o.name,o.tel,
od.id AS is_order_detail_id,od.order_id,od.num,od.item,od.price
FROM
(
SELECT
o.id,o.order_no,o.order_type,o.person_num,o.cashier,o.create_time,o.end_time,o.payment_type,o.price,
d.id AS is_door_id,d.name,d.tel
FROM
( SELECT id,door_id,order_no,order_type,person_num,
cashier,create_time,end_time,payment_type,price
FROM tb_order WHERE id=10 ) o
LEFT JOIN
( SELECT id,NAME,tel FROM tb_door ) d
ON d.id=o.door_id
) o
LEFT JOIN
(
SELECT id,order_id,num,item,price
FROM tb_order_detail WHERE order_id=10
) od
ON o.id=od.order_id
SELECT
o.id,o.order_no,o.order_type,o.person_num,o.cashier,o.create_time,o.end_time,o.payment_type,o.price,
o.is_door_id,o.name,o.tel,
od.is_order_detail_id,od.order_id,od.num,od.item,od.price
FROM
(
SELECT
o.id,o.order_no,o.order_type,o.person_num,o.cashier,o.create_time,o.end_time,o.payment_type,o.price,
d.id AS is_door_id,d.name,d.tel
FROM
( SELECT id,door_id,order_no,order_type,person_num,
cashier,create_time,end_time,payment_type,price
FROM tb_order WHERE id=10 ) o
LEFT JOIN
( SELECT id,NAME,tel FROM tb_door ) d
ON d.id=o.door_id
) o
LEFT JOIN
(
SELECT id AS is_order_detail_id,order_id,num,item,price
FROM tb_order_detail WHERE order_id=10
) od
ON o.id=od.order_id
5.javaBean类BasePojo.java
package com.swliu.yhmis.pojo;
import java.io.Serializable;
//标识是序列化
public class BasePojo implements Serializable{
}
Order.java
package com.swliu.yhmis.pojo;
import java.util.Date;
import java.util.List;
public class Order extends BasePojo{
private static final long serialVersionUID = 1L;
//关联对象配置:
//描述外键,由订单出发去找门店信息,对一
private Door door;
//描述外键,由订单出发去找订单详情信息,对多(集合<> List<OrderDetail>)
private List<OrderDetail> orderDetails;
private Integer id;
//private Integer doorId;//配置对象关联后,实体类外键id用不着
private String orderNo;
private String orderType;
private Integer personNum;
private String cashier;
private Date createTime;
private Date endTime;
private String paymentType;
private Double price;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getOrderType() {
return orderType;
}
public void setOrderType(String orderType) {
this.orderType = orderType;
}
public Integer getPersonNum() {
return personNum;
}
public void setPersonNum(Integer personNum) {
this.personNum = personNum;
}
public String getCashier() {
return cashier;
}
public void setCashier(String cashier) {
this.cashier = cashier;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public String getPaymentType() {
return paymentType;
}
public void setPaymentType(String paymentType) {
this.paymentType = paymentType;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public Door getDoor() {
return door;
}
public void setDoor(Door door) {
this.door = door;
}
public List<OrderDetail> getOrderDetails() {
return orderDetails;
}
public void setOrderDetails(List<OrderDetail> orderDetails) {
this.orderDetails = orderDetails;
}
@Override
public String toString() {
return "Order [door=" + door + ", orderDetails=" + orderDetails + ", id=" + id + ", orderNo=" + orderNo
+ ", orderType=" + orderType + ", personNum=" + personNum + ", cashier=" + cashier + ", createTime="
+ createTime + ", endTime=" + endTime + ", paymentType=" + paymentType + ", price=" + price + "]";
}
}
Door.java
package com.swliu.yhmis.pojo;
public class Door extends BasePojo{
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private String tel;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return "Door [id=" + id + ", name=" + name + ", tel=" + tel + "]";
}
}
OrderDetail.java
package com.swliu.yhmis.pojo;
public class OrderDetail extends BasePojo{
private static final long serialVersionUID = 1L;
private Integer id;
//private Integer orderId;//配置对象关联后,实体类外键id用不着
private Integer num;
private String item;
private Double price;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "OrderDetail [id=" + id + ", num=" + num + ", item=" + item + ", price=" + price
+ "]";
}
}
6.log4j.properties日志打印
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
7.pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.swliu</groupId>
<artifactId>mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<argLine>-Dfile.encoding=UTF-8</argLine>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<!--
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>
</plugins>
</build>
-->
</project>
8.接口 OrderMapper.java
package com.swliu.yhmis.pojo;
public interface OrderMapper {
public Order get(Integer orderId);
}
打印信息: 略
版权声明:本文为qq_31338839原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。