×

selectkey标签

selectkey标签(mybatis插入时为什么加selectkey标签)

admin admin 发表于2023-11-29 20:38:02 浏览40 评论0

抢沙发发表评论

“selectkey标签”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看selectkey标签(mybatis插入时为什么加selectkey标签)!

本文目录

mybatis插入时为什么加selectkey标签

在新增数据的地方添加ID地方添加一个判断 如果传入ID为空 则添加执行ORALCE的自增长ID设置。否则就设置手动设置ID为 ID值

mybatisselectkey标签keyproperty是数据库表主键的名称吗

1、指定主键生成策略为自动生成,useGeneratedKeys="true" 2、指定主键对应字段名,例如channel_id绑定为id字段,执行插入后,channel_id接受返回的自增键的值。

Mybatis可以自动生成增删改查的sql.xml文件吗

最近使用到了generator生成代码。主要用来生成DO,DAO,*Mapper.xml。由于仅需要其生成一些基本的公用的sql操作行为(增删改查更一个方法),而且命名也需要自己的规范,所以修改了一些源码记录下来,用于备忘。 使用的版本为1.3.2。主要记录: 1.org/mybatis/generator/api/IntrospectedTable.java类:calculateJavaClientAttributes方法修改DAO类名;calculateModelAttributes方法修改DO类名;calculateXmlAttributes方法修改DAO中方法名和Mapper.xml中的sql标签id。 2.org/mybatis/generator/codegen/mybatis3/javamapper/JavaMapperGenerator.java类:getCompilationUnits方法修改DAO类中的方法,主要是删除了一个insert方法和一个update方法 3.org/mybatis/generator/codegen/mybatis3/xmlmapper/XMLMapperGenerator.java类:getSqlMapElement方法修改Mapper.xml中sql,主要是删除了和DAO对应的一个insert和一个update 4.org/mybatis/generator/codegen/mybatis3/xmlmapper/elements/InsertSelectiveElementGenerator.java类:addElements方法,修改insert sql的生成格式。mysql中如果表主键是自增加的,则每次插入返回自增ID。 view plain copy //get the auto_increment primary key value sb.append("《selectKey resultType=\"java.lang.Integer\" order=\"AFTER\" keyProperty=\"id\"》"); answer.addElement(new TextElement(sb.toString())); sb.setLength(0); sb.append(" SELECT LAST_INSERT_ID() AS id "); answer.addElement(new TextElement(sb.toString())); sb.setLength(0); sb.append("《/selectKey》"); answer.addElement(new TextElement(sb.toString())); sb.setLength(0); sb.append("insert into "); //$NON-NLS-1$ 4.的补充。经过验证,4是错误的。其实mybatis的generator提供了该方法的可配置性。 view plain copy 《generatedKey column="id" sqlStatement="MySql" identity="true"/》 就会自动生成selectKey标签;其次4的方式返回值只是成功与否的状态,不是自增主键。只不过采用了这种方式之后自增主键会被mybatis赋给DO,这样可以直接使用DO.getId()得到插入后的主键。与selectKey标签具有相同效果的还有另外一种方式,这个方式的配置: view plain copy 《generatedKey column="id" sqlStatement="JDBC" identity="true"/》 5.因为generator生成的mapper.xml文件和DAO的java类放在了同级目录。我会一次性生成多个表的,这样粘贴起来很不舒服。所以改了源码,将所有生成的mapper文件放到新建的mapper目录中。在org.mybatis.generator.api.MyBatisGenerator类中的generate方法中修改: view plain copyfor (GeneratedXmlFile gxf : generatedXmlFiles) { projects.add(gxf.getTargetProject()); File targetFile; String source; try { File directory = shellCallback.getDirectory(gxf .getTargetProject(), gxf.getTargetPackage()); //make the xml file location changed File mapDirec = new File(directory.getAbsolutePath()+"/mapper"); if(!mapDirec.exists()){ mapDirec.mkdir(); } targetFile = new File(mapDirec, gxf.getFileName()); if (targetFile.exists()) { if (gxf.isMergeable()) { source = XmlFileMergerJaxp.getMergedSource(gxf, targetFile); } else if (shellCallback.isOverwriteEnabled()) { source = gxf.getFormattedContent(); warnings.add(getString("Warning.11", //$NON-NLS-1$ targetFile.getAbsolutePath())); } else { source = gxf.getFormattedContent(); targetFile = getUniqueFileName(directory, gxf .getFileName()); warnings.add(getString( "Warning.2", targetFile.getAbsolutePath())); //$NON-NLS-1$ } } else { source = gxf.getFormattedContent(); } } catch (ShellException e) { warnings.add(e.getMessage()); continue; } callback.checkCancel(); callback.startTask(getString( "Progress.15", targetFile.getName())); //$NON-NLS-1$ writeFile(targetFile, source, "UTF-8"); //$NON-NLS-1$ } 更改的地方是: view plain copy//make the xml file location changed File mapDirec = new File(directory.getAbsolutePath()+"/mapper"); if(!mapDirec.exists()){ mapDirec.mkdir(); } targetFile = new File(mapDirec, gxf.getFileName()); 这样即可实现。

ibatis insert 如何返回 int

在insert里面加入selectKey标签就可以了,一般都是返回的int类型.对应数据库是自增长字段,要注意的是:ibatis会直接返回int值,Mybatis则把int值包装在参数对象里面。public int insert(User user) {//ibatis方式.int result = UserMapper.insert(user);return result;//Mybatis方式user = UserMapper.insert(user);return user.getId();}

关于selectkey标签,mybatis插入时为什么加selectkey标签的介绍到此结束,希望对大家有所帮助。