mybatis实现一对多关系映射
sql:/*Navicat MySQL Data TransferSource Server: mysqlSource Server Version : 50549Source Host: localhost:3306Source Database: mybatisTarget Server Type...
·


sql:
/*
Navicat MySQL Data Transfer
Source Server : mysql
Source Server Version : 50549
Source Host : localhost:3306
Source Database : mybatis
Target Server Type : MYSQL
Target Server Version : 50549
File Encoding : 65001
Date: 2019-09-01 15:40:56
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL,
`birthday` datetime DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`address` varchar(256) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('41', 'lmd', '2018-02-19 00:00:00', '男', '北京');
INSERT INTO `user` VALUES ('43', 'mybatis saveuser', '2019-08-31 11:24:05', '男', '北京什刹海');
INSERT INTO `user` VALUES ('44', '卡哇伊', '2019-08-31 14:21:10', '男', '美国');
INSERT INTO `user` VALUES ('45', '卡哇伊', '2019-08-12 19:32:43', '女', '美国');
/*
Navicat MySQL Data Transfer
Source Server : mysql
Source Server Version : 50549
Source Host : localhost:3306
Source Database : mybatis
Target Server Type : MYSQL
Target Server Version : 50549
File Encoding : 65001
Date: 2019-09-01 20:05:28
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for account
-- ----------------------------
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` (
`id` int(11) NOT NULL COMMENT '编号',
`uid` int(11) DEFAULT NULL COMMENT '用户编号',
`money` double(255,0) DEFAULT NULL COMMENT '金额',
PRIMARY KEY (`id`),
KEY `uid` (`uid`),
CONSTRAINT `account_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of account
-- ----------------------------
INSERT INTO `account` VALUES ('1', '41', '1000');
INSERT INTO `account` VALUES ('2', '44', '1000');
INSERT INTO `account` VALUES ('3', '43', '1000');
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbcConfig.properties"></properties>
<!--使用typeAliases配置别名,它只能配置bean中类的别名-->
<typeAliases>
<package name="com.henu.bean"></package>
</typeAliases>
<!-- 配置环境 -->
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源(连接池)-->
<dataSource type="POOLED">
<!--配置连接数数据库的基本信息-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--配置映射文件的位置-->
<mappers>
<package name="com.henu.dao"></package>
</mappers>
</configuration>
Bean>>>>
Account
package com.henu.bean;
import java.io.Serializable;
/**
* @author George
* @description
**/
public class Account implements Serializable {
private Integer id;
private Integer uid;
private double money;
//从表实体应该包含一个主表实体的对象引用
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Account() {
}
public Account(Integer id, Integer uid, double money) {
this.id = id;
this.uid = uid;
this.money = money;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
@Override
public String toString() {
return "Account{" +
"id=" + id +
", uid=" + uid +
", money=" + money +
'}';
}
}
AccountUser
package com.henu.bean;
/**
* @author George
* @description
**/
public class AccountUser extends Account {
private String username;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return super.toString() + " AccountUser{" +
"username='" + username + '\'' +
", address='" + address + '\'' +
'}';
}
}
User
package com.henu.bean;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
//一对多关系映射,主表实体应该包含从表实体的集合引用
private List<Account> accounts;
public List<Account> getAccount() {
return accounts;
}
public void setAccount(List<Account> account) {
this.accounts = account;
}
public User() {
}
public User(Integer id, String username, Date birthday, String sex, String address) {
this.id = id;
this.username = username;
this.birthday = birthday;
this.sex = sex;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
Dao>>>>
AccountDao
package com.henu.dao;
import com.henu.bean.AccountUser;
import com.henu.bean.User;
import java.util.List;
public interface AccountDao {
/**
* 查询所有账户
* @return
*/
// List<Account> findAll();
/**
* 查询所有用户下的拥有账户的信息
* @return
*/
List<User> findAll();
/**
* 查询所有账户,并带有账户的用户名称和地址信息
* @return
*/
List<AccountUser> findAllAccount();
}
UserDao
package com.henu.dao;
import com.henu.bean.User;
import java.util.List;
public interface UserDao {
/**
* 查询所有
* @return
*/
List<User> findAll();
/**
* 根据userId查询用户
* @param userId
*/
User findUserById(Integer userId);
}
AccountDao.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.henu.dao.AccountDao">
<!--定义封装account和user的resultMap-->
<resultMap id="accountUserMap" type="account">
<id property="id" column="aid"></id>
<result property="uid" column="uid"></result>
<result property="money" column="money"></result>
<!--一对一的关系映射,配置封装user的内容-->
<association property="user" column="uid" javaType="user">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="birthday" column="birthday"></result>
<result property="sex" column="sex"></result>
<result property="address" column="address"></result>
</association>
</resultMap>
<!--配置查询所有-->
<select id="findAll" resultMap="accountUserMap">
select u.*,a.id as aid,a.uid,a.money from account a,user u where u.id=a.uid
</select>
<!--配置所有账户同时含有用户名和地址信息-->
<select id="findAllAccount" resultType="AccountUser">
select a.*,u.username,u.address from account a,user u where u.id=a.uid
</select>
</mapper>
UserDao.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.henu.dao.UserDao">
<!--定义User的ResultMap-->
<resultMap id="userAccountMap" type="user">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="birthday" column="birthday"></result>
<result property="sex" column="sex"></result>
<result property="address" column="address"></result>
<collection property="accounts" ofType="account">
<id property="id" column="aid"></id>
<result property="uid" column="uid"></result>
<result property="money" column="money"></result>
</collection>
</resultMap>
<!--配置查询所有-->
<!--id为方法名称-->
<select id="findAll" resultMap="userAccountMap">
select * from user u left outer join account a on u.id=a.uid
</select>
<!--配置根据id查询用户-->
<select id="findUserById" parameterType="int" resultType="User">
select * from user where id=#{id};
</select>
</mapper>
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)