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添加依赖
<!--Lombok简化POJO--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.14</version> <scope>provided</scope> </dependency>
- 实体类写注解
常见注解:
@Data//生成get,set,无参构造方法,哈希等等等等。 @Getter//生成get @Setter//生成set @NoArgsConstructor//无参 @AllArgsConstructor//带参(全参)
写入后,结构界面(idea左下角)可以看到,写入注解后项目已经有需要的方法。
数据库连接池
数据库连接池作用(线程池作用是一样的)
1、限定数据库的个数,不会导致由于数据库连接过多导致系统运行缓慢或崩溃
2、数据库连接不需要每次都去创建或销毁,节约了资源
3、数据库连接不需要每次都去创建,响应时间更快。
常见数据库连接池:
- C3P0:数据库连接池技术
- Druid:数据库连接池实现技术,由阿里巴巴提供的
使用方法:
- pom.xml添加依赖
<!--Lombok简化POJO--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.14</version> <scope>provided</scope> </dependency>
- 更改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添加依赖
<!--druid连接池--> <!--jdbcTemplate--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.2.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.2.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.1.2.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.1.2.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> <scope>compile</scope> </dependency>
- 更改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<User> selectAll() { String sql = "select id,name,password,email,phone from user"; List<User> list = template.query(sql, new BeanPropertyRowMapper<User>(User.class)); return list; } @Override public List<User> selectByPage(Integer offset, Integer limit) { String sql = "select id,name,password,email,phone from user limit ?,?"; List<User> list = template.query(sql, new BeanPropertyRowMapper<User>(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; } }
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/16988977.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2021-12-17 2021 ICPC Asia Taipei Regional(Gym - 103443A)补题