文章目录
- 一 环境准备
-
- 三 完整参考内容
-
- 3.1 项目结构
- 3.2 pom.xml文件配置
- 3.3 mybatis-config.xml文件内容
- 3.4 db.properties
- 3.5 MybatisUtils.java文件配置
- 3.6 实体类
-
- 3.6.1 Bill
- 3.6.2 Provider
- 3.6.3 Role
- 3.6.4 User
- 3.7 Bill相关练习题
-
- 3.7.1 Bill接口
- 3.7.2 BillMapper.xml文件
- 3.7.3 Bill测试
- 3.8 Provider相关练习
-
- 3.8.1 Provider接口
- 3.8.2 ProviderMapper.xml文件
- 3.8.3 Provider测试
- 3.9 RoleMapper相关练习
-
- 3.9.1 Role接口
- 3.9.2 RoleMapper.xml文件
- 3.9.3 Role测试
- 3.10 User相关练习
-
- 3.10.1 User接口
- 3.10.2 UserMapper.xml文件
- 3.10.3 User测试
- 写下本文的意义:在于可以为正在学习Mybatis动态SQL的同学提供一些资料和参考答案
- 手握命运,面向未来!星光不负赶路人!
一 环境准备
1.1 用到的工具
- IDEA
- Lombok插件
- Mysql数据库
- maven环境
1.2 用到的数据库源码
`smbms_provider``smbms_bill`CREATE TABLE `teacher` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师');
CREATE TABLE `student` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`tid` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fktid` (`tid`),
CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');
CREATE TABLE `blog` (
`id` VARCHAR(50) NOT NULL COMMENT '博客id',
`title` VARCHAR(100) NOT NULL COMMENT '博客标题',
`author` VARCHAR(30) NOT NULL COMMENT '博客作者',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`views` INT(30) NOT NULL COMMENT '浏览量'
) ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE DATABASE smbms;
USE `smbms`;
DROP TABLE IF EXISTS `smbms_address`;
CREATE TABLE `smbms_address` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`contact` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系人姓名',
`addressDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '收货地址明细',
`postCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '邮编',
`tel` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系人电话',
`createdBy` BIGINT(20) DEFAULT NULL COMMENT '创建者',
`creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
`modifyBy` BIGINT(20) DEFAULT NULL COMMENT '修改者',
`modifyDate` DATETIME DEFAULT NULL COMMENT '修改时间',
`userId` BIGINT(20) DEFAULT NULL COMMENT '用户ID',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `smbms_address`(`id`,`contact`,`addressDesc`,`postCode`,`tel`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`,`userId`)
VALUES (1,'王丽','北京市东城区东交民巷44号','100010','13678789999',1,'2016-04-13 00:00:00',NULL,NULL,1),
(2,'张红丽','北京市海淀区丹棱街3号','100000','18567672312',1,'2016-04-13 00:00:00',NULL,NULL,1),
(3,'任志强','北京市东城区美术馆后街23号','100021','13387906742',1,'2016-04-13 00:00:00',NULL,NULL,1),
(4,'曹颖','北京市朝阳区朝阳门南大街14号','100053','13568902323',1,'2016-04-13 00:00:00',NULL,NULL,2),
(5,'李慧','北京市西城区三里河路南三巷3号','100032','18032356666',1,'2016-04-13 00:00:00',NULL,NULL,3),
(6,'王国强','北京市顺义区高丽营镇金马工业区18号','100061','13787882222',1,'2016-04-13 00:00:00',NULL,NULL,3);
DROP TABLE IF EXISTS `smbms_bill`;
CREATE TABLE `smbms_bill` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`billCode` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '账单编码',
`productName` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品名称',
`productDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品描述',
`productUnit` VARCHAR(10) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品单位',
`productCount` DECIMAL(20,2) DEFAULT NULL COMMENT '商品数量',
`totalPrice` DECIMAL(20,2) DEFAULT NULL COMMENT '商品总额',
`isPayment` INT(10) DEFAULT NULL COMMENT '是否支付(1:未支付 2:已支付)',
`createdBy` BIGINT(20) DEFAULT NULL COMMENT '创建者(userId)',
`creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
`modifyBy` BIGINT(20) DEFAULT NULL COMMENT '更新者(userId)',
`modifyDate` DATETIME DEFAULT NULL COMMENT '更新时间',
`providerId` BIGINT(20) DEFAULT NULL COMMENT '供应商ID',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `smbms_bill`(`id`,`billCode`,`productName`,`productDesc`,`productUnit`,`productCount`,
`totalPrice`,`isPayment`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`,`providerId`)
VALUES (2,'BILL2016_002','香皂、肥皂、药皂','日用品-皂类','块','1000.00','10000.00',2,1,'2016-03-23 04:20:40',NULL,NULL,13),
(3,'BILL2016_003','大豆油','食品-食用油','斤','300.00','5890.00',2,1,'2014-12-14 13:02:03',NULL,NULL,6),
(4,'BILL2016_004','橄榄油','食品-进口食用油','斤','200.00','9800.00',2,1,'2013-10-10 03:12:13',NULL,NULL,7),
(5,'BILL2016_005','洗洁精','日用品-厨房清洁','瓶','500.00','7000.00',2,1,'2014-12-14 13:02:03',NULL,NULL,9),
(6,'BILL2016_006','美国大杏仁','食品-坚果','袋','300.00','5000.00',2,1,'2016-04-14 06:08:09',NULL,NULL,4),
(7,'BILL2016_007','沐浴液、精油','日用品-沐浴类','瓶','500.00','23000.00',1,1,'2016-07-22 10:10:22',NULL,NULL,14),
(8,'BILL2016_008','不锈钢盘碗','日用品-厨房用具','个','600.00','6000.00',2,1,'2016-04-14 05:12:13',NULL,NULL,14),
(9,'BILL2016_009','塑料杯','日用品-杯子','个','350.00','1750.00',2,1,'2016-02-04 11:40:20',NULL,NULL,14),
(10,'BILL2016_010','豆瓣酱','食品-调料','瓶','200.00','2000.00',2,1,'2013-10-29 05:07:03',NULL,NULL,8),
(11,'BILL2016_011','海之蓝','饮料-国酒','瓶','50.00','10000.00',1,1,'2016-04-14 16:16:00',NULL,NULL,1),
(12,'BILL2016_012','芝华士','饮料-洋酒','瓶','20.00','6000.00',1,1,'2016-09-09 17:00:00',NULL,NULL,1),
(13,'BILL2016_013','长城红葡萄酒','饮料-红酒','瓶','60.00','800.00',2,1,'2016-11-14 15:23:00',NULL,NULL,1),
(14,'BILL2016_014','泰国香米','食品-大米','斤','400.00','5000.00',2,1,'2016-10-09 15:20:00',NULL,NULL,3),
(15,'BILL2016_015','东北大米','食品-大米','斤','600.00','4000.00',2,1,'2016-11-14 14:00:00',NULL,NULL,3),
(16,'BILL2016_016','可口可乐','饮料','瓶','2000.00','6000.00',2,1,'2012-03-27 13:03:01',NULL,NULL,2),
(17,'BILL2016_017','脉动','饮料','瓶','1500.00','4500.00',2,1,'2016-05-10 12:00:00',NULL,NULL,2),
(`smbms_provider`);
DROP TABLE IF EXISTS `smbms_provider`;
CREATE TABLE `smbms_provider` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`proCode` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商编码',
`proName` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商名称',
`proDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商详细描述',
`proContact` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商联系人',
`proPhone` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系电话',
`proAddress` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地址',
`proFax` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '传真',
`createdBy` BIGINT(20) DEFAULT NULL COMMENT '创建者(userId)',
`creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
`modifyDate` DATETIME DEFAULT NULL COMMENT '更新时间',
`modifyBy` BIGINT(20) DEFAULT NULL COMMENT '更新者(userId)',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `smbms_provider`(`id`,`proCode`,`proName`,`proDesc`,`proContact`,`proPhone`,`proAddress`,`proFax`,
`createdBy`,`creationDate`,`modifyDate`,`modifyBy`)
VALUES (1,'BJ_GYS001','北京三木堂商贸有限公司','长期合作伙伴,主营产品:茅台、五粮液、郎酒、酒鬼酒、泸州老窖、赖茅酒、法国红酒等','张国强','13566667777','北京市丰台区育芳园北路','010-58858787',1,'2013-03-21 16:52:07',NULL,NULL),
(2,'HB_GYS001','石家庄帅益食品贸易有限公司','长期合作伙伴,主营产品:饮料、水饮料、植物蛋白饮料、休闲食品、果汁饮料、功能饮料等','王军','13309094212','河北省石家庄新华区','0311-67738876',1,'2016-04-13 04:20:40',NULL,NULL),
(3,'GZ_GYS001','深圳市泰香米业有限公司','初次合作伙伴,主营产品:良记金轮米,龙轮香米等','郑程瀚','13402013312','广东省深圳市福田区深南大道6006华丰大厦','0755-67776212',1,'2014-03-21 16:56:07',NULL,NULL),
(4,'GZ_GYS002','深圳市喜来客商贸有限公司','长期合作伙伴,主营产品:坚果炒货.果脯蜜饯.天然花茶.营养豆豆.特色美食.进口食品.海味零食.肉脯肉','林妮','18599897645','广东省深圳市福龙工业区B2栋3楼西','0755-67772341',1,'2013-03-22 16:52:07',NULL,NULL),
(5,'JS_GYS001','兴化佳美调味品厂','长期合作伙伴,主营产品:天然香辛料、鸡精、复合调味料','徐国洋','13754444221','江苏省兴化市林湖工业区','0523-21299098',1,'2015-11-22 16:52:07',NULL,NULL),
(6,'BJ_GYS002','北京纳福尔食用油有限公司','长期合作伙伴,主营产品:山茶油、大豆油、花生油、橄榄油等','马莺','13422235678','北京市朝阳区珠江帝景1号楼','010-588634233',1,'2012-03-21 17:52:07',NULL,NULL),
(7,'BJ_GYS003','北京国粮食用油有限公司','初次合作伙伴,主营产品:花生油、大豆油、小磨油等','王驰','13344441135','北京大兴青云店开发区','010-588134111',1,'2016-04-13 00:00:00',NULL,NULL),
(8,'ZJ_GYS001','慈溪市广和绿色食品厂','长期合作伙伴,主营产品:豆瓣酱、黄豆酱、甜面酱,辣椒,大蒜等农产品','薛圣丹','18099953223','浙江省宁波市慈溪周巷小安村','0574-34449090',1,'2013-11-21 06:02:07',NULL,NULL),
(9,'GX_GYS001','优百商贸有限公司','长期合作伙伴,主营产品:日化产品','李立国','13323566543','广西南宁市秀厢大道42-1号','0771-98861134',1,'2013-03-21 19:52:07',NULL,NULL),
(10,'JS_GYS002','南京火头军信息技术有限公司','长期合作伙伴,主营产品:不锈钢厨具等','陈女士','13098992113','江苏省南京市浦口区浦口大道1号新城总部大厦A座903室','025-86223345',1,'2013-03-25 16:52:07',NULL,NULL),
(11,'GZ_GYS003','广州市白云区美星五金制品厂','长期合作伙伴,主营产品:海绵床垫、坐垫、靠垫、海绵枕头、头枕等','梁天','13562276775','广州市白云区钟落潭镇福龙路20号','020-85542231',1,'2016-12-21 06:12:17',NULL,NULL),
(12,'BJ_GYS004','北京隆盛日化科技','长期合作伙伴,主营产品:日化环保清洗剂,家居洗涤专卖、洗涤用品网、墙体除霉剂、墙面霉菌清除剂等','孙欣','13689865678','北京市大兴区旧宫','010-35576786',1,'2014-11-21 12:51:11',NULL,NULL),
(13,'SD_GYS001','山东豪克华光联合发展有限公司','长期合作伙伴,主营产品:洗衣皂、洗衣粉、洗衣液、洗洁精、消杀类、香皂等','吴洪转','13245468787','山东济阳济北工业区仁和街21号','0531-53362445',1,'2015-01-28 10:52:07',NULL,NULL),
(14,'JS_GYS003','无锡喜源坤商行','长期合作伙伴,主营产品:日化品批销','周一清','18567674532','江苏无锡盛岸西路','0510-32274422',1,'2016-04-23 11:11:11',NULL,NULL),
(15,'ZJ_GYS002','乐摆日用品厂','长期合作伙伴,主营产品:各种中、高档塑料杯,塑料乐扣水杯(密封杯)、保鲜杯(保鲜盒)、广告杯、礼品杯','王世杰','13212331567','浙江省金华市义乌市义东路','0579-34452321',1,'2016-08-22 10:01:30',NULL,NULL);
DROP TABLE IF EXISTS `smbms_role`;
CREATE TABLE `smbms_role` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`roleCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色编码',
`roleName` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色名称',
`createdBy` BIGINT(20) DEFAULT NULL COMMENT '创建者',
`creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
`modifyBy` BIGINT(20) DEFAULT NULL COMMENT '修改者',
`modifyDate` DATETIME DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `smbms_role`(`id`,`roleCode`,`roleName`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`)
VALUES (1,'SMBMS_ADMIN','系统管理员',1,'2016-04-13 00:00:00',NULL,NULL),
(2,'SMBMS_MANAGER','经理',1,'2016-04-13 00:00:00',NULL,NULL),
(3,'SMBMS_EMPLOYEE','普通员工',1,'2016-04-13 00:00:00',NULL,NULL);
DROP TABLE IF EXISTS `smbms_user`;
CREATE TABLE `smbms_user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`userCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户编码',
`userName` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户名称',
`userPassword` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户密码',
`gender` INT(10) DEFAULT NULL COMMENT '性别(1:女、 2:男)',
`birthday` DATE DEFAULT NULL COMMENT '出生日期',
`phone` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '手机',
`address` VARCHAR(30) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地址',
`userRole` BIGINT(20) DEFAULT NULL COMMENT '用户角色(取自角色表-角色id)',
`createdBy` BIGINT(20) DEFAULT NULL COMMENT '创建者(userId)',
`creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
`modifyBy` BIGINT(20) DEFAULT NULL COMMENT '更新者(userId)',
`modifyDate` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `smbms_user`(`id`,`userCode`,`userName`,`userPassword`,`gender`,`birthday`,
`phone`,`address`,`userRole`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`)
VALUES (1,'admin','系统管理员','1234567',1,'1983-10-10','13688889999','北京市海淀区成府路207号',1,1,'2013-03-21 16:52:07',NULL,NULL),
(2,'liming','李明','0000000',2,'1983-12-10','13688884457','北京市东城区前门东大街9号',2,1,'2014-12-31 19:52:09',NULL,NULL),
(5,'hanlubiao','韩路彪','0000000',2,'1984-06-05','18567542321','北京市朝阳区北辰中心12号',2,1,'2014-12-31 19:52:09',NULL,NULL),
(6,'zhanghua','张华','0000000',1,'1983-06-15','13544561111','北京市海淀区学院路61号',3,1,'2013-02-11 10:51:17',NULL,NULL),
(7,'wangyang','王洋','0000000',2,'1982-12-31','13444561124','北京市海淀区西二旗辉煌国际16层',3,1,'2014-06-11 19:09:07',NULL,NULL),
(8,'zhaoyan','赵燕','0000000',1,'1986-03-07','18098764545','北京市海淀区回龙观小区10号楼',3,1,'2016-04-21 13:54:07',NULL,NULL),
(10,'sunlei','孙磊','0000000',2,'1981-01-04','13387676765','北京市朝阳区管庄新月小区12楼',3,1,'2015-05-06 10:52:07',NULL,NULL),
(11,'sunxing','孙兴','0000000',2,'1978-03-12','13367890900','北京市朝阳区建国门南大街10号',3,1,'2016-11-09 16:51:17',NULL,NULL),
(12,'zhangchen','张晨','0000000',1,'1986-03-28','18098765434','朝阳区管庄路口北柏林爱乐三期13号楼',3,1,'2016-08-09 05:52:37',1,'2016-04-14 14:15:36'),
(13,'dengchao','邓超','0000000',2,'1981-11-04','13689674534','北京市海淀区北航家属院10号楼',3,1,'2016-07-11 08:02:47',NULL,NULL),
(14,'yangguo','杨过','0000000',2,'1980-01-01','13388886623','北京市朝阳区北苑家园茉莉园20号楼',3,1,'2015-02-01 03:52:07',NULL,NULL),
(15,'zhaomin','赵敏','0000000',1,'1987-12-04','18099897657','北京市昌平区天通苑3区12号楼',2,1,'2015-09-12 12:02:12',NULL,NULL);
CREATE DATABASE `ssmbuild`;
USE `ssmbuild`;
DROP TABLE IF EXISTS `books`;
CREATE TABLE `books` (
`bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',
`bookName` VARCHAR(100) NOT NULL COMMENT '书名',
`bookCounts` INT(11) NOT NULL COMMENT '数量',
`detail` VARCHAR(200) NOT NULL COMMENT '描述',
KEY `bookID` (`bookID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES
(1,'Java',1,'从入门到放弃'),
(2,'MySQL',10,'从删库到跑路'),
(3,'Linux',5,'从进门到进牢');
三 完整参考内容
- 练习之前创建maven项目,并确保成功连接到数据库
3.1 项目结构
- 这里采用图片展示的方式来说明
![关于Mybatis的深入学习(4)之动态SQL二十四道练习_第1张图片](http://img.e-com-net.com/image/info8/a70e9548f2ce4824b89d5b2bf39e18a2.jpg)
![关于Mybatis的深入学习(4)之动态SQL二十四道练习_第2张图片](http://img.e-com-net.com/image/info8/93dce989e6ba444c9e3f35a835de0a64.jpg)
3.2 pom.xml文件配置
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>truefiltering>
resource>
<resource>
<directory>src/main/resourcesdirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>truefiltering>
resource>
resources>
build>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.29version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.6version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.24version>
<scope>providedscope>
dependency>
dependencies>
3.3 mybatis-config.xml文件内容
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
settings>
<typeAliases>
<package name="com.yang.pojo"/>
typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<mappers>
<package name="com.yang.dao"/>
mappers>
configuration>
3.4 db.properties
- driver和url的内容在连接Mysql5.0和Mysql8.0有所不同
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/smbms?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username=root
password=xxxxx
3.5 MybatisUtils.java文件配置
- SqlSessionFactory–>SqlSession
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 java.io.IOException;
import java.io.InputStream;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession()
{
return sqlSessionFactory.openSession(true);
}
}
3.6 实体类
3.6.1 Bill
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.sql.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Bill {
private Integer id;
private String billCode;
private String productName;
private String productDesc;
private String productUnit;
private BigDecimal productCount;
private BigDecimal totalPrice;
private Integer isPayment;
private Integer providerId;
private Integer createdBy;
private Date creationDate;
private Integer modifyBy;
private Date modifyDate;
private String providerName;
}
3.6.2 Provider
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.sql.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Provider {
private Integer id;
private String proCode;
private String proName;
private String proDesc;
private String proContact;
private String proPhone;
private String proAddress;
private String proFax;
private Integer createdBy;
private Date creationDate;
private Date modifyDate;
private Integer modifyBy;
}
3.6.3 Role
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.sql.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Role {
private Integer id;
private String roleCode;
private String roleName;
private Integer createdBy;
private Date creationDate;
private Integer modifyBy;
private Date modifyDate;
}
3.6.4 User
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.sql.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String userCode;
private String userName;
private String userPassword;
private Integer gender;
private Date birthday;
private String phone;
private String address;
private Integer userRole;
private Integer createdBy;
private Date creationDate;
private Integer modifyBy;
private Date modifyDate;
private Integer age;
private String userRoleName;
}
3.7 Bill相关练习题
3.7.1 Bill接口
import com.yang.pojo.Bill;
import org.apache.ibatis.annotations.Param;
import java.math.BigInteger;
import java.util.List;
public interface BillMapper {
int getBillCountByProviderId(@Param("providerId") Integer providerId);
int add(Bill bill);
List<Bill> getBillList(@Param("productName") String productName,
@Param("providerId") String providerId,
@Param("isPayment") String isPayment,
@Param("from") Integer from,
@Param("pageSize") Integer pageSize);
int getBillCount(@Param("productName") String productName,
@Param("providerId") int providerId,
@Param("isPayment") int isPayment);
int deleteBillById(@Param("id") Integer id);
Bill getBillById(@Param("id") Integer id);
int modify(Bill bill);
int deleteBillByProviderId(@Param("providerId") Integer providerId);
}
3.7.2 BillMapper.xml文件
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yang.dao.Bill.BillMapper">
<select id="getBillCountByProviderId" resultType="java.lang.Integer" parameterType="integer">
select count(*) from smbms_bill where providerId=#{providerId};
select>
<insert id="add" parameterType="bill" >
insert into smbms.smbms_bill (id,billCode,productName,productDesc,productUnit,
productCount,totalPrice,isPayment,providerId,
createdBy,creationDate)
values
(#{id},#{billCode},#{productName},#{productDesc},#{productUnit},
#{productCount},#{totalPrice},#{isPayment},#{providerId},#{createdBy},#{creationDate})
insert>
<select id="getBillList" resultType="bill">
select * from smbms.smbms_bill
<where>
<if test="productName !=null">
and productName like concat ('%',#{productName},'%')
if>
<if test="providerId !=null">
and providerId like concat('%',#{providerId},'%')
if>
<if test="isPayment !=null">
and isPayment like concat ('%',#{isPayment},'%')
if>
where>
limit #{from},#{pageSize}
select>
<select id="getBillCount" resultType="int">
select count(1) from smbms_bill b,smbms_provider p
<where>
b.providerId=p.id
<if test="productName != null and productName != ''">
and productName like concat ('%',#{productName},'%')
if>
<if test="providerId != null">
and providerId = #{providerId}
if>
<if test="isPayment != null">
and isPayment = #{isPayment}
if>
where>
select>
<delete id="deleteBillById" parameterType="Integer">
delete from smbms_bill where id=#{id}
delete>
<select id="getBillById" parameterType="Integer" resultType="bill">
select * from smbms_bill where id=#{id}
select>
<update id="modify" parameterType="bill">
update smbms_bill
<set>
<if test="productName!=null">productName=#{productName}if>
set>
<where>
id=#{id}
where>
update>
<delete id="deleteBillByProviderId" parameterType="Integer">
delete from smbms_bill
<where>
providerId=#{providerId}
where>
delete>
mapper>
3.7.3 Bill测试
import com.yang.dao.Bill.BillMapper;
import com.yang.pojo.Bill;
import com.yang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.math.BigDecimal;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
public class TestBillMapper {
@Test
public void getBillCountByProviderId() {
SqlSession sqlSession = MybatisUtils.getSession();
BillMapper mapper = sqlSession.getMapper(BillMapper.class);
int res = mapper.getBillCountByProviderId(2);
System.out.println("该供应商的订单数量为:"+res);
sqlSession.close();
}
@Test
public void add() {
SqlSession sqlSession = MybatisUtils.getSession();
BillMapper mapper = sqlSession.getMapper(BillMapper.class);
Bill bill = new Bill();
bill.setId(19);
bill.setBillCode("BILL2016_019");
bill.setProductName("香飘飘");
bill.setProductDesc("饮料");
bill.setProductUnit("瓶");
bill.setProductCount(BigDecimal.valueOf(3000.00));
bill.setTotalPrice(BigDecimal.valueOf(6000.00));
bill.setIsPayment(2);
bill.setCreatedBy(1);
bill.setProviderId(2);
int res = mapper.add(bill);
if(res>0) {
System.out.println("插入成功");
}
sqlSession.close();
}
@Test
public void getBillList()throws Exception{
SqlSession sqlSession = MybatisUtils.getSession();
BillMapper mapper = sqlSession.getMapper(BillMapper.class);
List<Bill> billList = mapper.getBillList("油", "1", "1", 0,2);
for (Bill bill : billList) {
System.out.println(bill);
}
sqlSession.close();
}
@Test
public void getBillCount() {
SqlSession sqlSession = MybatisUtils.getSession();
BillMapper mapper = sqlSession.getMapper(BillMapper.class);
int billCount = mapper.getBillCount("安",2,2);
System.out.println("供货商数量为:"+billCount);
sqlSession.close();
}
@Test
public void deleteBillById() {
SqlSession sqlSession = MybatisUtils.getSession();
BillMapper mapper = sqlSession.getMapper(BillMapper.class);
int res = mapper.deleteBillById(19);
if(res>0) {
System.out.println("删除成功!");
}
sqlSession.close();
}
@Test
public void getBillById() {
SqlSession sqlSession = MybatisUtils.getSession();
BillMapper mapper = sqlSession.getMapper(BillMapper.class);
Bill bill = mapper.getBillById(19);
System.out.println(bill);
sqlSession.close();
}
@Test
public void modify() {
SqlSession sqlSession = MybatisUtils.getSession();
BillMapper mapper = sqlSession.getMapper(BillMapper.class);
Bill bill = new Bill();
bill.setProductName("安慕希");
bill.setId(19);
mapper.modify(bill);
sqlSession.close();
}
@Test
public void deleteBillByProviderId() {
SqlSession sqlSession = MybatisUtils.getSession();
BillMapper mapper = sqlSession.getMapper(BillMapper.class);
int res = mapper.deleteBillByProviderId(20);
if( res>0) {
System.out.println("删除成功!");
}
sqlSession.close();
}
}
3.8 Provider相关练习
3.8.1 Provider接口
import com.yang.pojo.Provider;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ProviderMapper {
int add( Provider provider);
List<Provider> getProviderList(@Param("proName") String proName,
@Param("proCode") String proCode,
@Param("from") Integer currentPageNo,
@Param("pageSize") Integer pageSize);
List<Provider> getProList();
int getProviderCount(@Param("proName") String proName,
@Param("proCode") String proCode);
int deleteProviderById(@Param("id") Integer delId);
Provider getProviderById(@Param("id") Integer id);
int modify(Provider provider);
}
3.8.2 ProviderMapper.xml文件
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yang.dao.Provider.ProviderMapper">
<insert id="add" parameterType="provider">
insert into smbms_provider(proCode,proName,proDesc,proContact,proPhone,proAddress,proFax,createdBy,creationDate)
values(#{proCode},#{proName},#{proDesc},#{proContact},#{proPhone},#{proAddress},#{proFax},#{createdBy},#{creationDate})
insert>
<select id="getProviderList" parameterType="String" resultType="provider">
select * from smbms.smbms_provider
<where>
<if test="proName !=null">
and proName like concat('%',#{proName},'%')
if>
<if test="proCode !=null">
and proCode like concat ('%',#{proCode},'%')
if>
where>
select>
<select id="getProList" resultType="Provider">
select * from smbms_provider;
select>
<select id="getProviderCount" resultType="Integer">
select count(1) from smbms_provider
<where>
<if test="proName != null">proName like CONCAT('%',#{proName},'%')if>
<if test="proCode != null">and proCode like CONCAT('%',#{proCode},'%')if>
where>
select>
<delete id="deleteProviderById">
delete from smbms_provider where id=#{id};
delete>
<select id="getProviderById" resultType="Provider">
select * from smbms_provider where id = #{id}
select>
<update id="modify" parameterType="provider">
update smbms_provider
<trim prefix="set" suffixOverrides="," suffix="where id=#{id}">
<if test="proName!=null">proName=#{proName},if>
<if test="proCode!=null">proCode=#{proCode},if>
<if test="proDesc!=null">proDesc=#{proDesc},if>
<if test="proContact!=null">proContact=#{proContact},if>
<if test="proPhone!=null">proPhone=#{proPhone},if>
<if test="proAddress!=null">proAddress=#{proAddress},if>
<if test="proFax!=null">proFax=#{proFax},if>
<if test="createdBy!=null">createdBy=#{createdBy},if>
<if test="creationDate!=null">creationDate=#{creationDate},if>
<if test="modifyDate!=null">modifyDate=#{modifyDate},if>
<if test="modifyBy!=null">modifyBy=#{modifyBy}if>
trim>
update>
mapper>
3.8.3 Provider测试
public class TestProviderMapper {
@Test
public void add() {
SqlSession sqlSession = MybatisUtils.getSession();
ProviderMapper mapper = sqlSession.getMapper(ProviderMapper.class);
Provider provider = new Provider(21,"ZJ_GYS002",
"乐摆日用品厂2","长期合作伙伴,主营产品:2",
"王世杰","13212331567",
"浙江省金华市义乌市义东路",
"0579-34452321",1,null,
null,null);
mapper.add(provider);
sqlSession.close();
}
@Test
public void getProviderList(){
SqlSession sqlSession = MybatisUtils.getSession();
ProviderMapper mapper = sqlSession.getMapper(ProviderMapper.class);
List<Provider> providerList = mapper.getProviderList("日","00",null,null);
for (Provider provider : providerList) {
System.out.println(provider);
}
sqlSession.close();
}
@Test
public void getProList() {
SqlSession sqlSession = MybatisUtils.getSession();
ProviderMapper mapper = sqlSession.getMapper(ProviderMapper.class);
List<Provider> proLists = mapper.getProList();
for(Provider provider:proLists) {
System.out.println(provider);
}
sqlSession.close();
}
@Test
public void getProviderCount(){
SqlSession session = MybatisUtils.getSession();
ProviderMapper mapper = session.getMapper(ProviderMapper.class);
int providerCount = mapper.getProviderCount("深圳", "GZ");
System.out.println(providerCount);
session.close();
}
@Test
public void deleteProviderById(){
SqlSession session = MybatisUtils.getSession();
ProviderMapper mapper = session.getMapper(ProviderMapper.class);
mapper.deleteProviderById(17);
session.close();
}
@Test
public void getProviderById(){
SqlSession session = MybatisUtils.getSession();
ProviderMapper mapper = session.getMapper(ProviderMapper.class);
mapper.getProviderById(16);
session.close();
}
@Test
public void modify() {
SqlSession session = MybatisUtils.getSession();
ProviderMapper mapper = session.getMapper(ProviderMapper.class);
mapper.modify(new Provider(16,"ZJ_GYS002","安徽皮革厂",null,null,
null,null,null,null,null,null,null));
session.close();
}
}
3.9 RoleMapper相关练习
3.9.1 Role接口
import com.yang.pojo.Role;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface RoleMapper {
List<Role> getRoleList();
int add(Role role);
int deleteRoleById(@Param("id") Integer delId);
int modify(Role role);
Role getRoleById(@Param("id") Integer id);
int roleCodeIsExist(@Param("roleCode") String roleCode);
}
3.9.2 RoleMapper.xml文件
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yang.dao.Role.RoleMapper">
<select id="getRoleList" resultType="Role">
select * from smbms_role;
select>
<insert id="add" parameterType="Role">
insert into smbms_role values (#{id},#{roleCode},#{roleName},#{createdBy},
#{creationDate},#{modifyBy},#{modifyDate});
insert>
<delete id="deleteRoleById" parameterType="Integer">
delete from smbms_role where id = #{id};
delete>
<update id="modify" parameterType="Role">
update smbms_role
<set>
<if test="roleCode != null">
roleCode=#{roleCode},
if>
<if test="roleName != null">
roleName=#{roleName},
if>
<if test="createdBy != null">
createdBy=#{createdBy},
if>
<if test="creationDate != null">
creationDate=#{creationDate},
if>
<if test="modifyBy != null">
modifyBy=#{modifyBy},
if>
<if test="modifyDate != null">
modifyDate=#{modifyDate}
if>
set>
where id = #{id}
update>
<select id="getRoleById" resultType="Role">
select * from smbms_role where id = #{id};
select>
<select id="roleCodeIsExist" parameterType="String" resultType="Integer">
select count(*) from smbms_role where roleCode=#{roleCode}
select>
mapper>
3.9.3 Role测试
import com.yang.dao.Role.RoleMapper;
import com.yang.pojo.Role;
import com.yang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.sql.Date;
import java.util.List;
public class TestRoleMapper {
@Test
public void getRoleList(){
SqlSession session = MybatisUtils.getSession();
RoleMapper mapper = session.getMapper(RoleMapper.class);
List<Role> roleList = mapper.getRoleList();
for (Role role : roleList) {
System.out.println(role);
}
session.close();
}
@Test
public void add() {
SqlSession session = MybatisUtils.getSession();
RoleMapper mapper = session.getMapper(RoleMapper.class);
mapper.add(new Role(4,"SMBMS_Boss","老板",1, null,null,null));
session.close();
}
@Test
public void deleteRoleById(){
SqlSession session = MybatisUtils.getSession();
RoleMapper mapper = session.getMapper(RoleMapper.class);
mapper.deleteRoleById(4);
session.close();
}
@Test
public void modify() {
SqlSession session = MybatisUtils.getSession();
RoleMapper mapper = session.getMapper(RoleMapper.class);
mapper.modify(new Role(1,null,null,null,null,2, null));
session.close();
}
@Test
public void getRoleById(){
SqlSession session = MybatisUtils.getSession();
RoleMapper mapper = session.getMapper(RoleMapper.class);
Role role = mapper.getRoleById(2);
System.out.println(role);
session.close();
}
@Test
public void roleCodeIsExist(){
SqlSession session = MybatisUtils.getSession();
RoleMapper mapper = session.getMapper(RoleMapper.class);
int i = mapper.roleCodeIsExist("SMBMS_ADMIN");
System.out.println(i);
session.close();
}
}
3.10 User相关练习
3.10.1 User接口
package com.yang.dao.User;
import com.yang.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.HashMap;
import java.util.List;
public interface UserMapper {
public User getLoginUser(@Param("userCode") String userCode);
public int add(HashMap<String, Object> map);
public List<User> getUserList(@Param("userName") String userName,
@Param("userRole") Integer userRole,
@Param("from") Integer from,
@Param("pageSize") Integer pageSize);
public int getUserCount(@Param("userName") String userName,
@Param("userRole") Integer userRole);
public int deleteUserById(@Param("id") Integer id);
public User getUserById(@Param("id") Integer id);
public int modify(User user);
public int updatePwd(@Param("id") Integer id,@Param("pwd") String pwd);
}
3.10.2 UserMapper.xml文件
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yang.dao.User.UserMapper">
<select id="getLoginUser" parameterType="String" resultType="User">
select * from smbms_user
<trim prefix="where">
<if test="userCode != null">
userCode = #{userCode}
if>
trim>
select>
<insert id="add" parameterType="map">
insert into smbms_user values (#{id},#{userCode},#{userName},#{userPassword},#{gender},#{birthday},
#{phone},#{address},#{userRole},#{createdBy},#{creationDate},#{modifyBy}
,#{modifyDate});
insert>
<select id="getUserList" resultType="user">
select u.*,r.roleName from smbms_user u,smbms_role r where u.userRole=r.id
<if test="userRole!= null">and u.userRole = #{userRole} if>
<if test="userName!= null and userName!=''">and u.userName like CONCAT('%',#{userName},'%')if>
order by creationDate DESC limit #{from},#{pageSize}
select>
<select id="getUserCount" resultType="Integer">
select count(1) as count from smbms_user u,smbms_role r where u.userRole=r.id
<if test="userRole!=null">and userRole=#{userRole}if>
<if test="userName!=null and userName!=''">and userName like CONCAT('%',#{userName},'%')if>
select>
<delete id="deleteUserById" parameterType="Integer">
delete from smbms_user where id = #{id};
delete>
<select id="getUserById" resultType="User">
select * from smbms_user where id = #{id};
select>
<update id="modify" parameterType="Role">
update smbms_user
<trim prefix="set" suffixOverrides="," suffix="where id = #{id}">
<if test="userCode != null">
userCode=#{userCode},
if>
<if test="userName != null">
userName=#{userName},
if>
<if test="userPassword != null">
userPassword=#{userPassword},
if>
<if test="gender != null">
gender=#{gender},
if>
<if test="birthday != null">
birthday=#{birthday},
if>
<if test="phone != null">
phone=#{phone},
if>
<if test="address != null">
address=#{address},
if>
<if test="userRole != null">
userRole=#{userRole},
if>
<if test="createdBy != null">
createdBy=#{createdBy},
if>
<if test="creationDate != null">
creationDate=#{creationDate},
if>
<if test="modifyBy != null">
modifyBy=#{modifyBy},
if>
<if test="modifyDate != null">
modifyDate=#{modifyDate}
if>
trim>
update>
<update id="updatePwd">
update smbms_user set userPassword = #{pwd} where id = #{id}
update>
mapper>
3.10.3 User测试
import com.yang.dao.User.UserMapper;
import com.yang.pojo.User;
import com.yang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
public class TestUserMapper {
public static Date getCurrentDate() throws ParseException {
Date date=new Date();
SimpleDateFormat sd=new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
String format = sd.format(date);
return sd.parse(format);
}
@Test
public void getLoginUser(){
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.getLoginUser("liming");
System.out.println(user);
session.close();
}
@Test
public void add() throws ParseException {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("id",16);
map.put("userCode","duxuan");
map.put("userName","杜轩");
map.put("userPassword","root");
map.put("gender",1);
map.put("birthday",null);
map.put("phone","110");
map.put("address","上海");
map.put("userRole",3);
map.put("createdBy",1);
map.put("creationDate",getCurrentDate());
mapper.add(map);
session.close();
}
@Test
public void getUserList(){
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.getUserList("孙", 3, 0, 30);
for (User user : users) {
System.out.println(user.toString());
}
session.close();
}
@Test
public void getUserCount(){
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
int times = mapper.getUserCount("邓超", 3);
System.out.println(times);
session.close();
}
@Test
public void deleteUserById(){
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.deleteUserById(16);
session.close();
}
@Test
public void getUserById(){
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.getUserById(15);
System.out.println(user);
session.close();
}
@Test
public void modify(){
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User();
user.setId(16);
user.setUserName("杜轩1");
mapper.modify(user);
session.close();
}
@Test
public void updatePwd(){
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.updatePwd(16,"superRoot");
session.close();
}
}