联合主键的意义:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数。
一般设置联合主键时,其中一个自增。效果图如下:
(可以很清楚的知道某个小区的记录个数)
接下来说道设置联合主键的细节:
1.mysql的数据引擎必须是MyISAM
修改表引擎的语句:
alter table user engine=myisam
2.设置自增的主键不能放在最左边
测试:
数据库结构:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`nack` varchar(255) DEFAULT NULL,
PRIMARY KEY (`username`,`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
model实体:
package com.lgy.model;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Table(name="user")
public class User {
@Id
private int id;
/**
* @GeneratedValue JPA主键生成策略,自增长
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String username;
private String nack;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getNack() {
return nack;
}
public void setNack(String nack) {
this.nack = nack;
}
}
持久层:
package com.lgy.mapper;
import com.lgy.model.User;
public interface UserDao {
int insert(User user);
}
Mapper文件:
id, username, nack
insert into user
null,
#{username},
#{nack}
测试结果:
符合预期想象.