##はじめに
Javaを使って初めてアプリケーションを作成する人にむけて記事を書いてみようと思います。
ポートフォリオや、会社の研修課題作成の参考にしていただければ幸いです。
今回は、タスクマネージャーを作成します。
これを応用することで、ツイッタークローンの作成にも活かすことができます。
アプリケーションの機能ごとに記事を投稿していきます。
1.データベース作成
2.ログイン機能
3.タスクの登録機能
4.一覧表示
-ソート機能
-検索機能
5.編集機能
6.削除機能
7.排他制御について
*詳しい説明はコード内に書いてありますので、コピペする人は消して使ってください
##実行環境
eclipse4.16.0
Tomcat9
Java11
Mysql5.7
目次
1.データベース概要
2.SQL文
3.Bean作成
4.データベースとの接続
5.次回予告
#データベース概要
データベース名task_db
権利ユーザ名testuser
パスワードpassword
テーブル ユーザのマスターテーブル
カテゴリーのマスターテーブル
ステータスのマスターテーブル
タスクテーブル(ユーザID、カテゴリーID、ステータスIDのForeignKeyを持ちます)
コメントテーブル(ユーザID、タスクIDのForeignKeyを持ちます)
#SQL文
①データベース作成
create databasetask_db
②ユーザ作成
まずrootユーザになってパスワードのバリデーションを変更します
Set global validate_password.length=6; パスワードの長さを6に
set global validate_password.policy=LOW; ポリシーを変更
次にパスワード付きでユーザ作成
create user testuser identified by 'password'
③ユーザへtask_dbの全権限を与える
grant all on task_db.* to testuser
以上で準備は完了です。
④それぞれのテーブルを作成していきます。
--------ユーザのマスターテーブル
create table m_user (
user_id varchar(24) primary key,
password varchar(32) not null,
user_name varchar(20) not null unique,
update_datetime timestamp not null default current_timestamp on update current_timestamp
);
--------カテゴリのマスターテーブル
create table m_category (
category_id int primary key auto_increment,
category_name varchar(20) not null unique,
update_datetime timestamp not null default current_timestamp on update current_timestamp
);
--------ステータスのマスターテーブル
create table m_status (
status_code char(2) primary key,
status_name varchar(20) unique not null,
update_datetime timestamp not null default current_timestamp on update current_timestamp
);
--------タスクテーブル
create table t_task (
task_id int auto_increment primary key,
task_name varchar(50) not null,
category_id int not null,
limit_date date,
user_id varchar(24) not null,
status_code char(2) not null,
memo varchar(100),
create_datetime timestamp default current_timestamp not null,
update_datetime timestamp default current_timestamp not null on update current_timestamp,
foreign key(category_id) references m_category(category_id),
foreign key(user_id) references m_user(user_id),
foreign key(status_code) references m_status(status_code)
);
--------コメントテーブル
create table t_comment(
comment_id int auto_increment primary key,
task_id int,
user_id varchar(100) not null,
comment varchar(100) not null,
update_datetime timestamp default current_timestamp not null on update current_timestamp,
foreign key(task_id) references t_task(task_id) on delete set null on update cascade,
foreign key(user_id) references m_user(user_id)
);
次に初期データを入れておきます。
-------カテゴリーレコード作成
insert into m_category (category_name) value("新商品A:開発プロジェクト");
insert into m_category (category_name) value("既存商品B:改良プロジェクト");
select * from m_category;
--------ステータスレコード作成
insert into m_status ( status_code, status_name) values("00", "未着手");
insert into m_status ( status_code, status_name) values("50", "着手");
insert into m_status ( status_code, status_name) values("99", "完了");
select * from m_status;
--------ユーザーレコード作成
insert into m_user(user_id, password, user_name) values("testid", "password", "testuser");
insert into m_user(user_id, password, user_name) values("testid2", "password", "testuser2");
--------タスクレコード作成
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク1", 1, "2022-10-01", "testid", "99", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク2", 2, "2020-07-05", "testid", "50", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク2", 1, "2020-09-30", "testid", "00", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク3", 2, "2002-08-30", "testid", "99", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク4", 1, "2000-09-30", "testid", "00", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク5", 2, "2025-09-30", "testid", "50", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク6", 1, "1998-09-30", "testid", "00", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク7", 2, "2020-09-30", "testid", "99", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク8", 1, "2020-10-30", "testid", "00", "テスト入力");
#Bean作成
ここでは、それぞれのテーブルのBeanを作成していきます。
フィールド、コンストラクタ、getterとsetterを記述しているだけです。
確認したらコピペでオッケーです
public class TaskBean {
/**
* フィールド
*/
private int task_id;
private String task_name;
private int category_id;
private Date limit_date;
private String user_id;
private String status_code;
private String memo;
private Timestamp create_datetime;
private Timestamp update_datetime;
private int version;
/**
* コンストラクタ
*/
public TaskBean(){
}
/**
* メソッド
*/
public int getTask_id() {
return task_id;
}
public void setTask_id(int task_id) {
this.task_id = task_id;
}
public String getTask_name() {
return task_name;
}
public void setTask_name(String task_name) {
this.task_name = task_name;
}
public int getCategory_id() {
return category_id;
}
public void setCategory_id(int category_id) {
this.category_id = category_id;
}
public Date getLimit_date() {
return limit_date;
}
public void setLimit_date(Date limit_date) {
this.limit_date = limit_date;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getStatus_code() {
return status_code;
}
public void setStatus_code(String status_code) {
this.status_code = status_code;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public Timestamp getCreate_datetime() {
return create_datetime;
}
public void setCreate_datetime(Timestamp create_datetime) {
this.create_datetime = create_datetime;
}
public Timestamp getUpdate_datetime() {
return update_datetime;
}
public void setUpdate_datetime(Timestamp update_datetime) {
this.update_datetime = update_datetime;
}
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
}
public class UserBean {
/**
* フィールド
*/
private String user_id;
private String password;
private String user_name;
/**
* コンストラクタ
*/
public UserBean(){
}
/**
* メソッド
*/
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
}
public class StatusBean {
/**
* フィールド
*/
private String status_code;
private String status_name;
/**
* コンストラクタ
*/
public StatusBean(){
}
/**
* メソッド
*/
public String getStatus_code() {
return status_code;
}
public void setStatus_code(String status_code) {
this.status_code = status_code;
}
public String getStatus_name() {
return status_name;
}
public void setStatus_name(String status_name) {
this.status_name = status_name;
}
}
public class CategoryBean {
/**
* フィールド
*/
private int category_id;
private String category_name;
/**
* コンストラクタ
*/
public CategoryBean(){
}
/**
* メソッド
*/
public int getCategory_id() {
return category_id;
}
public void setCategory_id(int category_id) {
this.category_id = category_id;
}
public String getCategory_name() {
return category_name;
}
public void setCategory_name(String category_name) {
this.category_name = category_name;
}
}
public class CommentBean {
/**
* フィールド
*/
private int comment_id;
private int task_id;
private String user_id;
private String comment;
private Timestamp update_datetime;
/**
* コンストラクタ
*/
public CommentBean() {
}
/**
* メソッド
*/
public int getComment_id() {
return comment_id;
}
public void setComment_id(int comment_id) {
this.comment_id = comment_id;
}
public int getTask_id(){
return task_id;
}
public void setTask_id(int task_id) {
this.task_id = task_id;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public Timestamp getUpdate_datetime() {
return update_datetime;
}
public void setUpdate_datetime(Timestamp update_datetime) {
this.update_datetime = update_datetime;
}
}
#データベースとの接続
①JDBCをプロジェクトのWebContent-Web-INF-libの中に入れる
②ビルドパスの構成から追加をしておきます
③コネクションマネージーを作成
変数USERと変数PASSWORDはパスワードとユーザ名はそれぞれtestuserとpasswordでやっております。
public class ConnectionManager {
//データベースの情報
private final static String URL = "jdbc:mysql://localhost:3306/task_db?useSSL=false&serverTimezone=JST";
private final static String USER = "testuser";
private final static String PASSWORD = "password";
//データベースへの接続メソッド
public static Connection getConnection() throws SQLException, ClassNotFoundException{
Class.forName("com.mysql.cj.jdbc.Driver");
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}
#次回予告
今回は、データベースの作成からBean作成とmysqlとの接続までやってまいりました。
作成いしたm_userテーブルを使って次回は、ログイン機能をつけていきます。