mybatis的优化 以及动态sql语句

1. 正文

1. mybatis的一些优化
2. 解决属性名和字段名不一致的情况。
3. 联表查询 。
4. 动态sql语句。

2. mybatis的一些优化

(1) 可以把数据源的信息抽取到properties文件中。

在这里插入图片描述
创建一个属性文件内容如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BMGRzoIf-1616386142326)(assets\1616220173207.png)]

再配置文件中引入属性文件
在这里插入图片描述

(2) 添加日志信息—打印sql语句。

(1)引入日志jar文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FebSjuiV-1616386142328)(assets\1616220518885.png)]

(2)创建日志的配置文件 log4j.properties

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

(3)测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6v8DUugq-1616386142328)(assets\1616220721219.png)]

3. 为实体类起别名(不建议大家使用)

(1)在mybatis配置文件中设置别名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H5qV5vwr-1616386142329)(assets\1616221113667.png)]

(2)在映射文件文件中使用别名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKGM6Ton-1616386142330)(assets\1616221156195.png)]

4. 实体的属性和数据库表的字段不一致

(1)为查询的结果起别名-----与属性名一致。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JIStx4Px-1616386142331)(assets\1616221779906.png)]

(2)使用resultMap来创建属性与字段的映射关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-23epB61e-1616386142332)(assets\1616222167519.png)]

5. mybatis联表查询

5.1 多对一

(1)表与表之间的关系------->外键【逻辑外键】

CREATE TABLE teacher(
t_id INT PRIMARY KEY AUTO_INCREMENT,
t_name VARCHAR(20)
);

//teacher     class  一对多
CREATE TABLE class(
c_id INT PRIMARY KEY AUTO_INCREMENT,
c_name VARCHAR(20),
teacher_id INT  -- 外键
);
ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id)
REFERENCES teacher(t_id); 
INSERT INTO teacher(t_name) VALUES('LS1');
INSERT INTO teacher(t_name) VALUES('LS2');
INSERT INTO class(c_name, teacher_id) VALUES('bj_a', 1);
INSERT INTO class(c_name, teacher_id) VALUES('bj_b', 2);

(2)java实体类如何维持这种关系。

Teacher {tid, tname}

Class {cid,cname,Teacher teacher}---->class 只包含老师id号。 多对一 可以在多的实体中添加一的实体类对象。

(1)要求根据班级号 查询班级信息并带上老师的信息。

5.1.1 创建对应的实体类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ecng6GU6-1616386142333)(assets\1616226566938.png)]

5.1.2 映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-himtEVzn-1616386142334)(assets\1616226665819.png)]

通过两次查询得到相应的结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NqZXg1NM-1616386142334)(assets\1616227402790.png)]

5.2 一对多。

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);

要求 根据班级id查询班级信息以及该班级下所有的学生信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7dwbXhlA-1616386142335)(assets\1616229739060.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HDO7roiQ-1616386142337)(assets\1616229770364.png)]

总结:

1. mybatis的优化  1.数据源信息  2.加入了日志  3.实体类别名
2. 字段和属性不一致   (1)为查询的列起别名---属性名一致   (2)使用resultMap

3. mybatis关联查询。 
    一对一。
    一对多。
    

xml 碰到特殊字符如何处理:

(1)可以使用转移字符;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zf7cCsZz-1616386142337)(assets\1616230217409.png)]

(2)使用CDATA

<![CDATA[sql]]>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GQ2NRWfS-1616386142338)(assets\1616230638420.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值