CREATE TABLE user ( id varchar(30) NOT NULL COMMENT '用户 openid', session_key varchar(30) DEFAULT NULL COMMENT '用户 session_key', nickname varchar(20) DEFAULT NULL COMMENT '用户昵称', role int(2) DEFAULT NULL COMMENT '角色类型 0是管理员,1是用户,2是员工', phone_number varchar(20) DEFAULT NULL COMMENT '用户手机号', create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), UNIQUE KEY phone_UNIQUE (phone_number) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';和CREATE TABLE user_account ( id int(10) NOT NULL AUTO_INCREMENT, user_id varchar(30) CHARACTER SET utf8mb4 NOT NULL COMMENT '用户id', password varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '用户密码', create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), KEY user_id_idx (user_id), CONSTRAINT user_id_idx FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;,用mybatis的注解插入数据(用一个语句进行两张表的插入)
时间: 2024-02-05 17:04:01 浏览: 190
可以使用MyBatis的多参数注解@Param来实现一条语句插入两张表的操作,示例代码如下:
```
@Insert("INSERT INTO user (id, session_key, nickname, role, phone_number, create_time, update_time) VALUES (#{user.id}, #{user.sessionKey}, #{user.nickname}, #{user.role}, #{user.phoneNumber}, #{user.createTime}, #{user.updateTime}); " +
"INSERT INTO user_account (user_id, password, create_time, update_time) VALUES (#{userAccount.userId}, #{userAccount.password}, #{userAccount.createTime}, #{userAccount.updateTime})")
void insertUserAndAccount(@Param("user") User user, @Param("userAccount") UserAccount userAccount);
```
其中,@Param("xxx")表示给参数取别名,对应多参数方法中的参数名。需要注意的是,两个INSERT语句之间需要使用分号隔开。
相关问题
CREATE TABLE user ( id varchar(30) NOT NULL COMMENT '用户 openid', session_key varchar(30) DEFAULT NULL COMMENT '用户 session_key', nickname varchar(20) DEFAULT NULL COMMENT '用户昵称', role int(2) DEFAULT NULL COMMENT '角色类型 0是管理员,1是用户,2是员工', phone_number varchar(20) DEFAULT NULL COMMENT '用户手机号', create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), UNIQUE KEY phone_UNIQUE (phone_number) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';和CREATE TABLE user_account ( id int(10) NOT NULL AUTO_INCREMENT, user_id varchar(30) CHARACTER SET utf8mb4 NOT NULL COMMENT '用户id', password varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '用户密码', create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), KEY user_id_idx (user_id), CONSTRAINT user_id_idx FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;,用mybatis的注解查询数据
可以使用如下代码来使用mybatis的注解查询数据:
```java
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(@Param("id") String id);
@Select("SELECT * FROM user_account WHERE user_id = #{userId}")
UserAccount getUserAccountByUserId(@Param("userId") String userId);
}
```
其中,`@Select`注解表示执行的SQL语句,`@Param`注解表示传入的参数名,对应SQL语句中的占位符。在这个例子中,我们定义了两个方法,一个是根据用户id查询用户信息,另一个是根据用户id查询用户账号信息。同时,我们需要在`application.yml`文件中配置数据源和MyBatis的相关配置:
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.demo.entity
```
其中,`mapper-locations`表示mapper文件所在的路径,`type-aliases-package`表示实体类所在的包名。需要注意的是,如果使用注解配置,就不需要mapper文件了。
CREATE TABLE `user` ( `id` varchar(30) NOT NULL COMMENT '用户 openid', `session_key` varchar(30) DEFAULT NULL COMMENT '用户 session_key', `nickname` varchar(20) DEFAULT NULL COMMENT '用户昵称', `role` int(2) DEFAULT NULL COMMENT '角色类型 0是管理员,1是用户,2是员工', `phone_number` varchar(20) DEFAULT NULL COMMENT '用户手机号', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `phone_UNIQUE` (`phone_number`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';和CREATE TABLE `user_account` ( `id` int(10) NOT NULL AUTO_INCREMENT, `user_id` varchar(30) CHARACTER SET utf8mb4 NOT NULL COMMENT '用户id', `password` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '用户密码', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `user_id_idx` (`user_id`), CONSTRAINT `user_id_idx` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;,用mybatis的注解插入数据
可以使用@Insert注解来插入数据,如下所示:
```
@Insert("INSERT INTO user (id, session_key, nickname, role, phone_number, create_time, update_time) VALUES (#{id}, #{sessionKey}, #{nickname}, #{role}, #{phoneNumber}, #{createTime}, #{updateTime})")
void insertUser(User user);
@Insert("INSERT INTO user_account (user_id, password, create_time, update_time) VALUES (#{userId}, #{password}, #{createTime}, #{updateTime})")
void insertUserAccount(UserAccount userAccount);
```
其中,User和UserAccount为对应的实体类,#{xxx}为占位符,对应实体类的属性。
阅读全文