【MyBatis】关联映射和缓存机制

一、一对一查询

实体类IdCard和Person创建:

   

 IdMapeer.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.xiaobiti.pojo.IdCard">
 6     <!-- 根据id查询证件 -->
 7     <select id="findCodeById" parameterType="Integer" resultType="com.xiaobiti.pojo.IdCard">
 8         select * form tb_idcard where id=#{id}
 9     </select>
10 </mapper>

PersonMapper.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.xiaobiti.pojo.Person">
 6     <!-- 嵌套查询:通过执行另一条语句返回结果 -->
 7     <select id="findById" parameterType="Integer" resultMap="idCardResult">
 8 <!--        select * from tb_person where id=#{id}-->
 9         select * from tb_person a,tb_idcard b where a.card_id=b.id and a.id=#{id}
10 
11     </select>
12     <!-- selectd的resultMap即为设置结果的键值 -->
13     <resultMap id="idCardResult" type="com.xiaobiti.pojo.Person">
14         <id property="id" column="id"/>
15         <result property="sex" column="sex"/>
16         <result property="name" column="name"/>
17         <result property="age" column="age"/>
18 
19         <!-- 一对一关联,需要引入另外的sql语句 -->
20 <!--        <association property="card" column="card_id" javaType="com.xiaobiti.pojo.IdCard" select="com.xiaobiti.pojo.IdCard.findCodeById"/>-->
21         <!-- com.xiaobiti.pojo.IdCard.findCodeById对应了另一个Mapper里面的select的,将findCodeById的结果对象对应输出card的键也对应是数据库中的列card_id -->
22 
23         <association property="card" column="card_id" javaType="com.xiaobiti.pojo.IdCard"/>
24 
25     </resultMap>
26 </mapper>

二、一对多查询

实体类Order和User创建:

      

 UserMapper.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.xiaobiti.pojo.User">
 6 <!-- 一对多查询 -->
 7     <select id="findUser" parameterType="Integer" resultMap="userMap">
 8         SELECT u.*,o.id as order_id,o.number FROM tb_order o,tb_user u where o.user_id = u.id and u.id =#{id}
 9     </select>
10     <resultMap id="userMap" type="com.xiaobiti.pojo.User">
11         <id property="id" column="id"/>
12         <result property="username" column="username"/>
13         <result property="address" column="address"/>
14         <!-- 一对多 -->
15         <collection property="orderList" ofType="com.xiaobiti.pojo.Order">
16             <id property="id" column="order_id"/><!-- order表中id别名改为order_id,所以这里的column对应为order_id -->
17             <result property="number" column="number"/>
18         </collection>
19     </resultMap>
20 </mapper>

OrderMapper.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.xiaobiti.pojo.Order">
 6     <select id="findOrders" parameterType="Integer" resultMap="orderResult">
 7         SELECT o.*,p.id as product_id,p.name,p.price FROM tb_order o,tb_product p,orderitem oi where o.id = oi.order_id AND p.id = oi.product_id AND o.id = 1
 8     </select>
 9     <resultMap id="orderResult" type="com.xiaobiti.pojo.Order">
10         <id property="id" column="id"/>
11         <result property="number" column="number"/>
12         <collection property="productList" ofType="com.xiaobiti.pojo.Product">
13             <id property="id" column="product_id"/><!-- product表中id别名改为product_id,所以这里的column对应product_id -->
14             <result property="name" column="name"/>
15             <result property="price" column="price"/>
16         </collection>
17     </resultMap>
18 </mapper>

运行查询结果:

 

 需要将mapper文件配置到mybatis-config.xml中

三、一级缓存

添加依赖:

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>

在src/main/resources目录下创建log4j.properties文件

log4j.properties

#全局日志配置
log4j.rootLogger=DEBUG, Console
#控制台输出配置
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#日志输出级别,只展示了一个
log4j.logger.java.sql.PreparedStatement=DEBUG

 

四、二级缓存

开启二级缓存需要在mybatis-config.xml中插入。。。需要在properties后面插入

<settings>
        <setting name="cacheEnabled" value="true" />
    </settings>

 

 然后再在对应的Mapper文件中加入。。。开启二级缓存

 

 

缓存总结:数据没有改变进行同样的查询时可以在缓存区中直接拿出查询数据。

 

posted @ 2023-03-13 12:01  小鼻涕孩  阅读(140)  评论(0)    收藏  举报