英文:
Need example of INNER JOIN for 2 tables - Entity and EntityCategory - for MVC architecture
问题
我需要一个关于MVC架构的工作示例,使用Java Web应用程序的样例。所需技术仅限于:JDBC、JSP和Servlet,最好使用MySQL数据库。***我不需要Hibernate和Spring。***示例数据库可能仅包含两个表,如Users和UserRoles,或者(Products和ProductCategories等),这些表可以通过INNER JOIN连接起来。
尽管提供一个示例项目的链接将会非常有帮助,但我也希望您就以下问题提供建议:
-
对于示例项目,是使用class还是enum来表示UserRole?
-
在User类中是引用“private UserRole userRole;”还是“private int userRoleId;”?
-
作为“ListAllRecords”方法的示例,如何利用查询结果,该查询连接了users和user_roles两个表:
SELECT users.*,
user_roles
.name
FROM users INNER JOINuser_roles
ON user_role_id =user_roles
.id
;
以下是我正在努力理清思路的项目细节:
我的设计是:
实体类:
package com.project.entity.temp;
public class User {
private int id;
private String name;
private String password;
private UserRole userRole;
}
public class UserRole {
private int id;
private String name;
}
SQL查询:
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `mydb` ;
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table mydb.user_roles
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`user_roles` ;
CREATE TABLE IF NOT EXISTS `mydb`.`user_roles` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mydb.users
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`users` ;
CREATE TABLE IF NOT EXISTS `mydb`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`password` VARCHAR(45) NOT NULL,
`user_role_id` INT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
INDEX `fk_users_user_roles_idx` (`user_role_id` ASC) VISIBLE,
CONSTRAINT `fk_users_user_roles`
FOREIGN KEY (`user_role_id`)
REFERENCES `mydb`.`user_roles` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
英文:
I need a working example of the sample working Java web application for the MVC architecture. The technologies which are needed are only: JDBC with JSP and Servlet on, preferably MySQL. I don't need Hybernate and Spring. The sample DB may include only 2 tables like Users and UserRoles or (Products and ProductCategories, etc) which are joined on INNER JOIN.
Although a link to the sample project would be greatly appreciated, I'd also appreciate recommendations on what should I use:
-
UserRole class or enum for the sample project?
-
reference "private UserRole userRole;" or "private int userRoleId;" in User class?
-
as an example of the ListAllRecords method, how to utilize results of the query which joins users and user_roles tables:
SELECT users.*,
user_roles
.name
FROM users INNER JOINuser_roles
ON user_role_id =user_roles
.id
;
Here are details of my project which I'm trying to wrap my head around:
My design is:
Entity classes:
package com.project.entity.temp;
public class User {
private int id;
private String name;
private String password;
private UserRole userRole;
}
public class UserRole {
private int id;
private String name;
}
SQL queries:
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `mydb` ;
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`user_roles`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`user_roles` ;
CREATE TABLE IF NOT EXISTS `mydb`.`user_roles` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`users`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`users` ;
CREATE TABLE IF NOT EXISTS `mydb`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`password` VARCHAR(45) NOT NULL,
`user_role_id` INT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
INDEX `fk_users_user_roles_idx` (`user_role_id` ASC) VISIBLE,
CONSTRAINT `fk_users_user_roles`
FOREIGN KEY (`user_role_id`)
REFERENCES `mydb`.`user_roles` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
答案1
得分: 1
我遵循了这种方法,但我想知道是否这是实现目标的正确方法:
- 使用以下查询获取结果集
SELECT users.*,user_roles.name FROM users INNER JOIN user_roles ON user_role_id = user_roles.id; - 循环遍历记录并从 ResultSet 数据填充 UserRoles 对象
user = new User();
userRole = new UserRole();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
user.setPassword(resultSet.getString("password"));
userRole.setId(resultSet.getInt("user_role_id"));
userRole.setName(resultSet.getString("user_roles.name"));
user.setUserRole(userRole);
- 从 JSP 表单获取数据时将使用隐藏字段。
英文:
I follow that approach, but was wondering whether it is the proper way to accomplish the goal:
- Got result set using this query
SELECT users.*, user_roles.name FROM users INNER JOIN user_roles ON user_role_id = user_roles.id; - Looped through the records and populated UserRoles object from the ResultSet data
user = new User();
userRole = new UserRole();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
user.setPassword(resultSet.getString("password"));
userRole.setId(resultSet.getInt("user_role_id"));
userRole.setName(resultSet.getString("user_roles.name"));
user.setUserRole(userRole);
- When getting data from the JSP form will use the hidden fields.
答案2
得分: 0
尝试以下内容:
Maven 依赖 -
> <dependency> <groupId>javax.persistence</groupId>
> <artifactId>javax.persistence-api</artifactId>
> <version>2.2</version> </dependency>
或者
> <dependency>
> <groupId>javax.persistence</groupId>
> <artifactId>persistence-api</artifactId>
> <version>1.0.2</version> </dependency>
package com.project.entity.temp;
import javax.persistence.Entity;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class User {
@Id
private int id;
private String name;
private String password;
@OneToOne
private UserRole userRole;
}
@Entity
public class UserRole {
@Id
private int id;
@OneToOne
private User user;
private String name;
}
英文:
Try below
Maven dependency -
> <dependency> <groupId>javax.persistence</groupId>
> <artifactId>javax.persistence-api</artifactId>
> <version>2.2</version> </dependency>
Or
> <dependency>
> <groupId>javax.persistence</groupId>
> <artifactId>persistence-api</artifactId>
> <version>1.0.2</version> </dependency>
package com.project.entity.temp;
import javax.persistence.Entity;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class User {
@Id
private int id;
private String name;
private String password;
@OneToOne
private UserRole userRole;
}
@Entity
public class UserRole {
@Id
private int id;
@OneToOne
private User user;
private String name;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论