本文章已收录于:

作者同类文章
X
版权声明:本文为博主原创文章,未经博主允许不得转载。
联合主键的意义:用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;
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.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);
- }
package com.lgy.mapper;
import com.lgy.model.User;
public interface UserDao {
int insert(User user);
}
Mapper文件:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
- <mapper namespace="com.lgy.mapper.UserDao">
- <resultMap id="Base_User_Map" type="user">
- <id column="id" property="id" jdbcType="VARCHAR" />
- <id column="username" property="username" jdbcType="VARCHAR" />
- <result column="nack" property="nack" jdbcType="VARCHAR" />
- </resultMap>
- <sql id="Base_Column_List">
- id, username, nack
- </sql>
- <!-- 插入用户数据 -->
- <insert id="insert" parameterType="user">
- insert into user
- <trim prefix="(" suffix=")">
- <include refid="Base_Column_List" />
- </trim>
- <trim prefix="values (" suffix=")">
- null,
- #{username},
- #{nack}
- </trim>
- </insert>
- </mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="com.lgy.mapper.UserDao">
<resultMap id="Base_User_Map" type="user">
<id column="id" property="id" jdbcType="VARCHAR" />
<id column="username" property="username" jdbcType="VARCHAR" />
<result column="nack" property="nack" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List">
id, username, nack
</sql>
<!-- 插入用户数据 -->
<insert id="insert" parameterType="user">
insert into user
<trim prefix="(" suffix=")">
<include refid="Base_Column_List" />
</trim>
<trim prefix="values (" suffix=")">
null,
#{username},
#{nack}
</trim>
</insert>
</mapper>
测试结果:
符合预期想象.
-
顶
- 1
-
踩
- 0
- 上一篇Java常用代码片段
- 下一篇Spring-Boot初始篇
我的同类文章
http://blog.youkuaiyun.com
- •Mybatis中的model实体与数据库中的字段不一致的解决方案2016-01-17
- •Mybatis自定义主键增长的一种方式2015-11-12
- •Mybatis中的常用sql2015-10-15
- •MyBatis的jdbcTYPE基本类型2015-06-19
- •MyBatis的分页插件介绍2015-05-15
- •Mybatis缓存和Redis缓存服务器的案例分析2015-11-12
- •MyBatis传递多个参数的写法2015-10-26
- •mybatis整合Mapper通用工具,实现单表基本操作2015-09-25
- •MyBatis+MySQL 返回插入的主键ID2015-05-19
- •MyBatis实现最基本的Cred2015-05-12