开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术:Mapper接口和XML配置】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/80/detail/15922
Mapper接口和XML配置
内容简介:
一、SELRECT Goods标记
二、INSERT标记
一、SELRECT Goods标记
以 Mapper的插面文件为例来验证MXl的标记是如何使用的
文件在工程的 ResultMap的目录下,并在此建立了目录集便于进行打包
1.首先查看怎样用标记来实现对象模型和关系模型的映射
2.查看 SELRECT Goods标记
3.SELRECT 标记是从数据库中查询数据返回给对象模型
4.SELRECT 标记定义了 select id=“find”的 id 加上 napper namespace 对应到Mapper 接口中的 findGoods 接口
5.paraneterType 表示传过来的参数是什么样的。因为传参数使用对象,所以不需特别对其进行定义。若想传输多个参数且不使用对象传输,则需要 paraneterType进行定义
6.result Type refid 直接返回的是一个对象,所以直接将对象作为它的一个result Type
7.在SELRECT 标记中是一个 select 语句,可以看到运用了 include标签,其中有名为"Goods_Column_List"的 sql片段
<sql id="Goods_Column_List">
id,
goods_sn,
name,
category_id,
brand_id,
brief,
spec_list,
pic_url,
unit,
state,
add_time,
update_tine,
nodi_user
以上是用sql标记定义的一段语句,为避免重复使用所以使用 sql,使用时用 include引进进来。进行修改时若修改sql里的内容时,所有的内容都会进行修改。
8. 在 sql中用了if的动态语句标记
SELECT
<include refid="Goods_Colunn_List"/>
FROM oomall_goods
WHERE
state != 2
<if
test="id!=null">and id = #
{
id
}
</if>
<if
test="goodsSn!=null andgoodsSn!='"">and gaods_sn= #
{
goodsSn
}
</if>
<if
test="name!=null andnane!=''">and nane = #
{
nam
}
</if>
<i
f
test="categoryId!=null">andcategory_id
=#
{
categoryId
}
</1f>
<if
test="state!=null">and
brand
_
Id=#
{
brandId
}
</1f>
<if
test="state!=null">and state = #
{
state
}
</if>
</select>
需要查看传件的参数中间不为空的属性作为参与条件,所以要用多个条件进行查询,需要用 if 去判断字段的属性是否为空,若不是空或空格则作为查询条件组合到
语句中去。
#{ }这个标记表示里面的值是来自于参数,因为 paraneterType=“GoodsPo”所以id 就成为 GoodsPo的一个属性,将语句进行一个预编译,将#里的东西作为一个参
数在执行的时候与预编译的sql语句进行了绑定,相对比较安全
select 的返回类型是 GoodsPo,它会将返回的字段名称与 GoodsPo进行对应
二、INSERT标记
<insert
id="createGoods" parameterType="GoodsPo" keyProperty="id"useGeneratedKeys="true">
INSERT INTO oonalt_goods(<include refid="Goods_Insert_List"/>)
VALUES(#(goodsSn),#(name》,#(categoryId),#(brandId),#(brief),#(specList),#(picUrl),#(unit),8,CURRENT_TIMESTAHP)
</insert>
1.传入商品信息 createGoods,传过来的信息为 GoodsPo
2.定义一个 keyProperty=“id”说明这个字段是要用字针的方式来自动产生
3.set 语句是根据 UPDATE传过来的语句不为空来设置的同样结合 if 语句判断动态语句是否为空,不为空才将其组入 set语句中。
<resultMap type="GoodsPo" id="GoodsProductResultMap"autoMapping="true">
<id property =id"/>
1.GoodsPo 是一个有关联的对象,一个商品里面含有多个规格,所以 GoodsPo有个属性 ProductList作为商品关联的规格对象
2.resultMap 的作用是当查询表时会形成一个有商品关联的规格对象并返回
3.autoMapping 可以进行简化不用一个个的写属性和字段自建的关系,有些可以进行自动映射。
<collection property="productL
i
st" ofType="cn.edu.xmu.restfuldeno.model.ProductPo"autoMapping="true">
<id property="id" colunn:"product_1d"/>
<result property="nane" column:"product_name"/s
cDesuTnnonontun"ctatom
1. productList 的属性是 List类型中的每一个元素是 ProductPo对于后面定义的ofType对 collection中的每一个元素的类型是 ProductPo。注意整个的包名要写全。
2. 同样使用了 autoMapping,由于存在某些字段的名字和属性名字是不能做autoMapping的。
<select id="findGoods"paraneterType="GoodsPo"resultTypet"GoodsPo"...>
eselect id:"findGoodsWithProduct"parareterType="GoodsPo”resultMap="GoodsProductResultMap">
1.resultMap 不是简单的返回一个 GoodsPo对象,而是返回了一个带关联的GoodsPo 对象,里面有 productList的 GoodsPo对象。
也可做成延迟加载的模式
2、返回的类型用 ResultMap装返回值,返回的对象仍然是 GoodsPo对象。
FROM oomall_goods q LEFT JOIN oonall_product p
DN 9.1d = p.goods_1d
WHERE
1.LEFT JOIN 的作用是左链接用 Goods的表去链接 Product的表
条件是 Goods的id一致
2.连表查询出来的语句会出现多条记录因为一个 Goods有多个 Product,但定义了返回的值是 ResultMap后,多条记录的返回集映射成一对多的对象关系模型。