79.【Mybatis】(八)

简介: 79.【Mybatis】

(十五)、Lombok

https://projectlombok.org/#

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

相关文章
|
SQL Java 数据库连接
|
5天前
|
Java 关系型数据库 数据库连接
mybatis中的useGeneratedKeys和keyProperty
在 MyBatis 中,`useGeneratedKeys` 和 `keyProperty` 是用于处理数据库自动生成主键的关键配置。通过这些配置,可以方便地获取和使用数据库生成的主键值,提高开发效率和代码可读性。确保正确配置和使用这两个属性,可以在应用程序中高效地进行数据库操作。
43 25
|
3月前
|
SQL 缓存 Java
Mybatis知识
Mybatis知识
47 0
|
6月前
|
算法 Java 数据库连接
mybatis plus 主键策略
mybatis plus 主键策略
71 2
|
5月前
|
SQL Java 数据库连接
Mybatis02(一)
Mybatis02(一)
38 0
|
5月前
|
SQL Java 数据库连接
MyBatis常用的小技巧
这篇文章分享了MyBatis中的一些常用技巧,包括使用`in`语句处理字符串或集合参数、在`insert`语句后获取自增ID,以及使用`like concat`进行模糊查询以防止SQL注入。
29 0
|
SQL 安全 Java
Mybatis
参数传递 单个普通参数:Mybatis可以直接使用这个值,取值#{ },不会对它进行处理 多个参数:任意多个参数,都会被Mybatis封装成一个Map传入,map的key时param1,param2,或者0.1.2.......,就是参数的值
60 1
|
8月前
|
SQL 缓存 Java
mybatis使用总结
mybatis使用总结
|
8月前
|
缓存 Java 数据库连接
MyBatis
MyBatis
|
SQL XML 存储
MyBatis(上)
MyBatis(上)