文章目录
- mysql数据库获得自增主键
- 未集成mybatis之前
- 在集成mybatis框架后,会变得非常简单
- dao层
- *Mapper映射层
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属性中了。