mysql数据库获得自增主键

mysql数据库获得自增主键

在业务中很多时候需要将查询的数据的主键获得到,才能进行后续的关联关系等,但是该如何获得新添加数据的主键尼?

  • 首先,必须通过预编译的方式执行该插入语句
  • 通过数据库连接创建预编译对象时需要将返回主键的参数添加
  • 执行完sql语句之后,需要通过预编译对象获得主键对象返回值
  • 通过next()方法,进而获得主键
  • 通过主键添加关联关系信息

未集成mybatis之前


    private boolean addUser(Integer myId,String name, String phone, String qq) throws ClassNotFoundException, SQLException {

		// 连接数据库查询账号
		Class.forName("com.mysql.jdbc.Driver");
		// 连接数据库路径
		String url = "jdbc:mysql://127.0.0.1:3306/communication_manage_system?characterEncoding=utf8";
		// 获得数据库连接
		Connection connection = DriverManager.getConnection(url,"root","123456");
		// sql语句
        String sql = "INSERT USER(NAME,phone,qq) VALUES(?,?,?)";
		// 获得执行sql语句的对象
        PreparedStatement ps = connection.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);
        // 向sql语言中动态的添加数据
        ps.setString(1,name);
        ps.setString(2,phone);
        ps.setString(3,qq);
		// 执行sql语句
        ps.executeUpdate();
		// 获得主键对象
        ResultSet resultSet= ps.getGeneratedKeys();
        int id = 0;
        if(resultSet.next())
             id = resultSet.getInt(1);// 获得返回的主键
		// 关联关系sql语句
        String relationSql = "INSERT relation(mine_id,other_id) VALUES(?,?)";
        PreparedStatement pStatement = connection.prepareStatement(relationSql);
		// 预编译添加数据
        pStatement.setInt(1,myId);
        pStatement.setInt(2,id);
		// 执行sql语句
        return  pStatement.execute();
    }

注意:该主键在mysql数据库的表中必须是自增的。

在集成mybatis框架后,会变得非常简单

dao层

package com.wenhua.mybatis.dao;

import com.wenhua.mybatis.bean.User;

public interface UserDao {

	void saveUser(User user);

}

*Mapper映射层

  • useGeneratedKeys (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。
  • keyProperty (仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset)。如果生成列不止一个,可以用逗号分隔多个属性名称。
  • keyColumn (仅适用于 insert 和 update)设置生成键值在表中的列名,在某些数据库(像 PostgreSQL)中,当主键列不是表中的第一列的时候,是必须设置的。如果生成列不止一个,可以用逗号分隔多个属性名称。
<insert id="saveUser" parameterType="User" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
	INSERT INTO t_user(account,PASSWORD,sex,birthday,
			phone,address,dept_id,oper_id,oper_time) 
			VALUES(#{account},#{password},#{sex},#{birthday},
			#{phone},#{address},#{chDeptId},#{chUserId},#{operTime})
</insert>

有人注意到,返回的主键在哪里,怎么接收,其实呀,mybatis已经帮我们封装好了,它已经将该t_user表新增记录的自增id值封装至User类中的id属性中了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值