(十五)、Lombok
Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要有一个注解,你的类就有一个功能齐全的构建器、自动记录变量等等。 [1]
1.怎么使用Lombok
(1).下载lombok插件
(2).在项目中导入Lombok的jar包
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> <scope>provided</scope> </dependency>
(3).常用的注解
@Getter and @Setter @FieldNameConstants @ToString @EqualsAndHashCode @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog @Data @Builder @SuperBuilder @Singular @Delegate @Value @Accessors @Wither @With @SneakyThrows @val @var experimental @var @UtilityClass
(4).@Data和@AllArgsConstructor和@NoArgsConstructor详解
@Data: 会生成 无参构造,get, set, toString, hascode
@AllArgsConstructor:会生成 有参
@NoArgsConstructor:会生成 无参
2.lombok的实列
==会存在一定的作用域,如果在类上写注解那么就会生成这个类的所有方法,如果放在一个属性的上面,那么就只会生成这个属性的相应的方法
@Data @AllArgsConstructor @NoArgsConstructor
实体类:
package Com.Jsxs.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private int id; private String name; private String password; }
(十六)、多对一处理(对象)
- 对于老师而言:集合,一个老师有很多学生【一对多】
- 对学生而言: 多个学生,关联一个老师【多对一】
1.如何徒手创建.xml文件
(1).首先在Mapper层,创建对应的接口
(2).在resource包下创建和Mapper接口一样的包
切记在resourece资源包下,新建包目录要使用 / 不能用 .
(3).复制核心配置文件进行修改数据
1.复制核心配置文件
2.进行修改为Mapper文件
3.将工作空间和接口链接
<?xml version="1.0" encoding="UTF8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper> </mapper>
(4).接口的配置
核心配置文件===========》接口所在的包
接口的XML文件=========》接口所在的类
2.多对一开始处理
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=utf8INSERT 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');
处理多对一的实质: 就是处理数据的别名问题
(1).问题一:在学生表中查询所有学生对应的老师
SQL语句
select *from student s,teacher t where s.tid=t.id;
初步尝试:
学生的实体类怎么设置?
package Com.Jsxs.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Student { private int id; private String name; private int tid; // 学生需要关联一个老师 /* 因为构造函数在创建对象的时候,就会执行,然而Teacher又是另一个类,并且他有自己的对象 */ private Teacher teacher; }
接口
package Com.Jsxs.Dao; import Com.Jsxs.pojo.Student; import java.util.List; public interface StudentMapper { List<Student> getStudent_Teacher(); }
配置文件
<?xml version="1.0" encoding="UTF8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="Com.Jsxs.Dao.StudentMapper"> <select id="getStudent_Teacher" resultType="Com.Jsxs.pojo.Student"> select *from student s,teacher t where s.tid=t.id; </select> </mapper>
测试
package Com.Jsxs.Dao; import Com.Jsxs.pojo.Student; import Com.Jsxs.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class StudentMapperTest { @Test public void test_Student_Teacher(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); List<Student> student_teacher = mapper.getStudent_Teacher(); for (Student student : student_teacher) { System.out.println(student); } } }