MVC、三层架构、数据库连接池、Spring JDBC

🎯 365bet手机在线注册 📅 2026-11-05 16:13:05 👤 admin 👀 4470 ❤️ 432
MVC、三层架构、数据库连接池、Spring JDBC

MVC模式

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,

用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

最简单的、最经典就是JSP(view) +Servlet(controller) + JavaBean(model)

视图和逻辑隔离开来

当控制器收到来自用户的请求

控制器调用JavaBean完成业务

完成业务后通过控制器跳转JSP页面的方式给用户反馈信息

JSP个 用户做出响应。

控制器是核心

M(Model) 模型 JavaBean

V(View) 视图 html jsp Thymeleaf volicity freemaker

C(Control) 控制器 Servlet,Controller,Action

JavaBean:一种规范,表达实体和信息的规范,便于封装重用

1、所有属性为private

2、提供默认构造方法

3、提供getter和setter

4、实现serializable接口

三层架构

三层架构和MVC不同,三层架构只指后端的过程。

Controller任务: 从页面拿数据,交给service,再从service拿到数据,交给界面。

Lombok

POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。

使用Lombok可以简化操作,通过注解的方式就能代替get,set,构造参数等代码。

使用方法

pom.xml添加依赖

org.projectlombok

lombok

1.18.14

provided

实体类写注解

常见注解:

@Data//生成get,set,无参构造方法,哈希等等等等。

@Getter//生成get

@Setter//生成set

@NoArgsConstructor//无参

@AllArgsConstructor//带参(全参)

写入后,结构界面(idea左下角)可以看到,写入注解后项目已经有需要的方法。

数据库连接池

数据库连接池作用(线程池作用是一样的)

1、限定数据库的个数,不会导致由于数据库连接过多导致系统运行缓慢或崩溃

2、数据库连接不需要每次都去创建或销毁,节约了资源

3、数据库连接不需要每次都去创建,响应时间更快。

常见数据库连接池:

C3P0:数据库连接池技术

Druid:数据库连接池实现技术,由阿里巴巴提供的

使用方法:

pom.xml添加依赖

org.projectlombok

lombok

1.18.14

provided

更改JDBCUtil类

package com.situ.hotel.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Properties;

public class JDBCUtil {

// 1. 声明静态数据源成员变量

private static DataSource ds;

// 2. 创建连接池对象

static {

// 加载配置文件中的数据

InputStream inputStream = JDBCUtil.class.getClassLoader().getResourceAsStream("druid.properties");

Properties properties = new Properties();

try {

properties.load(inputStream);

// 创建连接池,使用配置文件中的参数

ds = DruidDataSourceFactory.createDataSource(properties);

} catch (IOException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

// 3. 定义公有的得到数据源的方法

public static DataSource getDataSource() {

return ds;

}

// 4. 定义得到连接对象的方法

public static Connection getConnection() throws SQLException {

return ds.getConnection();

}

// 5.定义关闭资源的方法

public static void close(Connection conn, Statement stmt, ResultSet rs) {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

}

}

if (stmt != null) {

try {

stmt.close();

} catch (SQLException e) {

}

}

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

}

}

}

// 6.重载关闭方法

public static void close(Connection conn, Statement stmt) {

close(conn, stmt, null);

}

}

利用配置文件配置数据库

在resources目录下新建druid.properties,内容如下:

driverClassName=com.mysql.cj.jdbc.Driver

url=jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=UTF-8

username=root

password=数据库密码

initialSize=5

maxActive=10

maxWait=3000

Spring JDBC

Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发

1、update():执行DML语句。增、删、改语句

2、query():查询结果,将结果封装为JavaBean对象

query的参数:RowMapper,一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装

new BeanPropertyRowMapper<类型>(类型.class)

3、queryForObject:查询结果,将结果封装为对象

一般用于聚合函数的查询

使用方法:

pom.xml添加依赖

org.springframework

spring-core

4.1.2.RELEASE

compile

org.springframework

spring-jdbc

4.1.2.RELEASE

compile

org.springframework

spring-tx

4.1.2.RELEASE

compile

org.springframework

spring-beans

4.1.2.RELEASE

compile

commons-logging

commons-logging

1.1.1

compile

更改dao层代码

import org.springframework.jdbc.core.BeanPropertyRowMapper;

import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

public class UserDaoImpl implements IUserDao {

private JdbcTemplate template =new JdbcTemplate(JDBCUtil.getDataSource());

@Override

public List selectAll() {

String sql = "select id,name,password,email,phone from user";

List list = template.query(sql, new BeanPropertyRowMapper(User.class));

return list;

}

@Override

public List selectByPage(Integer offset, Integer limit) {

String sql = "select id,name,password,email,phone from user limit ?,?";

List list = template.query(sql, new BeanPropertyRowMapper(User.class), offset, limit);

return list;

}

@Override

public Long selectTotalCount() {

String sql = "select count(*) from user";

Long totalCount = template.queryForObject(sql, Long.class);

return totalCount;

}

@Override

public Integer deleteById(Integer id) {

String sql = "delete from user where id=?";

int count = template.update(sql, id);

return count;

}

}

🎯 相关推荐

粉丝听了都觉得丢人,五月天新歌到底有多难听?
🎯 365bet手机在线注册

粉丝听了都觉得丢人,五月天新歌到底有多难听?

📅 06-29 👀 4647
客观讲一讲科泽浴缸半年使用我后悔买晚了?
🎯 365bet手机在线注册

客观讲一讲科泽浴缸半年使用我后悔买晚了?

📅 10-21 👀 6128

🎁 合作伙伴