关于Mybatis的深入学习(4)之动态SQL二十四道练习

  • 写下本文的意义:在于可以为正在学习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 项目结构

  • 这里采用图片展示的方式来说明
    在这里插入图片描述
    在这里插入图片描述

3.2 pom.xml文件配置

  • 注意版本的兼容问题
<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

<dependencies>
	<!--mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.29</version>
    </dependency>

    <!--mybatis-->
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>

    <!--junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <!--<scope>test</scope>-->
    </dependency>
    
    <!--lombok插件 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.24</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

3.3 mybatis-config.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核心配置文件-->
<configuration>
    <!--导入properties文件-->
    <properties resource="db.properties"/>

    <!--标准的日志工厂 STDOUT_LOGGING 标准日志输出-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!--是否开启自动驼峰名规则(caml case)映射-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--给实体类起别名:包扫描,官方推荐首字母小写的名字Student->student-->
    <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;

/**
 * @author 缘友一世
 * @date 2022/7/20-16:49
 */
//SqlSessionFactory-->SqlSession
public class MybatisUtils {
    
    
    private static SqlSessionFactory sqlSessionFactory;
    static {
    
    
        try {
    
    
            //使用mybatis获取SqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

    //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
    // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
    // 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
    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;

/**
 * @author 缘友一世
 * @date 2022/7/23-14:46
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Bill {
    
    
    private Integer id;   //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; //供应商ID
    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;

/**
 * @author 缘友一世
 * @date 2022/7/23-14:49
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Provider {
    
    
    private Integer id;   //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;

/**
 * @author 缘友一世
 * @date 2022/7/23-14:50
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Role {
    
    
    private Integer id;   //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;

/**
 * @author 缘友一世
 * @date 2022/7/23-14:52
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    
    
    private Integer id; //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;

/**
 * @author 缘友一世
 * @date 2022/7/23-14:53
 */
public interface BillMapper {
    
    
    /**
     * 根据供应商Id查询订单数量
     */
    int getBillCountByProviderId(@Param("providerId") Integer providerId);

    /**
     * 增加订单
     */
    int add(Bill bill);

    /**
     * 通过查询条件获取供应商列表-getBillList
     */
    List<Bill> getBillList(@Param("productName") String productName,
                                  @Param("providerId") String providerId,
                                  @Param("isPayment") String isPayment,
                                  @Param("from") Integer from,
                                  @Param("pageSize") Integer pageSize);

    /**
     * 通过条件查询,查询供货商数量
     * 根据 商品名称、供应商id、是否付款 查询订单总数
     */
    int getBillCount(@Param("productName") String productName,
                            @Param("providerId") int providerId,
                            @Param("isPayment") int isPayment);

    /**
     * 通过Id删除Bill
     */
    int deleteBillById(@Param("id") Integer id);

    /**
     * 通过Id获取Bill
     */
    Bill getBillById(@Param("id") Integer id);

    /**
     * 修改订单信息
     */
    int modify(Bill bill);

    /**
     * 根据供应商Id删除订单信息
     */
    int deleteBillByProviderId(@Param("providerId") Integer providerId);

}

3.7.2 BillMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!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">
	<!--根据供应商Id查询订单数量-->
    <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;

/**
 * @author 缘友一世
 * @date 2022/7/23-15:07
 */
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();
    }

    //查询 getBillById
    @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;

/**
 * @author 缘友一世
 * @date 2022/7/23-14:57
 */
public interface ProviderMapper {
    
    
    //增加用户信息
    int add( Provider provider);

    //通过条件查询providerList
    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);

    //通过供应商Id删除供应商信息
    int deleteProviderById(@Param("id") Integer delId);

    //根据供应商Id获取供应商信息
    Provider getProviderById(@Param("id") Integer id);

    //修改供应商
    int modify(Provider provider);
}

3.8.2 ProviderMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!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测试

/**
 * @author 缘友一世
 * @date 2022/7/23-15:07
 */
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);
        /*Provider provider = new Provider();
        provider.setProName("张");
        provider.setProCode("新");*/
        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;

/**
 * @author 缘友一世
 * @date 2022/7/23-15:02
 */
public interface RoleMapper {
    
    
    //获取角色列表
    List<Role> getRoleList();

    //增加角色信息
    int add(Role role);

    //通过Id删除Role
    int deleteRoleById(@Param("id") Integer delId);

    //修改角色信息
    int modify(Role role);

    //通过Id获取role
    Role getRoleById(@Param("id") Integer id);

    //根据roleCode,进行角色编码的唯一性验证
    int roleCodeIsExist(@Param("roleCode") String roleCode);
}

3.9.2 RoleMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!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;

/**
 * @author 缘友一世
 * @date 2022/7/23-15:08
 */
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;

/**
 * @author 缘友一世
 * @date 2022/7/23-15:04
 */
public interface UserMapper {
    
    
    //通过userCode获取User
    public User getLoginUser(@Param("userCode") String userCode);

    //增加用户信息
    public int add(HashMap<String, Object> map);

    //通过条件查询userList
    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);

    //通过userId删除user
    public int deleteUserById(@Param("id") Integer id);

    //通过useId获取user
    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文件

<?xml version="1.0" encoding="UTF-8" ?>
<!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;

/**
 * @author 缘友一世
 * @date 2022/7/23-15:07
 */
public class TestUserMapper {
    
    
    //封装获取当前时间的函数
    public static Date getCurrentDate() throws ParseException {
    
    
        Date date=new Date();//获取当前的时间
        SimpleDateFormat sd=new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");//用这种格式去格式化,与数据库里的格式保持一致
        /*System.out.println(sd.format(date));*/
        String format = sd.format(date); //转成String
        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();
    }
}

猜你喜欢

转载自blog.csdn.net/yang2330648064/article/details/128663231
今日推荐