![37b734ba2309ca4ba123ba4145a09d5e.png](https://img-blog.csdnimg.cn/img_convert/37b734ba2309ca4ba123ba4145a09d5e.png)
![66634a544c46f5ce7f6527ad1f738c63.png](https://img-blog.csdnimg.cn/img_convert/66634a544c46f5ce7f6527ad1f738c63.png)
多对一
结果嵌套
1:创建mybatis配置文件(mybatis-config.xml)
<?xml version="1.0" encoding="UTF-8" ?>
- 这里使用了properties文件,可以不使用
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=1234
2:创建工具类(MybatisUtils.java)用于获取SqlSession对象
public
- String resource ="mybatis-config.xml" 为“包名+文件名”,此处mybatis配置文件直接放在src下,省略包名
3:创建实体类对象
public
- 从Student入手的多对一查询,需要在Student中添加一个Teacher类属性用于存放teacher表
public
4:创建mapper映射文件用于书写SQL语句
<?xml version="1.0" encoding="UTF-8" ?>
- 从Student入手的多对一查询,需要在Student实体类中添加一个Teacher类属性,同时在mapper映射文件中使用resultMap标签,在其内使用association标签。association表示关联对象,其内的property属性表示数据库中的表,JavaType表示对应的实体类
- 数据库中的两个表的列名是相同的,为避免混乱,在查询时最好使用别名,如下(不使用也可,如上)
<?xml version="1.0" encoding="UTF-8" ?>
5:创建Dao(StudentDao.java)
public
测试类
public
测试结果
1 张一 1 1 张三
2 李二 1 1 张三
3 王三 1 1 张三
查询嵌套
1:mapper映射文件中association标签的另一种使用方法
<?xml version="1.0" encoding="UTF-8" ?>
- association标签中property属性表示数据库中的表,column属性表示外键,JavaType属性表示实体类,select属性表示对应表的查询语句
- select属性表示对应表的查询语句,用“包名+文件名表示”,一般对于另一表的查询会写在另一个mapper映射文件之内。也可以写在同一文件内,若写在同一文件内,则包名可省略
- 结果嵌套对数据库查询一次,查询嵌套对数据库查询两次,所以结果嵌套的效率会更高,但查询嵌套看起来会更清爽点
<?xml version="1.0" encoding="UTF-8" ?>
测试类
public
测试结果
1 张一 0 1 张三
2 李二 0 1 张三
3 王三 0 1 张三
- 此处Student的tid无法查询,原因未知
一对多
结果嵌套
1:创建mybatis配置文件(mybatis-config.xml)
2:创建工具类(MybatisUtils.java)用于获取SqlSession对象
3:创建实体类对象
package
- 因为是从Teacher入手的一对多查询,所以Teacher实体类中需要有list集合的Student属性
package
4:创建mapper映射文件(teacher-mapper.xml)用于书写SQL语句
<?xml version="1.0" encoding="UTF-8" ?>
- select s.id sid,s.name sname,s.tid stid,t.id tid,t.name tname from student s,teacher t where s.tid=t.id and t.id=1
- 由于Teacher实体类中使用的是关于Student的集合,所以在映射文件中的resultMap中需要使用collection标签而不是association标签
- collection标签中,property属性表示数据库中的表,ofType属性表示实体类
- 若数据库中两个表的列名是相同的,则在查询时,SQL语句最好要使用别名,便于在resultMap标签中标明清楚(如上),否则容易出现问题(原因未明)
5:Dao(TeacherDao.java)
public
测试类
public
测试结果
1 张三
1 张一 1
2 李二 1
3 王三 1
查询嵌套
1:mapper映射文件(teacher-mapper.xml)
<?xml version="1.0" encoding="UTF-8" ?>
2:Dao
public
测试类
public
测试结果
0 张三
1 张一 1
2 李二 1
3 王三 1
- 由于在mapper映射文件的resultMap标签的collection标签中使用了column="id",导致测试结果中Teacher的id无法获取(原因未知)