mybatis-MySQL实现动态行转列

1.建立课程表

DROP TABLE IF EXISTS `curriculum`;
CREATE TABLE `curriculum` (
  `courseno` varchar(20) NOT NULL,
  `coursenm` varchar(100) NOT NULL,
  PRIMARY KEY (`courseno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='课程表';

INSERT INTO `curriculum` VALUES ('C001', '大学语文');
INSERT INTO `curriculum` VALUES ('C002', '新视野英语');
INSERT INTO `curriculum` VALUES ('C003', '离散数学');
INSERT INTO `curriculum` VALUES ('C004', '概率论与数理统计');
INSERT INTO `curriculum` VALUES ('C005', '线性代数');
INSERT INTO `curriculum` VALUES ('C006', '高等数学(一)');
INSERT INTO `curriculum` VALUES ('C007', '高等数学(二)');

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q3HMm4Wk-1640772032303)(C:\Users\张小辰\AppData\Roaming\Typora\typora-user-images\image-20211229174912643.png)]

二,建立成绩表

DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `stuid` varchar(16) NOT NULL,
  `courseno` varchar(20) NOT NULL,
  `scores` float DEFAULT NULL,
  PRIMARY KEY (`stuid`,`courseno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `score` VALUES ('1001', 'C001', '67');
INSERT INTO `score` VALUES ('1001', 'C002', '87');
INSERT INTO `score` VALUES ('1001', 'C003', '83');
INSERT INTO `score` VALUES ('1001', 'C004', '88');
INSERT INTO `score` VALUES ('1001', 'C005', '77');
INSERT INTO `score` VALUES ('1001', 'C006', '77');
INSERT INTO `score` VALUES ('1002', 'C001', '68');
INSERT INTO `score` VALUES ('1002', 'C002', '88');
INSERT INTO `score` VALUES ('1002', 'C003', '84');
INSERT INTO `score` VALUES ('1002', 'C004', '89');
INSERT INTO `score` VALUES ('1002', 'C005', '78');
INSERT INTO `score` VALUES ('1002', 'C006', '78');
INSERT INTO `score` VALUES ('1003', 'C001', '69');
INSERT INTO `score` VALUES ('1003', 'C002', '89');
INSERT INTO `score` VALUES ('1003', 'C003', '85');
INSERT INTO `score` VALUES ('1003', 'C004', '90');
INSERT INTO `score` VALUES ('1003', 'C005', '79');
INSERT INTO `score` VALUES ('1003', 'C006', '79');
INSERT INTO `score` VALUES ('1004', 'C001', '70');
INSERT INTO `score` VALUES ('1004', 'C002', '90');
INSERT INTO `score` VALUES ('1004', 'C003', '86');
INSERT INTO `score` VALUES ('1004', 'C004', '91');
INSERT INTO `score` VALUES ('1004', 'C005', '80');
INSERT INTO `score` VALUES ('1004', 'C006', '80');
INSERT INTO `score` VALUES ('1005', 'C001', '71');
INSERT INTO `score` VALUES ('1005', 'C002', '91');
INSERT INTO `score` VALUES ('1005', 'C003', '87');
INSERT INTO `score` VALUES ('1005', 'C004', '92');
INSERT INTO `score` VALUES ('1005', 'C005', '81');
INSERT INTO `score` VALUES ('1005', 'C006', '81');
INSERT INTO `score` VALUES ('1006', 'C001', '72');
INSERT INTO `score` VALUES ('1006', 'C002', '92');
INSERT INTO `score` VALUES ('1006', 'C003', '88');
INSERT INTO `score` VALUES ('1006', 'C004', '93');
INSERT INTO `score` VALUES ('1006', 'C005', '82');
INSERT INTO `score` VALUES ('1006', 'C006', '82');

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fzb65SJh-1640772032305)(C:\Users\张小辰\AppData\Roaming\Typora\typora-user-images\image-20211229175021636.png)]

三,建立学生表

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `stuid` varchar(16) NOT NULL COMMENT '学号',
  `stunm` varchar(20) NOT NULL COMMENT '学生姓名',
  PRIMARY KEY (`stuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `student` VALUES ('1001', '张三');
INSERT INTO `student` VALUES ('1002', '李四');
INSERT INTO `student` VALUES ('1003', '赵二');
INSERT INTO `student` VALUES ('1004', '王五');
INSERT INTO `student` VALUES ('1005', '刘青');
INSERT INTO `student` VALUES ('1006', '周明');

四,java利用mybatis实现动态行列

select distinct courseno from curriculum //获取所有课程编号

五,拼装SQL语句

        StringBuilder sb = new StringBuilder();
        for (CurriculumVO vo :vos) {
            sb.append("MAX( CASE courseno WHEN '" + vo.getCourseno());
            sb.append("' THEN scores ELSE 0 END ) AS " + vo.getCourseno()+",");
        }

		//消除最后一个逗号
        String sql = sb.subSequence(0, sb.length() - 1).toString();

六,在mybatis中对SQL语句进行封装

    <select id="getResult" resultType="java.util.Map">
        select stuid,scores,${sql} from score group by stuid
    </select>
        
        //mapper层返回对象
        List<Map<String,Object>> getResult(@Param("sql") String sql);

		//
        List<Map<String, Object>> result = scoreDAO.getResult(sql);

getResult(@Param(“sql”) String sql);

	//
    List<Map<String, Object>> result = scoreDAO.getResult(sql);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文将介绍如何使用Spring Boot、MyBatis-Plus、Ajax、Layui和MySQL实现员工注册功能。 这个注册功能包含了员工ID自增的实现,让我们看看如何完成这个任务。 1.创建项目和数据库 首先,我们需要创建一个Spring Boot项目,并创建一个名为employee的数据库,其中包含一个名为emp的员工表。 CREATE TABLE `emp` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, `sex` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; 2.添加依赖 我们需要添加以下依赖项: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> </dependencies> 3.配置数据源 我们需要在application.properties中配置数据源: spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/employee?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123456 4.配置MyBatis-Plus 在使用MyBatis-Plus之前,我们需要正常配置MyBatis,并至少创建一个Mapper。这里我们以EmployeeMapper为例: @Mapper public interface EmployeeMapper extends BaseMapper<Employee> { } 然后,我们在application.properties中添加以下配置: # mapper扫描 mybatis-plus.mapper-locations=classpath*:/mapper/*.xml # 实体扫描 mybatis-plus.typeAliasesPackage=com.example.demo.entity 5.创建实体类 我们需要创建一个名为Employee的实体类,其属性与emp表中的列相对应。 @Getter @Setter @ToString @NoArgsConstructor @AllArgsConstructor public class Employee { private Long id; private String name; private Integer age; private String sex; } 6.创建控制器和页面 接下来,我们需要创建一个EmployeeController,通过此控制器向客户端提供员工注册页面和保存方法。 @Controller public class EmployeeController { @GetMapping("/employee") public String index() { return "employee/register"; } @PostMapping("/employee/save") @ResponseBody public Long save(@RequestBody Employee employee) { employeeMapper.insert(employee); return employee.getId(); } @Autowired private EmployeeMapper employeeMapper; } 然后,我们在resources/templates目录下创建一个register.html页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Employee Register</title> <link rel="stylesheet" href="//cdn.bootcss.com/layui/2.5.6/css/layui.min.css"> <style> form {margin: 20px auto; width: 500px;} .layui-input-block {margin-right: 0;} </style> </head> <body> <div class="layui-container"> <div class="layui-card layui-anim layui-anim-up"> <div class="layui-card-header">Employee Register</div> <div class="layui-card-body"> <form class="layui-form"> <div class="layui-form-item"> <label class="layui-form-label">Name</label> <div class="layui-input-block"> <input type="text" name="name" required lay-verify="required" placeholder="Name" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">Age</label> <div class="layui-input-block"> <input type="text" name="age" required lay-verify="required|number" placeholder="Age" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">Sex</label> <div class="layui-input-block"> <input type="radio" name="sex" value="male" title="Male" checked> <input type="radio" name="sex" value="female" title="Female"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="save">Register</button> </div> </div> </form> </div> </div> </div> <script src="//cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script src="//cdn.bootcss.com/layui/2.5.6/layui.min.js"></script> <script> layui.use(['form', 'layer'], function() { var form = layui.form, layer = layui.layer; form.on('submit(save)', function(data) { $.ajax({ url: '/employee/save', type: 'POST', data: JSON.stringify({ name: data.field.name, age: data.field.age, sex: data.field.sex }), contentType: 'application/json', success: function(id) { layer.msg('Your employee ID is ' + id); } }); return false; }); }); </script> </body> </html> 7.运行 现在,我们可以启动Spring Boot应用程序,并打开浏览器访问http://localhost:8080/employee,创建一个员工记录。您将看到一个注册表单,输入完信息后,单击“注册”按钮。之后,它将通过Ajax将信息发送到控制器,并将Employee对象保存到数据库中。成功后,您将获得新创建的员工ID。 到这里,我们已经成功地使用Spring Boot、MyBatis-Plus、Ajax、Layui和MySQL实现了员工注册功能,包含了员工ID自增的实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值