1、先创建数据表实例: 用户和详情
用户信息表:
create table users(
user_id int primary key auto_increment,
user_name varchar(20) not null unique,
user_pwd varchar(20) not null,
user_realname varchar(32) not null,
user_img varchar(100)
);
用户详情表
create table details(
detail_id int primary key auto_increment,
user_addr varchar(50) not null,
user_tel varchar(11) not null,
user_desc varchar(200),
uid int not null unique,
constraint FX_USER foreign key(uid) references users(user_id)
);
package com.ccl.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Users {
private Integer user_id;
private String user_name;
private String user_pwd;
private String user_realname;
private String user_img;
}
package com.ccl.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Details {
private Integer detail_id;
private String user_addr;
private String user_desc;
private Integer uid;
}
3、创建dao接口
public interface DetailDao {
public int insertDetail(Detail detail);
}
public interface UserDao {
//添加
public int insertUser(User users);
//查询单个用户
public User queryUser(String userName);
}
4、配置Mapper文件
insert into users (user_name,user_pwd,user_realname,user_img) values(#{user_name},#{user_pwd},#{user_realname},#{user_img}) user_id,user_name,user_pwd,user_realname,user_img select user_id,user_name,user_pwd,user_realname,user_img from users where user_name=#{userName}
5、在mybatis-config.xml配置文件中添加Mapper映射insert into details (user_addr,user_tel,user_desc,uid) values(#{user_addr},#{user_tel},#{user_desc},#{uid})
6、编写测试类
package com.ccl.dao;
import com.ccl.Utils.MyBatisUtil;
import com.ccl.pojo.Detail;
import com.ccl.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class UserDaoTest {
@Test
public void testInsertUser(){
//用户注册提交的基本信息和详情到Servlet,Servlet接收注册信息封装到Detail和User中
User user = new User(0,"赵六","123123","赵六","03.jpg");
Detail detail = new Detail(0,"湖北省武汉市","14334123126","有个性才签名",0);
SqlSession sqlSession = MyBatisUtil.getSqlSession();
int i = 0;
int i1 = 0;
try {
UserDao userDao = sqlSession.getMapper(UserDao.class);
i = userDao.insertUser(user);
detail.setUid(user.getUser_id());
DetailDao detailDao = sqlSession.getMapper(DetailDao.class);
i1 = detailDao.insertDetail(detail);
System.out.println(i);
System.out.println(i1);
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
}
}
@Test
public void testQuerUser(){
UserDao userDao = MyBatisUtil.getMapper(UserDao.class);
User user = userDao.queryUser("王五");
System.out.println(user);
}
}
一对一关联查询
在查询用户的同时关联查询出与之对应的详情表
- 实体
- 子查询(第二种方案)
测试类



