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
(2)在配置文件中引入相关的属性文件
2.2 为实体类起别名----不建议使用。
麻烦。
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)测试
2.4 列名和属性名不一致!
导致查询不出相应的结果
如何解决
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)为查询得列起别名----而别名和属性名一致。
(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);
}
映射文件
测试
总结:
1.引入db属性文件
2.添加日志
3.起别名
4.列名和属性名不一致。
5.表与表关系查询
多对一