在编写xml配置文件的sql语句时,必须首先查询数据库工具,然后将查询的结果写在代码中。 很难混淆。 此外,查询后结果中的字段名称与结果映射或标记中的列属性相对应
一、双侧查询:关联对1
关联标签用于一对一关系
关联的作用是两个表中的相关查询将另一个表中的字段关联起来并一起映射到实体类
例:作者与博客的关系:一对一(假设每个作者只能有一个博客) )。
author表和blog表. png
两个表的一对一查询结果. png
要查询两个表,请首先使用数据库管理工具进行查询,然后将查询后的表映射到java代码
1 .实体类
Author.java
公共类审计器{
私有integer id;
私有字符串author name;
公共集成器getid
返回id;
}
公共语音设置(integer id ) {
this.id=id;
}
公共字符串get author name (
返回author name;
}
publicvoidsetauthorname (字符串自动名称)。
this.authorName=authorName;
}
@Override
公共字符串字符串
返回' author {
' id=' id
',authorName='' authorName '' '
() );
}
}
Blog.java
公共类博客{
私有integer id;
私有字符串博客名称;
隐私自动驾驶仪;
公共集成器getid
返回id;
}
公共语音设置(integer id ) {
this.id=id;
}
公共字符串getb logname (
返回博客名称;
}
publicvoidsetblogname (字符串日志名称) {
this.blogName=blogName;
}
公共author get author
返回自动机;
}
publicvoidsetauthor (author author ) {
this.author=author;
}
@Override
公共字符串字符串
返回博客{
' id=' id
',blogName='' blogName '' '
',author=' author
() );
}
}
2 .配置文件
jdbc.properties
JDBC.driver=com.MySQL.JDBC.driver
JDBC.URL=JDBC : MySQL ://localhost :3306/blog? serverTimezone=UTC
jdbc.username=root
jdbc.password=msj
mybatis配置文件mybatis01.xml
/p
public '-//my batis.org//dtd config 3.0//en '
' http://my batis.org/dtd/my batis-3-config.dtd '
mybatis映射文件mapper01.xml
注意:和标签中的column属性指向查询后的表字段,因此在执行双侧查询时,请先查询sql语句,然后将字段名称和属性名称一对一映射。
/p
public '-//my batis.org//dtd mapper 3.0//en '
' ht
tp://mybatis.org/dtd/mybatis-3-mapper.dtd">select b.id,b.blog_name,a.id as a_id, a.author_name as a_name from blog b right join author a on b.a_id = a.id;
3.mapper接口和测试类
BlogMapper.java
public interface BlogMapper {
List findAll();
}
TestDemo.java
public class TestDemo {
@Test
public void test() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis01.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(is);
SqlSession session = build.openSession();
BlogMapper mapper = session.getMapper(BlogMapper.class);
List list = mapper.findAll();
for(Blog b:list){
System.out.println(b);
}
}
}
运行结果
Blog{id=1, blogName='aablog', author=Author{id=4, authorName='aa'}}
Blog{id=2, blogName='bbblog', author=Author{id=5, authorName='bb'}}
Blog{id=3, blogName='aablog', author=Author{id=6, authorName='cc'}}
二、两边查询:association多对一
association也可以用在多对一的关系上
例子:tmdwd和博客的关系:多对一
tmdwd和博客表.png
1.实体类
Article.java
//这里省略set,get,toString方法,自己添加
private Integer id;
private String articleName;
private Blog blog;
Blog.java
private Integer id;
private String blogName;
2.配置类(同上)
这里要在mybatis01.xml进行添加配置
Mapper02.xml
/p>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select a.id,a.article_name,b.id as b_id,b.blog_name from article a join blog b
on a.b_id = b.id
3. 测试
ArticleMapper.java
public interface ArticleMapper {
List findAll();
}
TestDemo.java
public class TestDemo {
@Test
public void test() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis01.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(is);
SqlSession session = build.openSession();
ArticleMapper mapper = session.getMapper(ArticleMapper.class);
List all = mapper.findAll();
for(Article a:all){
System.out.println(a);
}
}
}
结果查询:
Article{id=1, articleName='111', blog=Blog{id=1, blogName='aablog'}}
Article{id=2, articleName='222', blog=Blog{id=1, blogName='aablog'}}
Article{id=3, articleName='333', blog=Blog{id=1, blogName='aablog'}}
Article{id=4, articleName='444', blog=Blog{id=2, blogName='bbblog'}}
Article{id=5, articleName='555', blog=Blog{id=2, blogName='bbblog'}}
Article{id=6, articleName='666', blog=Blog{id=3, blogName='ccblog'}}
三、两边查询:collection一对多
collection用在一对多的关系上
例子:博客和tmdwd的关系:一对多
1.实体类
Blog.java
注意:这里博客与tmdwd是一对多的关系,所以tmdwd需要用List
private Integer id;
private String blogName;
private List article;
Article.java
private Integer id;
private String articleName;
2.配置类(同上)
这里要在mybatis01.xml进行添加配置
Mapper03.xml
注意:中的属性是ofType
/p>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select a.id as a_id,a.article_name,b.id as b_id,b.blog_name from article a join blog b
on a.b_id = b.id
3. 测试
TestDemo.java
public class TestDemo {
@Test
public void test() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis01.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(is);
SqlSession session = build.openSession();
BlogMapper mapper = session.getMapper(BlogMapper.class);
List blogList = mapper.findAll();
for(Blog b:blogList){
System.out.println(b);
}
}
}
测试结果:
Blog{id=1, blogName='aablog', article=[Article{id=1, articleName='111'}, Article{id=2, articleName='222'}, Article{id=3, articleName='333'}]}
Blog{id=2, blogName='bbblog', article=[Article{id=4, articleName='444'}, Article{id=5, articleName='555'}]}
Blog{id=3, blogName='ccblog', article=[Article{id=6, articleName='666'}]}