mybatis一对多

1. 回顾

1. mybatis--ORM框架-作用:完成数据库表记录和java实体类得映射关系。

2. 如何使用mybatis框架
   (1)创建maven工程
   (2)引入相关的jar包。
   (3)创建配置文件---固定【1.数据源 2.映射文件的路径】
    (4) 创建映射文件----注意:[namespace要和dao接口对应  标签的id要和dao中方法名对应]
    (5)dao接口
    (6)测试

2. 正文

1、优化
   1. 引入数据库属性文件
   2. 引入日志文件
   3. 为实体类起别名

2.数据库表得字段和实体类得属性名不一致?

3.多对一和一对多。 连表查询

2.1.引入数据库属性文件

以后随着配置文件内容不断的增加 ----唯一可能会改变的是数据库的信息【oracle sqlserver mysql】—查找不太方便。

如何使用?

(1)创建一个属性文件 db.properties

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hmsp9PRS-1646100381609)(asserts/image-20211106143306698.png)]

(2)在配置文件中引入相关的属性文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LSC7qjQg-1646100381610)(asserts/image-20211106143637846.png)]

2.2 为实体类起别名----不建议使用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xs4VfffK-1646100381610)(asserts/image-20211106143932636.png)]

麻烦。

在这里插入图片描述

2.3 引入日志文件

为什么要引入日志文件?

1. 不出错,但是结果不是我想要的。-----使用日志来解决。

使用步骤:

(1)引入日志jar-----log4j

<!--log4j-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

(2)引入日志文件----log4j.properties 或者 log4j.xml

log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

(3)测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wOhB7suG-1646100381611)(asserts/image-20211106150640458.png)]

2.4 列名和属性名不一致!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IWi4w7nS-1646100381612)(asserts/image-20211106154020339.png)]

导致查询不出相应的结果
在这里插入图片描述

如何解决

1. 为查询得列起别名----而别名和属性名一致。
2. 使用resultMap标签---完成属性名和列名得映射关系。
CREATE TABLE orders(
order_id INT PRIMARY KEY AUTO_INCREMENT,
order_no VARCHAR(20),
order_price FLOAT
);
INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);
INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);
INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);

(1)为查询得列起别名----而别名和属性名一致。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KL1hVNJy-1646100381614)(asserts/image-20211106154318735.png)]

(2) 使用resultMap标签

在这里插入图片描述

2.5 实现关联表查询

多对一关联

1). 提出需求

根据班级 id 查询班

CREATE TABLE student(
s_id INT PRIMARY KEY AUTO_INCREMENT,
s_name VARCHAR(20),
class_id INT
);
INSERT INTO student(s_name, class_id) VALUES('xs_A', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_B', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_C', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_D', 2);
INSERT INTO student(s_name, class_id) VALUES('xs_E', 2);
INSERT INTO student(s_name, class_id) VALUES('xs_F', 2);

实体类

@Data
public class Clazz {
    private Integer cid;
    private String cname;
    private Teacher teacher; //在班级类中定义个老师类型的属性 多对一
}

@Data
public class Teacher {
    private Integer tid;
    private String tname;
}

Dao

public interface ClazzDao {
    public Clazz findById(int cid);
}

映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D1nkUdsS-1646100381615)(asserts/image-20211106170314249.png)]

测试在这里插入图片描述

总结:

1.引入db属性文件
2.添加日志
3.起别名
4.列名和属性名不一致。
5.表与表关系查询
    多对一
   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值