项目学习记录-Day 1
JavaEE项目的三层架构
三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
区分层次的目的即为了高内聚,低耦合的思想,对项目进行解耦,降低代码偶合程度,方便项目后期维护和升级。
1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。
为此添加了相应的package:
web层/表现层(UI) | com.forest.web/servlet/controller | |
业务逻辑层(UI) | com.forest.service | service接口包 |
com.forest.service.impl | service接口实现层 | |
Dao持久层/数据访问层 | com.forest.dao | dao接口包 |
com.forest.dao.impl | dao接口实现层 | |
实体bean对象 | com.forest.pojo/entity/domain/bean | JavaBean类 |
测试包 | com.forest.test/junit | |
工具包 | com.forest.utiles |
项目package分类:
项目设计
用户数据表设计
drop database if exists bookshop; #如果数据库--bookshop--存在,则删除
create database bookshop; #创建数据库
use bookshop; #使用--use--命令来使用数据库,
create table t_user(
id int primary key auto_increment,
username varchar(20) not null unique ,
password varchar(32) not null ,
email varchar(200)
)engine=innodb auto_increment=1 , default charset=utf8;
# engine=innodb : 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
# 因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。
# auto_increment=1 : 设计数据表从何处开始自增
# default charset=utf8 : 设计数据表编码格式为utf-8
insert into bookshop.t_user(id, username, password, email) VALUES (default,'LiuForest-gitee','Lys641488578','641488578@qq.com'); #值的属性为自增时,使用--NULL/default--代替
insert into bookshop.t_user(id, username, password, email) VALUES (null,'forest','123456','lys641488578@outlook.com');
select * from bookshop.t_user;
- DROP :通过使用 DROP 语句,可以轻松地删除索引、表和数据库;
DROP TABLE table_name语句用于删除数据表。 - 当数据表中某一数据值的属性为自增时,使用NULL/default代替
编写数据库表对应JavaBean对象
根据用户数据表中字段,User类中有id,username,password,email几个对象。
编写工具类JdbcUtiles
导入需要用到的jar包,
-
用于测试使用的jar包(hamcrest-core-1.3.jar、junit-4.12.jar)
-
在web项目文件的WEB-INF目录下创建一个lib文件夹用来存放所要用到的jar包;
- 添加jar包到项目依赖中去,这里有两种方法:
第一种:
右键点击lib文件夹-----》Add As Library … ,大功告成 O(∩_∩)O哈哈~
第二种:(比较复杂)
进入Project Structure配置页面 -----》
下图中更改完添加的名称后,单击右下角Apply按钮。
完成后进入Modules选项,点击相应的需要用到jar包的项目:
再对更改进行修复:
最后我们再OK一下就OK了,哈哈,老壳好痛!
在src目录下编写jdbc.properties属性配置文件
username = root #数据库用户名
password = root #数据库密码
url = jdbc:mysql://localhost:3306/bookshop #数据库地址
DriverClassName = com.mysql.jdbc.Driver #数据库连接驱动
initialSize = 5 #初始化,会在tomcat一启动时,创建5条连接
maxActive = 10 #数据库最大连接数
编写JdbcUtiles工具类
package com.forest.utils;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class JdbcUtils {
private static DruidDataSource dataSource;
static {
try {
Properties properties = new Properties();
//读取jdbc.properties属性配置文件
InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
//从流中加载数据
properties.load(inputStream);
//创建数据库连接池
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
//判断是否连接成功
//System.out.println(dataSource.getConnection());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接池中的连接
* @return 如果返回null,则说明获取连接失败 <br /> 有值就是获取成功,
*/
public static Connection getConnection(){
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (Exception e) { //为什么要用Exception替换SQLException????
e.printStackTrace();
}
return conn;
}
/**
* 关闭连接,放回数据库连接池,
* @param conn
*/
public static void close(Connection conn){
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
在test包中创建测试类
package com.forest.test;
import com.forest.utils.JdbcUtils;
import org.junit.Test;
public class JdbcUtilesTest {
@Test
public void testJdbcUtiles(){
System.out.println(JdbcUtils.getConnection());
}
}
执行这个测试类之后,可得到数据库连接。