Mybatis/Plus

Mybatis开发随笔

微信扫一扫,分享到朋友圈

Mybatis开发随笔
收藏 0 0

1、返回主键ID

1):数据库中该id是记录主键,并且数据库用的是主键自增长,这是前提。
方法一:
Entity类User:

private int id;
private String name;

 
Controller:

User user=new User(1,"张三")
userService.register(user);

 
Mapper接口:
int register(User user);
UserMapper.xml

UserMapper.xml映射

在定义xml映射器时设置属性useGeneratedKeys值为true,并分别指定属性keyProperty和keyColumn
keyProperty:实体类属性名
keyColumn:数据库列名
为对应的数据库记录主键字段与Java对象的主键属性。

<mapper namespace="org.chench.test.mybatis.mapper">
<!-- 插入数据:返回记录主键id值 -->
<insert id="register" parameterType="org.chench.test.mybatis.model.User" useGeneratedKeys="true" keyProperty="id" keyColumn="id" >
insert into test(name) values(#{name})
</insert>
</mapper>

 

接口映射器

在接口映射器中通过注解@Options分别设置参数useGeneratedKeys,keyProperty,keyColumn值

 

// 返回主键字段id值
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("insert into test(name) values(#{name})")
Integer register(User user);

批量插入多条记录

foreach:用于循环拼接的内置标签,常用于 批量新增、in查询等常见
包含以下属性:
collection:必填,值为要迭代循环的集合类型,情况有多种
入参是List类型的时候,collection属性值为list
入参是Map类型的时候,collection 属性值为map的key值
item:每⼀个元素进⾏迭代时的别名
index:索引的属性名,在集合数组情况下值为当前索引值,当迭代对象是map时,这个值是
map的key
open:整个循环内容的开头字符串
close:整个循环内容的结尾字符串
separator: 每次循环的分隔符

<insert id="addBatch"
parameterType="net.xdclass.online_class.domain.Video"
useGeneratedKeys="true" keyProperty="id" keyColumn="id" >
INSERT INTO `video` ( `title`, `summary`, `cover_img`, `price`,
`create_time`, `point`)
VALUES
<foreach collection="list" item="video" separator=",">
(#{video.title,jdbcType=VARCHAR},#{video.summary,jdbcType=VARCHAR},#
{video.coverImg,jdbcType=VARCHAR},
#{video.price,jdbcType=INTEGER},
#{video.createTime,jdbcType=TIMESTAMP},#{video.point,jdbcType=DOUBLE})
</foreach>

 

由于MyBatis的sql写在XML里面, 有些sql的语法符号和xml里面的冲突

 
大于等于 <![CDATA[ >= ]]>
小于等于 <![CDATA[ <= ]]>
 

ResultMap复杂对象

 
association 映射的是一个pojo类,处理一对一的关联关系。
collection 映射的一个集合列表,处理的是一对多的关联关系。+
<!– column不做限制,可以为任意表的字段,而property须为type 定义的pojo属性–>
<resultMap id=”唯一的标识” type=”映射的pojo对象”>
<id column=”表的主键字段,或查询语句中的别名字段” jdbcType=”字段类型” property=”映射pojo对象的主键属性” />
<result column=”表的⼀个字段” jdbcType=”字段类型” property=”映射到pojo对象的一个属性”/>
<association property=”pojo的一个对象属性” javaType=”pojo关联的pojo对象”>
<id column=”关联pojo对象对应表的主键字段” jdbcType=”字段类型” property=”关联pojo对象的属性”/>
<result column=”表的字段” jdbcType=”字段类型” property=”关联pojo对象的属性”/>
</association>
<!– 集合中的property 需要为oftype定义的pojo对象的属性–>
<collection property=”pojo的集合属性名称” ofType=”集合中单个的pojo对象类型”>
<id column=”集合中pojo对象对应在表的主键字段” jdbcType=”字段类型” property=”集合中pojo对象的主键属性” />
<result column=”任意表的字段” jdbcType=”字段类型” property=”集合中的pojo对象的属性” />
</collection>
</resultMap>
 

一对一查询结果映射之association
association: 映射到POJO的某个复杂类型属性,如订单order对象里面包含 user对象

<resultMap id="VideoOrderResultMap" type="VideoOrder">
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="out_trade_no" property="outTradeNo"/>
<result column="create_time" property="createTime"/>
<result column="state" property="state"/>
<result column="total_fee" property="totalFee"/>
<result column="video_id" property="videoId"/>
<result column="video_title" property="videoTitle"/>
<result column="video_img" property="videoImg"/>
<!--  association 配置属性一对一  property 对应videoOrder里面的user属性名  javaType 这个属性的类型-->
<association property="user" javaType="User">
<id property="id" column="user_id"/>
<result property="name" column="name"/>
<result property="headImg" column="head_img"/>
<result property="createTime" column="create_time"/>
<result property="phone" column="phone"/>
</association>
</resultMap>

 

一对多查询

collection: 一对多查询结果查询映射,如user有多个订单

 

<resultMap id="UserOrderResultMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="headImg" column="head_img"/>
<result property="createTime" column="create_time"/>
<result property="phone" column="phone"/>
<!--
property 填写pojo类中集合类属性的名称
ofType 集合里的pojo对象
-->
<collection property="videoOrderList" ofType="VideoOrder">
<!--配置主键,管理order的唯一标识-->
<id column="order_id" property="id"/>
<result column="user_id" property="userId"/>
<result column="out_trade_no" property="outTradeNo"/>
<result column="create_time" property="createTime"/>
<result column="state" property="state"/>
<result column="total_fee" property="totalFee"/>
<result column="video_id" property="videoId"/>
<result column="video_title" property="videoTitle"/>
<result column="video_img" property="videoImg"/>
</collection>
</resultMap>
<select id="queryUserOrder" resultMap="UserOrderResultMap">
select
u.id,
u.name,
u.head_img,
u.create_time,
u.phone,
o.id order_id,
o.out_trade_no,
o.user_id,
o.create_time,
o.state,
o.total_fee,
o.video_id,
o.video_title,
o.video_img
from user u left join video_order o on u.id = o.user_id
</select>

 

展开阅读全文
干一件事情,用心干就完了
下一篇

SpringBoot使dev-tool实现热部署

你也可能喜欢

  • 暂无相关文章!

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

分类目录

微信扫一扫

微信扫一扫