文章目录
JavaEE项目三层架构
JavaEE三层架构:
- Web层/视图展现层——Servlet程序、Webwork、Structs、SpringMVC
- 获取请求参数,封装成为Bean对象
- 调用service层处理业务
- 响应数据给客户端,请求转发,重定向
- Service业务层 ——Spring框架
- 处理业务逻辑
- 调用持久层保存到数据库
- Dao持久层,只负责跟数据库交互——JDBC DbUtils JdbcTemplate Mybatis Hibernate JPA
- CRUD操作
分层
分层的目的是为了解耦。解耦就是为了降低代码耦合度,方便后期维护和升级
层 | 包 | package |
---|---|---|
Web层 | com.bookstore.web.servlet.controller | |
Service业务层 | Service接口包 | com.bookstore.service |
Service业务层 | Service接口实现类 | com.bookstore.service.impl |
Dao持久层 | Dao接口 | com.bookstore.dao |
Dao持久层 | Dao接口实现类 | com.bookstore.dao.impl |
实体bean对象 | JavaBean类 | com.bookstore.pojo/entity/domain/bean |
测试包 | com.bookstore.test/junit | |
工具类 | com.bookstore.utils |
1. 先创建书城需要的数据库和表
drop database if exists book_store;
create database book_store;
use book_store;
create table t_user
(
id int auto_increment,
username varchar(20) not null unique ,
password varchar(32) not null,
email varchar(200) null,
constraint t_user_pk
primary key (id)
);
insert into t_user(username,password,email) value('admin1','admin','admin@123.com');
select * from t_user;
ps:在insert的时候,username、password等加了单引号,报语法错误。
原因未知。
2. 编写数据库表对应的javabean对象
略
3. 编写工具类JdbcUtils
用的druid的jar包
package com.bookstore.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 {
Properties p = new Properties();
try (InputStream resourceAsStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
){
p.load(resourceAsStream);
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection connection = null;
try {
connection = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void close(Connection conn){
if (conn!=null){
try {
conn.close();
} catch (SQLException e)