jdbc 3种获得mysql插入数据的自增字段值的方法_mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKey...

通常来说对于mysql数据库插入数据获取主键的方法是采用selectKey的方式,特别是当你持久层使用mybatis框架的时候。

本文除此之外介绍其它两种获取主键的方式。

为了方便描述我们先建一张mysql数据库的表:

CREATE TABLE `company_01` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='company_01';

一、 jdbc PreparedStatement方式

首先介绍一种jdbc获取主键的方式,其它两种方式也是对它的封装的实现,方便我们使用mybatis框架的时候获取主键值。

代码如下:

importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.ResourceBundle;public classInformationSchema {private static Connection con=null;private static PreparedStatement ps=null;private static ResultSet rs=null;static{

ResourceBundle resourceBundle= ResourceBundle.getBundle("jdbc");

String driverName= resourceBundle.getString("jdbc.driverClassName");

String jdbc= resourceBundle.getString("jdbc.url");

String user= resourceBundle.getString("jdbc.username");

String password= resourceBundle.getString("jdbc.password");try{

Class.forName(driverName);

con=DriverManager.getConnection(jdbc, user, password);

}catch(Exception e) {

e.printStackTrace();

}

}public static voidinsertTable(String sql) {try{//Statement.RETURN_GENERATED_KEYS,为必传参数

ps =con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);int count =ps.executeUpdate();

rs=ps.getGeneratedKeys();

rs.next();

System.out.println(rs.getInt(1));

}catch(Exception e) {

e.printStackTrace();

}

}public static voidmain(String[] args) {

String sql= "INSERT INTO company_01 (`name`) VALUES ('阿里巴巴')";

insertTable(sql);

}

}

以上这种方式,使用了 PreparedStatement 的getGeneratedKeys()方法,在插入的执行之后,获取主键值。

二,mybatis useGeneratedKeys方式

这种方式主要使用了标签的这两个属性给传进来的map的key或者对象的id属性进行赋值(若为对象,keyProperty的值须跟属性名进行对应)

spring和mybatis集成的xml文件

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

classpath*:mapper/*.xml

mybatis的sql配置文件

INSERT INTO `company_01` (`name`) VALUES (#{name})

dao的接口:

importjava.io.Serializable;public interfaceCompanyDao {/*** 这里传参使用Serializable 是为了同时兼容map和实体类的情况

*@paramserializable

*@return

*/

public intinsertCompany_01(Serializable serializable);}

实体类:

importjava.io.Serializable;public class Company01 implementsSerializable{privateInteger id;privateString name;publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}

}

测试类:

public static voidmain(String[] args) {

ApplicationContext context= new ClassPathXmlApplicationContext(new String[]{"spring/spring-mybatis.xml"});

CompanyDao companyDao= context.getBean(CompanyDao.class);

//声明这里要用Hashmap,可序列化的

HashMap map = new HashMap();

map.put("name", "阿里巴巴");

companyDao.insertCompany_01(map);

System.out.println(map.get("id"));

Company01 c01= newCompany01();

c01.setName("腾讯");

companyDao.insertCompany_01(c01);

System.out.println(c01.getId());

}

三、mybatis selectKey方式

这种方式大家用的最多,就不再过多描述了,具体的测试方法同上

INSERT INTO `company_01` (`name`) VALUES (#{name})SELECT LAST_INSERT_ID();

有必要提出一点的是,order有两个值,AFTER或BEFORE,获取自增id时须用AFTER,BEFORE是用来给map的key或者对象的id属性进行赋值的,用的不多。

最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值