S实现多表添加到数据库 (s向数据库添加多个表)
随着互联网技术的发展,数据的处理变得越来越重要,而在Java Web开发中,使用Spring + SpringMVC + MyBatis (S)框架进行数据管理已经成为了常用的方法。在实际的开发过程中,多表之间的数据关联和添加操作尤为常见,如何用S框架高效地实现多表操作,是我们需要掌握的技能之一。本文将以一个具体的例子来阐述如何使用S框架实现多表添加到数据库。
1. 数据库设计
我们需要设计我们要使用的数据库表格。作为例子,我们设计了三个表格:用户表、商品表、订单表。其中,用户表代表用户信息,包括用户ID、用户名、密码、地址、等字段;商品表代表商品信息,包括商品ID、商品名称、单价等字段;订单表代表订单信息,包括订单ID、用户ID、订单时间、订单总价等字段。三个表格的结构如下:
用户表:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`address` varchar(255) DEFAULT NULL,
`phone` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
商品表:
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`price` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
订单表:
CREATE TABLE `order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) DEFAULT NULL,
`time` varchar(255) DEFAULT NULL,
`totalprice` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRNT `fk_userid` FOREIGN KEY (`userid`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2. 实体类定义
接下来,我们需要根据数据库中的表格定义我们的实体类。我们定义了三个实体类:User、Product、Order。实体类中定义的字段需要和数据库表格中的字段对应,如User实体类中定义了变量id、username、password、address、phone,分别对应数据库表格中的字段id、username、password、address、phone。
User类:
public class User {
private int id;
private String username;
private String password;
private String address;
private String phone;
//getters and setters
}
Product类:
public class Product {
private int id;
private String name;
private int price;
//getters and setters
}
Order类:
public class Order {
private int id;
private int userid;
private String time;
private int totalprice;
//getters and setters
}
3. 建立DAO接口
在S框架中,我们需要建立DAO接口来实现数据的增删改查操作。我们建立了三个DAO接口:UserDAO、ProductDAO、OrderDAO,对应实体类User、Product、Order。
UserDAO接口:
public interface UserDAO {
public int addUser(User user);
//其他方法
}
ProductDAO接口:
public interface ProductDAO {
public int addProduct(Product product);
//其他方法
}
OrderDAO接口:
public interface OrderDAO {
public int addOrder(Order order);
//其他方法
}
在DAO接口中,我们定义了addUser()、addProduct、addOrder()方法用于向数据库添加新的用户、商品和订单。
4. 实现DAO接口
在建立完DAO接口之后,我们需要根据接口中定义的方法实现具体的操作。我们建立了三个DAO层实现类:UserDAOImpl、ProductDAOImpl、OrderDAOImpl。
UserDAOImpl实现类:
@Repository
public class UserDAOImpl implements UserDAO {
@Autowired
private SqlSessionFactory sqlSessionFactory;
@Override
public int addUser(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
int result = sqlSession.insert(“addUser”, user);
sqlSession.commit();
sqlSession.close();
return result;
}
//其他方法
}
ProductDAOImpl实现类:
@Repository
public class ProductDAOImpl implements ProductDAO {
@Autowired
private SqlSessionFactory sqlSessionFactory;
@Override
public int addProduct(Product product) {
SqlSession sqlSession = sqlSessionFactory.openSession();
int result = sqlSession.insert(“addProduct”, product);
sqlSession.commit();
sqlSession.close();
return result;
}
//其他方法
}
OrderDAOImpl实现类:
@Repository
public class OrderDAOImpl implements OrderDAO {
@Autowired
private SqlSessionFactory sqlSessionFactory;
@Override
public int addOrder(Order order) {
SqlSession sqlSession = sqlSessionFactory.openSession();
int result = sqlSession.insert(“addOrder”, order);
sqlSession.commit();
sqlSession.close();
return result;
}
//其他方法
}
在实现类中,我们使用@Autowired将SqlSessionFactory注入到DAO层中,然后根据Session的具体操作方法insert(),在数据库中添加新的用户、商品以及订单。
5. 完成业务逻辑
我们将DAO层的操作封装到业务层中,完成对多个表格的添加操作。
UserService业务层:
@Service
public class UserService {
@Autowired
private UserDAO userDAO;
@Autowired
private ProductDAO productDAO;
@Autowired
private OrderDAO orderDAO;
public int addUser(User user, Product product, int quantity) {
//添加用户
int result1 = userDAO.addUser(user);
//添加商品
int result2 = productDAO.addProduct(product);
//创建订单
Order order = new Order();
order.setUserid(user.getId());
//TODO: 时间和价格的计算需要根据实际情况来设定
order.setTime(“2023-06-01”);
int totalprice = product.getPrice() * quantity;
order.setTotalprice(totalprice);
int result3 = orderDAO.addOrder(order);
return result1 + result2 + result3;
}
//其他方法
}
在业务层中,我们定义了addUser()方法,该方法接收User实体类对象、Product实体类对象以及商品数量quantity,首先调用UserDAO接口中的addUser()方法将新用户添加到用户表中,接着将商品添加到商品表中,最后创建订单并添加到订单表中。我们返回添加的结果记录数,辅助后续处理。
6. 结束语
上述就是使用S框架实现多表添加到数据库的详细步骤。其中,我们需要注意在实体类中的变量要和数据库表格中的字段对应,还要注意DAO实现类需要注入SqlSessionFactory,以及使用不同的DAO层接口实现多表之间的关联。在具体实现的过程中,可能会遇到一些坑点,需要我们对框架的整体理解提高到更高的层次上,才能更好的开发代码。