IntelliJ IDEA中Mybatis的一对一,一对多和多对多
首先第一步搭建Mybaitsi框架
1.在resources包中新建Mybatis.xml文件。
2.将头部cp到Mybatis里面。
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ZLS?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
</configuration>
<!--注意,这里需要改成自己的数据库即可-->
3.如图所示:
如何使用一对一
- 首先我们新建需要使用的一对一的表(这里我使用的是人和身份证)
- 实体类建好之后,再建实体类的映射文件,我们需要把头部cp到映射文件里:
<?xml version="1.0" encoding="UTF-8" ?>:`<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zl.mode.mapper.UserMapper">
</mapper>
-
如图所示:
注意这里如需使用接口,则写上接口路径即可如果没有则随便写即可
4.在此处编写sql语句即可访问数据库里的数据,如selecct,update,delete,insert。 parameterType=参数类型,resultType=返回类型。
5.下面我们进行测试是否能成功访问
通过简单打印输出可以看出,我们已经成功访问到数据库里面的数据,下面我们开 始一对一的使用 -
一个人只能拥有一张身份证,一张身份证只能属于一个人的。我需要通过身份证查询到这个人的身份证信息。如果直接查询身份证,则只能返回身份证的信息,不能返回人的信息,所以我们需要自定义一个返回结果集,在身份证的返回结果中加入人的信息 这里我们则需使用到resultMap(自定义放回结果集)。
如图所示:
人和身份证的Mode(A_1=身份证,B_2=人):
我们要求查询身份证信息的同时需要查询对应人的信息,所以我们需要定义一个resultMap,再连表查询出身份证和人的信息,则返回的是我们定义好的resultMap。 -
编写好之后我们进行测试:
如图所示:
通过测试可以可以看出,我们已完成简单的一对一的关系了,如果需要通过人查找人的信息和对应的身份证信息,将步骤4反过来使用即可。
如何使用一对多
1.一对多和一对一区别不是很大,我们只需将自己定义的resultMap中association(可以理解为一个对象)替换成collection(可以理解为多个对象)即可。我们举个例子,一位作者可以拥有多本书,一本书只能有一位作者。我要找到某位作者的所有书籍。这里我们可以这样:
作者和书的Mode(Book=书,Zuoze=作者):
和一对一差不多,只是将association替换成collection。sql语句理解为:作者表连接书籍表,通过zid关联其条件为zid=传过来作者的zid
我们进行测试:
通过输出结果可以看出,我们得到作者的信息时同时也得到该作者的所有书籍,这便是一对多,如果我们需要通过书籍查找该作者,则和一对一相似。
如何使用多对多
- 通过一对多可以看到,多的一方需要将association替换成collection即可,但是多对多需要第三方表,而我们就需要加一条第三方表的查询。举个例子,学生和老师,一名学生有多位老师一位老师有多名学生,我要通过老师ID查询老师姓名统计老师所有的学生,并且找到该老师所有学生的姓名。可以这样做:
Mode(Student=学生类,Teacher=老师类)
这里我们可以看到,通过老师ID查询学生所有信息时,学生表是连接第三发表而条件是老师的ID=传过来老师的ID。再看自定义resultMap,其中collection属性select直接使用Xs这条方法 再column=老师的ID。根据老师ID查询所有信息将自定义的ResultMap写上即可。
2.将Mybatis.xml配置好映射文件和别名。
3.进行测试:
测试结果可以看出,运行结果没问题。这就是多对多,需要查询全部老师和老师的学生,则需要将学生的映射文件写好(和老师一样,只需把老师的换成学生即可),测试的时候forEach老师的集合得到学生的集合,再forEach学生集合即可,这就是多对多。
------初次写博客,望各位前辈多多指教?,快过年了,祝大家新年快乐,身体健康!