dm7和mysql_DM7 与 mybatis(二)——ID 生成

本文介绍了如何在DM7数据库环境下,结合MyBatis实现ID自动生成,包括读取序列值生成ID、直接插入序列表达式、使用SelectKey返回序列值和自增列值,以及使用GeneratedKeys返回自增列值四种方式。通过示例代码展示了具体的实现步骤和调用过程。
摘要由CSDN通过智能技术生成

在《DM7与mybatis(一)——基本CRUD》中,我们介绍了dm7与mybatis的环境集成和基本配置,实现基本的CRUD操作。

在应用开发过程中,ID生成是一种常见的需求,通常基于数据库的自增列(如sqlserver、mysql)、序列(如Oracle)来自动生成。DM7同时支持自增列、序列,本文将介绍如何利用DM7和mybatis实现ID自动生成。

环境准备参见《DM7与mybatis(一)——基本CRUD》。

一、读取序列值生成ID

1、创建示例表和序列

以test用户登录,执行以下脚本:

-- 以test用户登录执行脚本

-- user_id序列

CREATE SEQUENCE seq_user_id

INCREMENT BY 1 START WITH 1

MAXVALUE 2147483647;

-- 用户信息表

CREATE TABLE t_user_seq

(

id INT NOT NULL, --用户标识

name VARCHAR(20) NOT NULL, --姓名

phone VARCHAR(50), -- 手机

email VARCHAR(50), -- 邮箱

PRIMARY KEY(id)

);

2、pojo对象

由于表t_user_seq和(一)当中表t_user的字段相同,我们可以复用原来的User对象以及对应的alias定义。

package org.dmstudy.mybatis.domain;

public class User {

private Integer id;

private String name;

private String phone;

private String email;

//getter/setter省略

}

3、XML映射文件

在resources\mybatis-config.xml中,新增一个mapper配置,加载IdMapper.xml。

……

……

新增org/dmstudy/mybatis/id/dao/IdMapper.xml文件,其内容如下:

/p>

PUBLIC "-//http://mybatis.org//DTD Mapper 3.0//EN"

select seq_user_id.nextval from dual

insert into t_user_seq

(id,name,phone,email)

values

(#{id},#{name},#{phone},#{email})

注意namespace值对应为"org.dmstudy.mybatis.id.dao.IdMapper"。

其中id=getNextUserId的SELECT节点配置的sql语句是从序列seq_user_id中获取下一个序列值,该值根据定义从1开始,每次增量为1。

id=insert的INSERT节点配置了向表t_user_seq插入记录的语句。

4、Mapper接口

创建org.dmstudy.mybatis.id.dao.IdMapper.java文件,内容如下:

package org.dmstudy.mybatis.id.dao;

import org.dmstudy.mybatis.domain.User;

public interface IdMapper {

int getNextUserId();

int insert(User user);

}

注意接口的全名org.dmstudy.mybatis.id.dao.IdMapper、接口方法getNextUserId、insert与IdMapper.xml中的namespace、语句映射节点id保持一致。

5、调用代码

package org.dmstudy.mybatis.id;

……

public class IdApp {

……

public void insert() {

System.out.println("---insert ---");

// 新建user对象,注意未设置id值

User user = new User();

user.setName("dmtech");

user.setPhone("400-6489899");

user.setEmail("dmtech@dameng.com");

SqlSession sqlSession = sqlSessionFactory.openSession();

try {

// 获取mapper对象

IdMapper mapper = sqlSession.getMapper(IdMapper.class);

// 获取id值

Integer id = mapper.getNextUserId();

System.out.println("成功获取seq_user_id的nextval: " + id);

// 设置id值

user.setId(id);

// 将user插入数据库

int cnt = mapper.insert(user);

sqlSession.commit();

System.out.println("成功插入 " + cnt + "条记录! ");

} catch (Exception e) {

System.out.println("insert执行失败 ,原因:" + e.getMessage());

e.printStackTrace();

sqlSession.rollback();

} finally {

sqlSession.close();

}

}

}

查看执行过程输出log4j日志信息

---insert ---

DEBUG [main] - Opening JDBC Connection

DEBUG [main] - Created connection 288994035.

DEBUG [main] - Setting autocommit to false on JDBC Connection [dm.jdbc.driver.DmdbConnection@1139b2f3]

DEBUG [main] - ==> Preparing: select seq_user_id.nextval fr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值