VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • 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就不说了。

  (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>

 

本文作者:XiaoMaGuai

本文链接:https://www.cnblogs.com/XiaoMaGuai/p/15678300.html



相关教程