Mybatis、Mysql实现查询数据添加自增序列字段,及实现方法

查询时的自增字段,不是创建时的自增id。

某些前后端分离情况下需要后台提供序列号,根据页数计算,比如第2页、每页10行数据,那就是“11、12、13、***”。此时别依靠Java,麻烦,代码不美观不统一。

 

因此使用mysql查询时直接协助添加该字段,假设sortId字段。基本思路当然是局部变量、自增,即@“sortId”、“:=”。

亦即,先SET,“;”后再SELECT。

 

但是,mybatis上使用时,局部变量的命令不可执行,报错,原因上mybatis默认每mapper方法仅能一条sql命令。

解决方案,从mybatis配置文件处理,在jdbc连接后添加一个参数,allowMultiQueries=true

比如,jdbc:mysql://localhost:3306/DBS?allowMultiQueries=true

 

不知道mybatis是否有其他原因没将此设置为默认,不清楚如此设置是否会有其他问题(习惯问题还是技术问题呢)

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 中可以使用自长键来为新插入的记录生成唯一的标识符。具体实现方式因数据库而异,下面给出几种常见的数据库的自长键实现方式: 1. MySQL长主键 在 MySQL 中,可以将主键设置为自长,每次插入记录时,自动为该字段生成一个唯一的值。在 MyBatis 中,只需要在对应的 INSERT 语句中不指定该字段的值即可。 示例: ```xml <!-- 在 INSERT 语句中不指定 id 字段的值 --> <insert id="insertUser" parameterType="User"> insert into user (name, age) values (#{name}, #{age}) </insert> ``` 2. Oracle 序列 在 Oracle 中,可以使用序列来生成唯一的标识符。在 MyBatis 中,需要使用 `<selectKey>` 标签来查询序列的下一个值,并将其作为插入记录的主键值。 示例: ```xml <!-- 定义序列 --> <sql id="userSequence"> select user_seq.nextval from dual </sql> <!-- 在 INSERT 语句中使用 <selectKey> 获取序列的下一个值 --> <insert id="insertUser" parameterType="User"> <selectKey keyProperty="id" resultType="long" order="AFTER"> <include refid="userSequence"/> </selectKey> insert into user (id, name, age) values (#{id}, #{name}, #{age}) </insert> ``` 3. SQL Server 自长列 在 SQL Server 中,可以将列设置为自长,每次插入记录时,自动为该字段生成一个唯一的值。在 MyBatis 中,需要在对应的 INSERT 语句中不指定该字段的值,并使用 `<selectKey>` 标签来获取插入记录的主键值。 示例: ```xml <!-- 在 INSERT 语句中不指定 id 字段的值 --> <insert id="insertUser" parameterType="User"> <selectKey keyProperty="id" resultType="long" order="AFTER"> select @@IDENTITY </selectKey> insert into user (name, age) values (#{name}, #{age}) </insert> ``` 其中,`@@IDENTITY` 表示最近插入的记录的自长主键值。注意,该值只能在 INSERT 语句执行完成后才能获取到,因此需要将 `<selectKey>` 标签的 `order` 属性设置为 `"AFTER"`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值