博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBaits一对一的查询方法
阅读量:5080 次
发布时间:2019-06-12

本文共 2994 字,大约阅读时间需要 9 分钟。

MyBaits一对一的查询方法

一:表数据与表结构

CREATE TABLE teacher(t_id INT PRIMARY KEY AUTO_INCREMENT,t_name VARCHAR(20));CREATE TABLE class(c_id INT PRIMARY KEY AUTO_INCREMENT,c_name VARCHAR(20),teacher_id INT);ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCESteacher(t_id);INSERT INTO teacher(t_name) VALUES('LS1');INSERT INTO teacher(t_name) VALUES('LS2');INSERT INTO class(c_name, teacher_id) VALUES('bj_a', 1);INSERT INTO class(c_name, teacher_id) VALUES('bj_b', 2);

 

二:基本准备

如上的sql可见,这里是一个一对一的表,一个老师,对应一个班级,那么,如果要用sql,把班级信息查出来(包含老师信息),那我们可以这样查:

方法一:

SELECT * FROM class c,teacher t WHERE c.teacher_id=t.t_id AND c.c_id=1

方法二:

select * from class where c_id=1select * from teacher where t_id=1

Class实体类:

public class Classes {    private int id;    private String name;    private Teacher teacher;}..省略了get set方法,及默认构造方法

Teacher实体类:

public class Teacher {    private int id;    private String name;}省略了get set方法,及空构造方法

 

 

三:MyBaits一对一查询

3.1.使用第一种方法的sql来进行一对一查询

在实体类中也是可以看到的,Classes类中有着Teacher属性,所以这就是一个一对一的一个写法,所以在配置文件中,也要把这种关系给表达出来,下面给出配置文件的写法:

在上面的配置文件中,使用<resultMap>标签,可以把数据库中每一个字段,与java实体类中的字段对应,然后MyBaits就会知道它们的关系,然后就封装成对象。

下面来做一个测试:

/**     * 测试一对一的查询
* 查询sql:SELECT * FROM class c,teacher t WHERE c.teacher_id=t.t_id AND c.c_id=1 */ @Test public void testOneToOne() { InputStream in = TestMybaits.class.getClassLoader().getResourceAsStream("conf.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); SqlSession session = factory.openSession(); String statement = "zxj.domain.ClassMapper.getClass"; Classes c = session.selectOne(statement, 1); System.out.println(c); session.close(); }

使用的方法还是如平常的使用是一样的

 

3.2.使用第二种的sql来进行一对一的查询

配置文件的写法:

它是要发出两条sql,第一条sql查class,第二条sql查teacher,但是第二条sql的条件是根据第一条sql查出的结果作为条件的。

测试:

/**     * 方式二
* 测试一对一的查询
* 查询sql:SELECT * FROM class c,teacher t WHERE c.teacher_id=t.t_id AND c.c_id=1 */ @Test public void testOneToOne2() { InputStream in = TestMybaits.class.getClassLoader().getResourceAsStream("conf.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); SqlSession session = factory.openSession(); String statement = "zxj.domain.ClassMapper.getClass2"; Classes c = session.selectOne(statement, 1); System.out.println(c); session.close(); }

这样就完成了一对一的查询。

转载于:https://www.cnblogs.com/zhuxiaojie/p/4677227.html

你可能感兴趣的文章
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
PIGOSS
查看>>
软件目录结构规范
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
蓝桥杯-分小组-java
查看>>
Android Toast
查看>>
JAVA面试常见问题之Redis篇
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>