mybatis中复杂查询(多对一和一对多)1-环境搭建

一.基本知识

  (1).多对一的理解(以学生和老师为例子)

    老师角度:一个老师会教多个学生【一对多】

    学生角度:多个学生对应一个老师【多对一】

  (2).如何处理:比较常见的两种方式,一个是联表查询,一个是子查询

二.举例说明

  (1).数据库设计,执行SQL的时候不要直接全选一块执行,一个代码块一个代码块的执行,一起执行的话可能会报错,因为sql的执行速度很快,有可能在你创表之前就会执行insert语句。

//使用名为mybatis的数据库
USE mybatis

//建表
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=utf8
INSERT 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');

  (2).项目目录图:entity存放实体类,mapper存放接口和局部配置文件(相当于dao层),util存放公共的工具类,test来测试效果用的,resources就不说了。

mybatis中复杂查询(多对一和一对多)1-环境搭建

  (3).新建一个maven项目,先把基本的环境搭建起来,在pom.xml文件里引入Lombok依赖;在resources文件夹下新建一个db.properties和mybatis-config.xml文件,db.properties用来存放连接数据库的基本配置信息,mybatis-config.xml是这个项目的全局配置文件(核心配置文件)。

//引入依赖
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency> </dependencies>
#db.properties配置文件
url=jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 driver=com.mysql.jdbc.Driver username=root password=123456
<!--核心配置文件-->
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--引入外部配置文件--> <properties resource="db.properties"></properties> <!--日志设置--> <settings> <!--标准的日志工厂实现--> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!--typeAliases的使用,给实体类起别名--> <typeAliases> <typeAlias type="com.xiaoma.entity.Teacher" alias="Teacher"></typeAlias> <typeAlias type="com.xiaoma.entity.Student" alias="Student"></typeAlias> </typeAliases> <!--连接数据库的基本参数--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--通过${}绑定外部配置文件的属性--> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> </configuration>    

  (4).在com.xiaoma.entity文件夹下新建和数据库表对应的两个实体类,一个是Teacher一个是Student

package com.xiaoma.entity;

import lombok.Data;

@Data
public class Teacher {
    private int id;
    private String name;

    public Teacher() {
    }

    public Teacher(int id, String name) {
        this.id = id;
        this.name = name;
    }
}
package com.xiaoma.entity;

import lombok.Data;

@Data
public class Student {
    private int id;
    private String name;
  //虽然我们数据库中student表是id,name,tid字段,但是这里不能写tid,因为这里有个关联,在学生实体类中要把老师关联进来,如果写成tid那么这两个实体类就毫无关系啊,就没有什么一对多和多对一这种了 private Teacher teacher; public Student() { } public Student(int id, String name, Teacher teacher) { this.id = id; this.name = name; this.teacher = teacher; } }

  (5).有了实体类就要写mapper接口和对应的配置文件了;在mapper文件夹下新建两个接口一个是TeacherMapper一个是StudentMapper;里面代码是空的,这里就不弄代码了。

  (6).在一个mapper就要对应一个xml对吧,所以还要再创建两个和mapper对应的xml,一般情况下mapper文件夹下如果只有一个mapper接口的话其对应的xml文件直接在mapper文件夹写就行,如果是多个mapper接口,就吧mapper接口对应的xml文件放在resources文件夹下,在这个文件夹下新建一个和mapper接口对应的目录,然后在里面建立两个和mapper接口对应的xml文件;一个绑定TeacherMapper接口一个绑定StduentMapper接口。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xiaoma.mapper.TeacherMapper">

</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xiaoma.mapper.StudentMapper">

</mapper>

  (7).在全局配置文件注册上面的两个xml文件。在mybatis-config.xml文件中添加如下代码,至此环境搭建完成。

<mappers>
    <mapper class="com.xiaoma.mapper.TeacherMapper"></mapper>
    <mapper class="com.xiaoma.mapper.StudentMapper"></mapper>
</mappers>

 

上一篇:机器学习——支持向量机(SVM)


下一篇:《通信原理》第4章(信道)学习笔记