728x90
300x250

[Spring-Framework] 7. Maven, Hibernate 5.4, Servlet, MySQL 8 연동(CRUD) - (2)


2부 글을 이어서 작성하고자 한다.


[1부] [Spring-Framework] 6. Maven, Hibernate 5.4, Servlet, MySQL 8 연동(CRUD) - (1) , 2020-09-21 14:36
https://yyman.tistory.com/1404



7. 서블렛 만들기


패키지: com.hibernateMaven.web.controller

서블릿명(클래스명):

1. SampleServlet

2. StudentServlet


두 개를 만들어준다.


세부적인 내용은 지금하진 않는다.



8. Model 정의(Entity)


OR-M(Object Relational-Mapping)의 특징을 가지는 Hibernate에서 사용할 수 있도록 DTO 또는 VO(Value Object)를 정의해줘야 한다.


패키지: com.hibernateMaven.web.model

클래스명: 

1. Emptable

2. Student


클래스에 Persistence를 잘 정의해줘야 한다.

@Entity, @Table 등에 대한 Mapping을 클래스에서도 할 수 있다.


package com.hibernateMaven.web.model;


import java.sql.Date;


import javax.persistence.*;


@Entity

@Table(name = "emptable")

public class Emptable

{


@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private int empno;


@Column(name="name")

private String name;


@Column(name="address")

private String address;


@Column(name="createdate")

private Date createdate;

public int getEmpno() {

return empno;

}

public void setEmpno(int empno) {

this.empno = empno;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public Date getCreatedate() {

return createdate;

}

public void setCreatedate(Date createdate) {

this.createdate = createdate;

}

}


코드 1. Emptable.java


package com.hibernateMaven.web.model;


import java.sql.Date;


import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Table;


@Entity

@Table(name = "student")

public class Student {


@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private int studentno;


@Column(name="name")

private String name;


@Column(name="address")

private String address;


@Column(name="createdate")

private Date createdate;

public int getStudentno() {

return studentno;

}

public void setStudentno(int studentno) {

this.studentno = studentno;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public Date getCreatedate() {

return createdate;

}

public void setCreatedate(Date createdate) {

this.createdate = createdate;

}

}


코드 2. Student.java


이전의 Hibernate 개발을 보면, xml으로 hibernate.cfg.xml에 resource-mapping을 시켜주었다.

물론 현재 XML-Mapping 방법을 사용해도 무방하나, 굳이 번거롭게 2개 이상 수정 작업을 만들어서 일을 크게 만들 필요는 없다고 본다.


<?xml version = "1.0" encoding = "utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name = "com.hibernateMaven2.web.model.Emptable" table = "emptable"> <meta attribute = "class-description"> This class contains the employee detail. </meta> <id name = "empno" type = "int" column = "empno"> <generator class="native"/> </id> <property name = "name" column = "name" type = "string"/> <property name = "address" column = "address" type = "string"/> <property name = "createdate" column = "createdate" type = "date"/> </class>  </hibernate-mapping>

예1) Emptable.hbm.xml


[첨부(Attachments)]

Emptable.hbm-xml.zip


Xml-Mapping 관련 파일이 필요한 이유는 JBoss-Hibernate에서 현재 생성이 되지 않고 있다.
(JBoss의 업데이트 등의 문제) - [2020-09-21 기준]


충분히 태스트를 해보았다. JBoss 기능에도 클래스로 맵핑하는 기능이 있다.



그림 14. Mapping 추가 기능 - STS 4의 JBoss(Hibernate 기능)





9. Hibernate.cfg.xml 파일 수정하기


그림 14의 Add-Mapping 작업을 해줘야 한다.

1부의 그림 9에 있는 첨부 파일의 내용이다.


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

                                         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

 <session-factory name="">

  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

  <property name="hibernate.connection.username">사용자계정</property>

  <property name="hibernate.connection.password">비밀번호</property>

  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/web?serverTimezone=UTC&amp;characterEncoding=utf8</property>

  <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>

  <property name="hibernate.show_sql">true</property>

  <property name="hibernate.hbm2ddl.auto">update</property>

  <property name="hibernate.default_entity_mode">pojo</property>

  <property name="hibernate.current_session_context_class">thread</property>

  

  <mapping class="com.hibernateMaven.web.model.Emptable"/>    <!-- empTable 클래스 맵핑-->

  <mapping class="com.hibernateMaven.web.model.Student"/>

 </session-factory>

</hibernate-configuration>


코드 3) 클래스 맵핑 방법


[첨부(Attachments)]

hibernate.cfg-class-mapping.zip



예1의 형태로도 맵핑을 시도해볼 수 있다.


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

                                         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

 <session-factory name="">

  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

  <property name="hibernate.connection.username">사용자명</property>

  <property name="hibernate.connection.password">비밀번호</property>

  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/web?serverTimezone=UTC&amp;characterEncoding=utf8</property>

  <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>

  <property name="hibernate.show_sql">true</property>

  <property name="hibernate.hbm2ddl.auto">update</property>

  <property name="hibernate.default_entity_mode">pojo</property>

  <property name="hibernate.current_session_context_class">thread</property>

  <mapping class="com.hibernateMaven.web.model.Student"/>


  <!-- XML Resource 자원으로 맵핑 -->

  <mapping resource="com/hibernateMaven/web/model/Emptable.hbm.xml"/>

 </session-factory>

</hibernate-configuration>


코드 4) 클래스, XML 맵핑 방법


[첨부(Attachments)]

hibernate.cfg-xml-mapping.zip



코드 3과 코드 4를 언급한 것은 시중 시판되는 책이나 검색 자료 등에서 언급되고 있는 소스코드의 고정관념을 깨라는 이야기이다.

자유롭게 해도 된다.


 

 

그림 15) 코드 3방식의 클래스 맵핑으로만 구성

그림 16. 코드 4방식을 채택하였을 때의 구조
         (XML-Mapping이라고 흔히 정의함)



10. HibernateUtil.java (이해보다는 복사, 붙여넣기할 것)


HibernateUtil이라는 클래스에 정의된 원형들은 DB의 연결과 종료에 해당되는 부분들이다.

연결 한번 하려고 이걸 다 외우고 작성할 수 없으니 Copy해서 사용하는 걸 추천한다.


package com.hibernateMaven.web.factory;


import org.hibernate.SessionFactory;

import org.hibernate.boot.Metadata;

import org.hibernate.boot.MetadataSources;

import org.hibernate.boot.registry.StandardServiceRegistry;

import org.hibernate.boot.registry.StandardServiceRegistryBuilder;



public class HibernateUtil

{


    private static StandardServiceRegistry registry;

    private static SessionFactory sessionFactory;


    public static SessionFactory getSessionFactory() {

        if (sessionFactory == null) {

            try {

                // Create registry

                registry = new StandardServiceRegistryBuilder().configure().build();


                // Create MetadataSources

                MetadataSources sources = new MetadataSources(registry);


                // Create Metadata

                Metadata metadata = sources.getMetadataBuilder().build();


                // Create SessionFactory

                sessionFactory = metadata.getSessionFactoryBuilder().build();

                

            } catch (Exception e) {

                e.printStackTrace();

                if (registry != null) {

                    StandardServiceRegistryBuilder.destroy(registry);

                }

            }

        }

        return sessionFactory;

    }


    public static void shutdown() {

        if (registry != null) {

            StandardServiceRegistryBuilder.destroy(registry);

        }

    }


}


코드 5) HibernateUtil.java 코드


[첨부(Attachments)]

HibernateUtil.zip



11. Interface 설계


이 글에서는 select, select where cause, insert, update, delete를 위주의 기능을 확인할 수 있도록 작성되었다.


package com.hibernateMaven.web.service;


import java.util.List;


import com.hibernateMaven.web.model.Emptable;


public interface IEmpTable {


public List<Emptable> allList(); // Select * FROM empTable

public Emptable getList(Integer num); // Select * from emptable where empno = ?

public void save(Emptable emptable); // insert into emptable

public int update(Emptable emptable); // update emptable set cause where emp = ? 

public int delete(Integer num); // delete from emptable where empno = ?

public Emptable searchName(Integer num, String name); // 두 가지 조건 동시 만족 조회

}



코드 6) IEmpTable.java (인터페이스 파일)


[첨부(Attachments)]

IEmpTable.zip



package com.hibernateMaven.web.service;


import java.util.List;


import com.hibernateMaven.web.model.Student;


public interface IStudent {


public List<Student> allList(); // Select * FROM student

public Student getList(Integer num); // Select * from student where studentno = ?

}



코드 7) IStudent.java (인터페이스 파일)


[첨부(Attachments)]

IStudent.zip




12. Class 구현


IEmpTable을 바탕으로 EmpTableService.java, StudentService.java 파일을 작성해보았다.


package com.hibernateMaven.web.service;


import java.util.List;


import org.hibernate.query.*;

import org.hibernate.Session;

import org.hibernate.Transaction;


import com.hibernateMaven.web.factory.HibernateUtil;

import com.hibernateMaven.web.model.Emptable;


public class EmpTableService implements IEmpTable {


@Override

public List<Emptable> allList() {


Transaction transaction = null;

List<Emptable> list = null;

try (Session session = HibernateUtil.getSessionFactory().openSession()) {

// start a transaction

transaction = session.beginTransaction();

// get an user object

list = session.createQuery("from Emptable").getResultList();

System.out.println("연습:" + list.get(0).getName());

// commit transaction

transaction.commit();

} catch (Exception e) {

if (transaction != null) {

transaction.rollback();

}

e.printStackTrace();

}

        return list;

}


@Override

public Emptable getList(Integer num) {

Transaction transaction = null;

Emptable emptable = null;

try (Session session = HibernateUtil.getSessionFactory().openSession()) {

transaction = session.beginTransaction();

emptable = session.get(Emptable.class, num);

            

System.out.println("특정 조회:" + emptable.getName());

transaction.commit();


return emptable;

        } catch (Exception e) {

            if (transaction != null) {

                transaction.rollback();

            }

            e.printStackTrace();

            

            return null;

        }

}



@Override

public void save(Emptable emptable) {

Transaction transaction = null;

try (Session session = HibernateUtil.getSessionFactory().openSession()) {

// start a transaction

transaction = session.beginTransaction();

// save the student object

session.save(emptable);

// commit transaction

transaction.commit();

} catch (Exception e) {

if (transaction != null) {

transaction.rollback();

}

e.printStackTrace();

}

}


@Override

public int update(Emptable emptable) {


Transaction transaction = null;

String hql = null;

int result = -1;

try (Session session = HibernateUtil.getSessionFactory().openSession()) {

// start a transaction

transaction = session.beginTransaction();

// save the student object

hql = "UPDATE Emptable set name = :name, "  +

"address = :address, createdate = :createdate " +

             "WHERE empno = :empno";

Query query = session.createQuery(hql);

query.setParameter("name", emptable.getName());

query.setParameter("address", emptable.getAddress());

query.setParameter("createdate", emptable.getCreatedate());

query.setParameter("empno", emptable.getEmpno());

result = query.executeUpdate();


System.out.println("수정결과:" + result);

// commit transaction

transaction.commit();

} catch (Exception e) {

if (transaction != null) {

transaction.rollback();

}

e.printStackTrace();

}

return result;

}


@Override

public int delete(Integer num) {

Transaction transaction = null;

String hql = null;

int result = -1;

try (Session session = HibernateUtil.getSessionFactory().openSession()) {

// start a transaction

transaction = session.beginTransaction();

// save the student object

hql = "Delete from Emptable " +

             "WHERE empno = :empno";

Query query = session.createQuery(hql);

query.setParameter("empno",  num);

result = query.executeUpdate();


System.out.println("삭제결과:" + result);

// commit transaction

transaction.commit();

} catch (Exception e) {

if (transaction != null) {

transaction.rollback();

}

e.printStackTrace();

}

return result;

}


@Override

public Emptable searchName(Integer num, String name) {


Transaction transaction = null;

String hql = null;

Emptable emp = null;

try (Session session = HibernateUtil.getSessionFactory().openSession()) {

// start a transaction

transaction = session.beginTransaction();

// save the student object

hql = "from Emptable " +

             "WHERE empno = :empno and name = :name";

Query query = session.createQuery(hql);

query.setParameter("empno", num);

query.setParameter("name",  name);

emp = (Emptable) query.list().get(0);


System.out.println("번호, 이름 검색");

// commit transaction

transaction.commit();

return emp;

} catch (Exception e) {

if (transaction != null) {

transaction.rollback();

}

e.printStackTrace();

return null;

}

}


}



코드 8) EmpTableService.java


[첨부(Attachments)]

EmpTableService.zip


package com.hibernateMaven.web.service;


import java.util.List;


import org.hibernate.query.*;

import org.hibernate.Session;

import org.hibernate.Transaction;


import com.hibernateMaven.web.factory.HibernateUtil;

import com.hibernateMaven.web.model.Student;


public class StudentService implements IStudent {


@Override

public List<Student> allList() {

return null;

}


@Override

public Student getList(Integer num) {

Student student;

Transaction transaction = null;

        Session session= HibernateUtil.getSessionFactory().openSession();

         try

         {

  transaction = session.beginTransaction();

             student=(Student)session.get(Student.class,num); 

 

             System.out.println("특정 조회:" + student.getName());

             transaction.commit();

             return student;

         }

         catch (Exception e) 

         {

        e.printStackTrace();

            return null;

         }

         finally 

         {

             session.close(); 

         }

         

         /*

Student student = null;

try (Session session = HibernateUtil.getSessionFactory().openSession()) {

transaction = session.beginTransaction();

student = session.get(Student.class, num);

            

System.out.println("특정 조회:" + student.getName());

        } catch (Exception e) {

            if (transaction != null) {

                transaction.rollback();

            }

            e.printStackTrace();

        }

*/

}


}



코드 9) StudentService.java


[첨부(Attachments)]

StudentService.zip




13. Servlet - 완성하기


1부에서 생성한 서블렛의 내용을 구현하였다.


package com.hibernateMaven.web.controller;


import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Date;

import java.util.List;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.hibernateMaven.web.model.Emptable;

import com.hibernateMaven.web.service.EmpTableService;

import com.hibernateMaven.web.service.StudentService;


public class SampleServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    public SampleServlet() {

        super();

    }


/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {


res.setContentType("text/html;charset=UTF-8");

PrintWriter out = res.getWriter();

// HTML 스타일 정의

out.println("<html><head><title>Hibernate Maven - MySQL 8 실험</title></head><body>");

EmpTableService service = new EmpTableService();


// 1. 전체 조회

List<Emptable> emp1 = service.allList();


// 2. 특정 ID 조회

Emptable emp2 = service.getList(1);

// 3. 삽입 구현

Emptable createEmp = new Emptable();

createEmp.setName("홍길동");

createEmp.setAddress("행복구 행복시");

java.sql.Date sqlDate = java.sql.Date.valueOf("2020-05-20");

createEmp.setCreatedate(sqlDate);

service.save(createEmp);

// 4. 수정

Emptable updateEmp = new Emptable();

updateEmp.setName("동길홍");

updateEmp.setAddress("시복행 구복행");

sqlDate = java.sql.Date.valueOf("1990-09-01");

updateEmp.setCreatedate(sqlDate);

updateEmp.setEmpno(3);

service.update(updateEmp);

// 5. 삭제

service.delete(4);

// 6. 특정 이름, 번호 조회

Emptable query1 = service.searchName(18, "홍길동");

out.println("주소:" + query1.getAddress() + "<br/>" );

out.println("</body></html>");

out.close();

}


/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

}


}



코드 10) SampleServlet.java


[첨부(Attachments)]

SampleServlet.zip



package com.hibernateMaven.web.controller;


import java.io.IOException;

import java.io.PrintWriter;

import java.util.List;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.hibernateMaven.web.model.Student;

import com.hibernateMaven.web.service.StudentService;



public class StudentServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    public StudentServlet() {

        super();

    }


/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {


res.setContentType("text/html;charset=UTF-8");

PrintWriter out = res.getWriter();

// HTML 스타일 정의

out.println("<html><head><title>Hibernate Maven - MySQL 8 실험(Table:Student)</title></head><body>");

StudentService service2 = new StudentService();


// 1. 전체 조회

//List<Student> student1 = service.allList();

service2.getList(1);

out.println("</body></html>");

out.close();

}


/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

doGet(req, res);

}


}



코드 11) StudentServlet.java


[첨부(Attachments)]

StudentServlet.zip



15. 맺음글(Conclusion)


OR-M 프레임워크 중 하나인 Hibernate 5.4 Final 버전을 사용하는 방법에 대해서 소개하였다.


추가적으로 알아보면 도움되는 것: Hibernate HQL
-> SQL언어가 사라진 것이 아니라, 또 Hibernate가 제공하는 HQL이 탄생하게 되었다.
ORM을 맹신하면 안 되는 이유가 있는 것이다.

* Link1: https://howtodoinjava.com/hibernate/complete-hibernate-query-language-hql-tutorial/ (영어), 2014-10-30

  Link2: https://www.tutorialspoint.com/hibernate/hibernate_query_language.htm, (영어)


* 공식 사이트: https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#hql, Hibernate 5.4 Final 메뉴얼

  (조금 공부할 양이 많다.) - 2020-08-27 10:35:21


제대로 사용하기 위해서는 이 밖에도 Hibernate 프레임워크 하나에만 많은 공부가 필요한 것 같다.

물론 전부 학습 할 수는 없다.



* 참고자료(References)


[Hibernate - Example Project]


5. GitHub - RameshMF/Hibernate-ORM-Tutorials: 40+ source code Examples/Tutorials/Guides of Hibernate ORM Framework, https://github.com/RameshMF/Hibernate-ORM-Tutorials, Accessed by 2020-09-21, Last Modified .


-> 추천(43점): 구현하는 예제가 다양하게 이클립스 버전으로 작성되어 있다. 물론 100% 돌아가는 건 아니다. 구현할 때 많은 참고가 된다.


6. Hibernate 5 XML Configuration Example - DZone Java, https://dzone.com/articles/hibernate-5-xml-configuration-example, Accessed by 2020-09-21, Last Modified 2018-11-29.


-> 추천(55점): Web 프로젝트는 아니었지만, 구현에 있어서 큰 도움을 주었다.


[Hibernate HQL]


7. Hibernate HQL - Hibernate Query Language Examples - - HowToDoInJava, https://howtodoinjava.com/hibernate/complete-hibernate-query-language-hql-tutorial/, Accessed by 2020-09-21, Last Modified 2014-10-30.


-> 추천(40점): 기본적인 부분에 대해서 잘 작성되었다.


8. Hibernate ORM 5.4.21.Final User Guide, https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html, Accessed by 2020-09-21, Last Modified 2020-08-27.


-> 추천(40점): 조금 어렵긴 해도 알면 도움이 될 거 같다. 다 활용하진 못할 거 같다는 생각도 든다.


9. Hibernate - Query Language - Tutorialspoint, https://www.tutorialspoint.com/hibernate/hibernate_query_language.htm, Accessed by 2020-09-21, Last Modified .


-> 추천(40점): 기본적인 부분에 대해서 잘 작성되었다.


[Hibernate - XML]


10. java - [Hibernate]Error: entity class not found: - Stack Overflow, https://stackoverflow.com/questions/6692882/hibernateerror-entity-class-not-found/38801518, Accessed by 2020-09-21, Last Modified 2016.


-> XML-Mapping 시연할 때, "[Hibernate]Error: entity class not found:"를 해결하기 위해서 찾아본 것이다.


11. Brain to Blog :: 하이버네이트(Hibernate) 사용하기, https://antop.tistory.com/entry/%ED%95%98%EC%9D%B4%EB%B2%84%EB%84%A4%EC%9D%B4%ED%8A%B8Hibernate-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0, Accessed by 2020-09-21, Last Modified 2009-08-24.

반응형
728x90
300x250

[JSP] 7. JSP, Servlet(JDBC) 프로그래밍

 

간결하고 쉽게 작성해보았다.

일반 게시판에서 사용되는 페이징 기법은 제거하고 JSP, Servlet(서블릿) 사용 방법에 대해서 소개한다.

(I tried to write concise and easy.)

(Removes the paging technique used in general bulletin board and introduces how to use JSP, Servlet.)

 

 

* Apache Tomcat-9.0.27
* Microsoft Windows 10
* MariaDB 10.4

 


1. 아파치 톰캣 실행하기

 

톰캣을 실행한다. startup.bat 배치 파일을 실행하면 된다.

(Run Tomcat. Just run the startup.bat batch file.)

 

 

Figure 1) Tomcat folder

그림 1) 톰캣 폴더의 모습

 

 

Figure 2) Tomcat external library folder

그림 2) 톰캣 외부 라이브러리 폴더

 

"C:\apache-tomcat-9.0.27\lib"는 tomcat의 서블릿, DBCP, Catalina 등이 담겨져 있는 라이브러리 폴더이다.

("C:\apache-tomcat-9.0.27\lib" is a library folder containing tomcat's servlets, DBCP, Catalina, and so on.)

 

 

Figure 3) Tomcat run

그림 3) 톰캣 실행의 모습

 


2. 이클립스의 모습(Eclipse)

 

이클립스 웹 작업에 있어서 가장 중요한 것은 아무래도 환경설정을 꼽겠다.

(Perhaps the most important thing when working with Eclipse web is configuration.)

 

 

Figure 4) Programming work in Eclipse

그림 4) 이클립스에서의 프로그래밍 작업 모습

 

 

 

Figure 5) Adding "MariaDB-Java-client-2.4.4.jar" and "Tomcat Jars" to Libraries tab in Java Build Path

그림 5) Java Build Path에 Libraries 탭에 "MariaDB-Java-client-2.4.4.jar", "Tomcat Jars" 추가 모습

 

[첨부(Attachment)]

mariadb-java-client-2.4.4.jar

 

초기 작업할 수 있도록 프로젝트 파일도 첨부해서 올려놓도록 하겠다.

(We will also attach a project file for the initial work.)

 

[첨부(Attachment)]

Stone.z01

Stone.z02

Stone.z03

Stone.zip

 


3. HeidiSQL 10.2.0.5599에서 게시판 DB 설계하기(Designing board DB in HeidiSQL 10.2.0.5599)

 

예제에 사용한 게시판 DB 설계를 하였다.

가볍게 따라서 작성하면 될 것이다.

(Designed bulletin board DB used in the example.)

(Simply follow along.)

 

 

Figure 6) "board_list" Board Design Example

그림 6) "board_list" 게시판 설계의 예

 


4. 프론트엔드에서 사용자 접속의 예(Example of User Connections at the Front End)

 

아래의 그림은 프론트엔드에서의 웹 사이트이다.(The figure below shows a Web site at the front end.)

http://localhost:8080/Stone/Board/list.jsp

http://localhost:8080/Stone/Board/write.jsp

 

Figure 7) Example of list.jsp

그림 7) list.jsp의 예

 

 

Figure 8) Example of write.jsp

그림 8) write.jsp의 예

반응형
728x90
300x250
[MySQL] 날짜(Date) 그리고 날짜 연산(Operation)

 

MySQL 5.7에서 날짜 및 날짜 연산을 수행하는 방법에 대해서 소개한다.

 


1. 사용방법

 

1-1. Between

 

SELECT id, type, subject, money, taxRate, count, regidate FROM {게시판명} WHERE strDate BETWEEN '{시작일자}' AND '{종료일자}'

 

이 명령어를 사용하면, 시작일자부터 종료일자까지의 데이터를 출력할 수 있다.

 


1-2. 일자 연산(DATE_ADD() Function)


이 명령어를 사용하면, 일자의 증가, 감소 등을 구현할 수 있다.

 


1-2-1. 일자 증가

 

SELECT DATE_ADD( "2018-08-01", INTERVAL 31 DAY )

 

 

그림 1-2-1-1. 출력결과, 도도(Dodo)

 


1-2-2. 일자 감소

 

SELECT DATE_ADD( "2018-08-01", INTERVAL -31 DAY )

 

 

그림 1-2-2-1. 출력결과, 도도(Dodo)

 


1-2-3. 일자 (DATE_ADD 연산자)의 종류

 

unit

Value

Expected expr Format

MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES:SECONDS.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS:MINUTES:SECONDS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_MICROSECOND 'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'

 


2. 참고자료(Reference)

 

1. 12.7 Date and Time Functions, MySQL, https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add, Accessed by 2018-08-01

반응형
728x90
300x250

[MySQL] 특정 범위 데이터 조회 & 응용 - 게시판 페이징 구현

 

기초적인 방법으로 특정 범위 데이터를 조회할 수 있습니다.

 

SELECT * FROM mental.ck_counsel where idx >= 1 and idx <= 5;

 

응용) 게시판 페이징 구현

 

게시판 페이징 로직은 아래와 같이 생각해볼 수 있습니다.

 

설계 후, 게시판 페이징을 구현하면 됩니다.

반응형
728x90
300x250

[PC 활용] 관리도구 소개 / MySQL Workbench

 

WIndows 환경에서 작업하는 사용자들은 MySQL-GUI-Tool이나 기존에 phpMyAdmin 또는 수기 명령어 조작을 통해 제어를 해온 User들이 많이 있습니다.

 

 

SQL Management (SQL 2012)의 프로그램과 거의 같은 기능을 수행한다고 보면 됩니다.

SQL 제어가 수기로 하기에 불편할 때, 이 프로그램을 통해 제어하시면 됩니다.

 

예전 MySQL-GUI Tools에 비해 호환성도 개선되었고, 지속적인 업데이트가 되서 사용하기에 정말 편리하고 좋습니다.

 

참고사이트)

http://dev.mysql.com/downloads/

반응형
728x90
300x250
[MS SQL Server 2008] sqlCMD 사용법


이번에는 sqlCMD에 대해 간단하게 언급하겠습니다.

MySQL에서 Command line과 같은 역할을 수행하는 프로그램입니다.

 


1. 사용방법

 

시작에서 실행 cmd라고 입력합니다.

그리고 sqlcmd -U sa -P 암호 라고 입력하면 서버에 접속할 수 있습니다.

 

(참고)

-U는 ID를 의미합니다.

-P는 Password를 의미합니다.

반응형
728x90
300x250

명령어

DBCC CHECKIDENT (TableName, RESEED, 초기 값)


사용 용도
DB의 데이터의 ID(정수계열자료) 값을 정리할 때 사용합니다.

반응형
728x90
300x250

MySQL 문자열 함수

1. Char_Length(string)
문자열의 길이를 알아봅니다. 2Byte문자는 1개로 취급합니다.
mysql> SELECT CHAR_LENGTH("안녕하세요");
+---------------------------+
| CHAR_LENGTH("안녕하세요")  |
+---------------------------+
|                         5 |
+---------------------------+
1 row in set (0.03 sec)

2. LENGTH(string)
문자열의 Byte수를 알아봅니다.
mysql> SELECT LENGTH("안녕하세요");
+----------------------+
| LENGTH("안녕하세요")  |
+----------------------+
|                   10 |
+----------------------+
1 row in set (0.00 sec)


3. CONCAT(string1, string2,...)
문자열을 합칩니다.
mysql> SELECT CONCAT("안녕", "하세요");
+--------------------------+
| CONCAT("안녕", "하세요")  |
+--------------------------+
| 안녕하세요                |
+--------------------------+
1 row in set (0.03 sec)


4. CONCAT_WS ("구분자", string1, string2,...)
문자열을 특정 구분자를 포함시켜 합쳐줍니다.
mysql> SELECT CONCAT_WS(',', "안녕", NULL, "하세요");
+----------------------------------------+
| CONCAT_WS(',', "안녕", NULL, "하세요")  |
+----------------------------------------+
| 안녕,하세요                             |
+----------------------------------------+
1 row in set (0.00 sec)


5. FORMAT(number, round)
숫자의 천단위 구분자를 넣어줍니다. round 는 소수점 뒷자리 절사 길이 입니다.
mysql> SELECT FORMAT(123456, 0);
+-------------------+
| FORMAT(123456, 0) |
+-------------------+
| 123,456           |
+-------------------+
1 row in set (0.00 sec)


6. REPLACE(string, from_string, to_string)
문자열을 치환합니다.
mysql> SELECT REPLACE("우리나라 나쁜나라", "나쁜", "좋은");
+----------------------------------------------+
| REPLACE("우리나라 나쁜나라", "나쁜", "좋은")    |
+----------------------------------------------+
| 우리나라 좋은나라                              |
+----------------------------------------------+
1 row in set (0.02 sec)


출처 : http://www.lovelgw.com/Blog/257

반응형

+ Recent posts