项目知识点记录

1.使用druid连接池 

使用properties配置文件:

driverClassName= com.mysql.cj.jdbc.Driver
url= jdbc:mysql://localhost:3306/book?useSSL=true&setUnicode=true&charsetEncoding=UTF-8&serverTimezone=GMT%2B8
username= root
password= 123456
#初始化链接数量
initialSize=5
#最大链接数
maxActive=10
#最大等待时间
maxWait=3000

工具类:

package com.util;import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;public class JDBCUtils {//定义成员变量private static DataSource ds = null;//定义静态代码块static {try {//加载配置文件Properties pro = new Properties();pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));//获取DataSourceds = DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}//获取链接public static Connection getConnection() throws SQLException{return ds.getConnection();}//释放资源public static void close(Statement stmt,Connection conn){if (stmt != null){try {stmt.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}}}public static void close(ResultSet rs,Statement stmt,Connection conn){if (rs != null){try {rs.close();} catch (SQLException throwables) {throwables.printStackTrace();}}close(stmt,conn);}//获取链接池方法public static  DataSource getDataSource(){return ds;}
}

Dao接口: 

 dao实现类:

查询:

 //定义sqlString sql = "select * from user where username = ? and password = ?";
//执行sqlUser user1 = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), user.getUsername(), user.getPassword());

 增加:

 //定义sql
String sql ="insert into user values(null,?,?)";
//执行sql
int update = template.update(sql, user.getUsername(), user.getPassword());

删除:

 //定义sqlString sql = "delete from shopping where id = ?";//执行sqlint update = template.update(sql, id);

修改:

//定义sqlString sql ="update books set img = ? , name = ? , price = ? , classly = ? , detail = ? where id = ?";//执行sqlint update = template.update(sql, books.getImg(), books.getName(), books.getPrice(), books.getClassly(), books.getDetail(), books.getId());

package com.dao;import com.domain.Admin;
import com.domain.Books;
import com.domain.Shopping;
import com.domain.User;
import com.util.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.concurrent.TimeoutException;public class DaoImpl implements Dao {//使用JdbcTemplateprivate JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());//用户登录@Overridepublic User login(User user) {try {//定义sqlString sql = "select * from user where username = ? and password = ?";//执行sqlUser user1 = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), user.getUsername(), user.getPassword());//返回结果return user1;} catch (DataAccessException e) {e.printStackTrace();return null;}}//用户注册@Overridepublic int addUser(User user) {try {//定义sqlString sql ="insert into user values(null,?,?)";//执行sqlint update = template.update(sql, user.getUsername(), user.getPassword());return update;} catch (DataAccessException e) {e.printStackTrace();return 0;}}//遍历图书@Overridepublic List<Books> selectBooks(String classly) {//定义sqlString sql = "select * from books where classly = ?";//执行sqlList<Books> query = template.query(sql, new RowMapper<Books>() {@Overridepublic Books mapRow(ResultSet resultSet, int i) throws SQLException {Books b = new Books();b.setImg(resultSet.getString("img"));b.setName(resultSet.getString("name"));b.setPrice(resultSet.getInt("price"));b.setDetail(resultSet.getString("detail"));return b;}}, classly);return query;}//添加图书@Overridepublic int addBook(Books books) {try {//定义sqlString sql = "insert into books values(null,?,?,?,?,?)";//执行sqlint update = template.update(sql, books.getImg(),books.getName(), books.getPrice(),books.getClassly(), books.getDetail());//返回值return update;} catch (DataAccessException e) {e.printStackTrace();return 0;}}//查询图书详情@Overridepublic Books selectDetail(String name) {//定义sqlString sql ="select * from books where name = ?";//执行sqlBooks query = template.queryForObject(sql, new BeanPropertyRowMapper<Books>(Books.class), name);//返回return query;}//加入购物车@Overridepublic int addShopping(Shopping shopping) {try {//定义sqlString sql = "insert into shopping values(null,?,?,?,?,?)";int update = template.update(sql,shopping.getImg(), shopping.getUsername(), shopping.getName(), shopping.getNumber(), shopping.getPrice());//返回值return update;} catch (DataAccessException e) {e.printStackTrace();return 0;}}//遍历购物车@Overridepublic List<Shopping> selectShopping(String username) {//定义sqlString sql = "select * from shopping where username = ?";List<Shopping> query = template.query(sql, new RowMapper<Shopping>() {@Overridepublic Shopping mapRow(ResultSet resultSet, int i) throws SQLException {Shopping shopping = new Shopping();shopping.setId(resultSet.getInt("id"));shopping.setImg(resultSet.getString("img"));shopping.setName(resultSet.getString("name"));shopping.setNumber(resultSet.getInt("number"));shopping.setPrice(resultSet.getInt("price"));return shopping;}}, username);return query;}//删除购物车@Overridepublic int deleteShopping(int id) {//定义sqlString sql = "delete from shopping where id = ?";//执行sqlint update = template.update(sql, id);//返回执行结果return update;}//清空购物车@Overridepublic int deleteS(String username) {//定义sqlString sql = "delete from shopping where username = ?";//执行sqlint update = template.update(sql, username);//返回执行结果return update;}//管理员登录@Overridepublic Admin admin(Admin admin) {try {//定义sqlString sql = "select * from admin where username = ? and password = ?";//执行sqlAdmin admin1 = template.queryForObject(sql, new BeanPropertyRowMapper<Admin>(Admin.class), admin.getUsername(), admin.getPassword());return admin1;} catch (DataAccessException e) {e.printStackTrace();return null;}}//遍历图书@Overridepublic List<Books> BOOKS_LIST() {//定义sqlString sql ="select * from books";//执行sqlList<Books> query = template.query(sql, new RowMapper<Books>() {@Overridepublic Books mapRow(ResultSet resultSet, int i) throws SQLException {Books b = new Books();b.setId(resultSet.getInt("id"));b.setImg(resultSet.getString("img"));b.setName(resultSet.getString("name"));b.setPrice(resultSet.getInt("price"));b.setClassly(resultSet.getString("classly"));b.setDetail(resultSet.getString("detail"));return b;}});return query;}//删除图书@Overridepublic int deleteBooks(String name) {//定义sqlString sql = "delete from books where name = ?";//执行sqlint update = template.update(sql, name);//返回return update;}//修改图书@Overridepublic int modifyBook(Books books) {//定义sqlString sql ="update books set img = ? , name = ? , price = ? , classly = ? , detail = ? where id = ?";//执行sqlint update = template.update(sql, books.getImg(), books.getName(), books.getPrice(), books.getClassly(), books.getDetail(), books.getId());//返回return update;}//遍历用户@Overridepublic List<User> selectUser() {//定义sqlString sql ="select * from user";//执行sqlList<User> query = template.query(sql, new RowMapper<User>() {@Overridepublic User mapRow(ResultSet resultSet, int i) throws SQLException {User u = new User();u.setId(resultSet.getInt("id"));u.setUsername(resultSet.getString("username"));u.setPassword(resultSet.getString("password"));return u;}});return query;}//修改用户@Overridepublic int modifyUser(User user) {//定义sqlString sql = "update user set username = ? , password = ? where id = ?";//执行sqlint update = template.update(sql, user.getUsername(), user.getPassword(), user.getId());//返回return update;}@Overridepublic int deleteUser(int id) {//定义sqlString sql ="delete from user where id =?";//执行sqlint update = template.update(sql, id);return update;}
}

登录Servlet控制器:

package com.demo;import com.dao.Dao;
import com.dao.DaoImpl;
import com.domain.User;
import org.apache.commons.beanutils.BeanUtils;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置编码格式request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//获取数据Map<String, String[]> map = request.getParameterMap();//封装数据User user = new User();try {BeanUtils.populate(user,map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//调用daoDao dao = new DaoImpl();User login = dao.login(user);if (login != null){HttpSession session = request.getSession();session.setAttribute("username",user.getUsername());response.sendRedirect(request.getContextPath()+"/indexServlet?classly=1");}else {request.setAttribute("user","账号或密码错误");request.getRequestDispatcher("login.jsp").forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

简单的过滤器实现:判断用户是否登录,登录就放行

package com.listener;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;/*** 登录验证的过滤器*/
@WebFilter("/*")
public class LoginFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {//强制转换HttpServletRequest request = (HttpServletRequest) req;//1.获取资源请求路径String uri = request.getRequestURI();//2.判断是否包含登录相关资源路径,要注意排除掉css/图片/js等资源if (uri.contains("/login.jsp") || uri.contains("/loginServlet")||uri.contains("/login2.jsp")||uri.contains("/login2Servlet") ||uri.contains("/css/") || uri.contains("/img/") ||uri.contains("adlogin.jsp") || uri.contains("/adLoginServlet")){//包含,用户就是想登录,放行chain.doFilter(req, resp);}else {//不包含,需要验证用户是否登录//3.从获取session中获取usernameObject username = request.getSession().getAttribute("username");if (username != null){//登录了,放行chain.doFilter(req,resp);}else {//没有登录,跳转登录页面request.setAttribute("user","您尚未登录,请登录");request.getRequestDispatcher("/login.jsp").forward(request,resp);}}//chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {}}

(2)项目Spring中用的aop事务的写法

 <!--加载事务管理器--><bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!--加载数据源连接池--><property name="dataSource" ref="druidDataSource"/></bean><!--配置事务增强通知--><!--transaction-manager加载指定的事务管理器--><tx:advice id="txAdvice" transaction-manager="transactionManager"><!--事务规则列表--><tx:attributes><!--propagation定义动作的规则--><!--REQUIRED阻断操作--><!--NOT_SUPPORTED非阻断操作--><!--对新增数据操作的规则定义--><tx:method name="insert*" propagation="REQUIRED"/><tx:method name="add*" propagation="REQUIRED"/><!--对修改数据操作的规则定义--><tx:method name="update*" propagation="REQUIRED"/><tx:method name="edit*" propagation="REQUIRED"/><!--对删除数据操作的规则定义--><tx:method name="delete*" propagation="REQUIRED"/><!--对查询数据操作的规则定义--><tx:method name="get*" propagation="NOT_SUPPORTED"/><tx:method name="select*" propagation="NOT_SUPPORTED"/><tx:method name="query*" propagation="NOT_SUPPORTED"/></tx:attributes></tx:advice><!--托管通知工具类--><bean name="advice" class="com.example.meal_ordering_system.util.AdviceUtil"/><!--切面的配置--><aop:config><!--切面定义在Service层--><aop:pointcut id="pointCut" expression="execution(* com.example.meal_ordering_system.service..*(..))"/><!--将事务增强通知与切面进行绑定--><aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/><!--切面织入--><aop:aspect ref="advice"><aop:before method="before" pointcut-ref="pointCut"/><aop:after method="after" pointcut-ref="pointCut"/><aop:around method="around" pointcut-ref="pointCut"/><aop:after-throwing method="exception" pointcut-ref="pointCut"/></aop:aspect></aop:config>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/89914.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Syncfusion Essential Edit for WPF Crack

Syncfusion Essential Edit for WPF Crack 在任何WPF应用程序中启用语法高亮显示。 Syncfusion Essential Edit for WPF是一款具有所有基本功能的编辑器&#xff0c;如文本编辑、剪切、复制和粘贴。它允许用户从各种文件格式打开文件并将其保存为各种文件格式。Syncfusion Esse…

Streamlit项目: 轻松搭建部署个人博客网站

文章目录 1 前言1.1 探索 Streamlit&#xff1a;轻松创建交互式应用1.2 最全 Streamlit 教程专栏 2 我的个人博客网站已上线&#xff01;2.1 一个集成了智能中医舌诊-中e诊专栏的博客网站2.2 前期准备2.3 使用 Streamlit Cloud 运行 3 知识点讲解3.1 实现多页面&#xff1a;两种…

黑马项目一阶段面试 项目介绍篇

我完成了一个外卖项目&#xff0c;名叫苍穹外卖&#xff0c;是跟着黑马程序员的课程来自己动手写的。 项目基本实现了外卖客户端、商家端的后端完整业务。 商家端分为员工管理、文件上传、菜品管理、分类管理、套餐管理、店铺营业状态、订单下单派送等的管理、数据统计等&…

chatGPT应用于房地产行业

作为 2023 年的房地产专业人士&#xff0c;您无疑认识到技术对行业的重大影响。近年来&#xff0c;一项技术进步席卷了世界——人工智能。人工智能彻底改变了房地产业务的各个方面&#xff0c;从简化管理任务到增强客户互动。 在本文中&#xff0c;我们将探讨几种巧妙的人工智…

命令提示符之操作基础(Windows)

打开命令提示符 方法一 打开指定文件的文件夹&#xff0c;在路径栏里输入“cmd”&#xff0c;回车&#xff0c;就进入控制台了。默认路径就是指定文件夹的路径。 方法二 打开指定的文件夹&#xff0c;按住shift键&#xff0c;在空白处右击&#xff0c;在菜单栏中选择“在此处打…

力扣 322. 零钱兑换

题目来源&#xff1a;https://leetcode.cn/problems/coin-change/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a;题目中说每种硬币的数量是无限的&#xff0c;可以看出是典型的完全背包问题。动规五部曲分析如下&#xff1a; 确定dp数组以及下标的含义…

Synopsys EDA数字设计与仿真

参考如下文章安装Synopsys EDA开发工具 https://blog.csdn.net/tugouxp/article/details/132255002?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132255002%22%2C%22source%22%3A%22tugouxp%22%7D Synopsys EDA工具的结构 下…

面试总结-webpack/git

说说你对webpack的理解 webpack 是一个静态模块打包器&#xff0c;整个打包过程就像是一条生产线&#xff0c;把资源从入口放进去&#xff0c;经过一系列的加工&#xff08;loader&#xff09;&#xff0c;最终转换成我们想要的结果&#xff0c;整个加工过程还会有监控&#x…

接口测试和功能测试的区别

接口测试和功能测试的区别&#xff1a; 2023最新Jmeter接口测试从入门到精通&#xff08;全套项目实战教程&#xff09; 本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者…

利用SimpleDateFormat或者LocalDateTime生成格式为“yyyy-MM-dd HH:mm:ss“的当前时间

java程序&#xff1a; // 利用LocalDateTime生成格式为"yyyy-MM-dd HH:mm:ss"的当前时间 DateTimeFormatter formatter DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime now LocalDateTime.now(); String time1 now.format(format…

(7)(7.4) 集结航点

文章目录 7.4.1 概述 7.4.2 设置集结航点 7.4.3 飞行示例 7.4.4 附录 7.4.1 概述 通常情况下&#xff0c;当固定翼或旋翼飞机进入"返回发射"(Return to Launch (RTL))模式&#xff08;通常由自动驾驶仪失控保护触发&#xff09;(failsafe)时&#xff0c;默认行为…

Spring Task入门案例

Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 定位&#xff1a;定时任务框架 作用&#xff1a;定时自动执行某段Java代码 强调&#xff1a;只要是需要定时处理的场景都可以使用Spring Task 1. cron表达式 cron表达式…

spring之AOP简单介绍

1.AOP的概念 AOP&#xff0c;Aspect Oriented Programming&#xff0c;面向切面编程&#xff0c;是对面向对象编程OOP的升华。OOP是纵向对一个 事物的抽象&#xff0c;一个对象包括静态的属性信息&#xff0c;包括动态的方法信息等。而AOP是横向的对不同事物的抽象&#xff0c;…

设计模式(5)代理模式

一、介绍&#xff1a; 【Subject/抽象角色】定义了RealSubject和Proxy的共用接口&#xff0c;这样就可以在任何使用RealSubject的地方都可以使用Proxy 【RealSubject/真实角色】定义Proxy所代表的真实实体 【Proxy/代理角色】保存一个引用使得代理可以访问实体&#xff0c;并…

【Linux】多线程——线程引入 | 线程控制

文章目录 一、Linux多线程1. 线程概念2. 线程创建3. 线程和进程4. 线程的优缺点 二、线程控制1. 线程创建2. 线程终止3. 线程等待4. 线程分离5. 线程局部存储 三、线程封装 一、Linux多线程 一级页表和二级页表都是key/val模型&#xff0c;一级页表的key是第一份的10个比特位&a…

css的transform样式计算-第一节

本文作者为 360 奇舞团前端开发工程师 引言 在使用 css 样式进行样式的缩放、旋转等设置时&#xff0c;思考了一下它的较浅层的原理&#xff0c;恩&#xff0c;这个阶段都 是一些初高的数学计算&#xff0c;从新看这里的时候顺便捡了捡初高中的数学&#xff0c;比如三角函数之类…

利用 Splashtop Enterprise 改善公司的网络安全

在我们日益数字化的世界中&#xff0c;对强有力的网络安全措施的需求从未像现在这样迫切。随着组织扩大其数字足迹并采用远程办公解决方案&#xff0c;他们面临着一系列不断变化的挑战。 威胁行为者不断寻找利用漏洞的新方法&#xff0c;这使得企业保持领先地位至关重要。俗话…

htmlCSS-----弹性布局

目录 前言 什么是弹性布局 样式 学习概要 容器和项目 弹性布局的排列方式 1.横向排列&#xff08;默认样式&#xff09; 2.父元素容器的属性&#xff08;*5&#xff09; &#xff08;1&#xff09;主轴 代码示例&#xff1a; &#xff08;2&#xff09;交叉轴 3.子元素…

Stable Diffusion WebUI安装和使用教程(Windows)

目录 下载Stable Diffusion WebUI运行安装程序&#xff0c;双击webui.bat界面启动插件安装&#xff08;github&#xff09;模型下载(有些需要魔法&#xff09;安装过程遇到的大坑总结参考的博客 整个过程坑巨多&#xff0c;我花了一个晚上的时间才全部搞定,本教程针对有编程基础…

分布式系统监控zabbix安装部署及使用

分布式系统监控zabbix安装部署及使用 一.zabbix监控 1.什么是zabbix zabbix&#xff1a;是一款开源免费的&#xff0c;自动化发现服务与网络设备的分布式监控&#xff0c;可以监视应用层服务并以web前端页面集中管理并展示。 2.zabbix功能 监控服务器cpu负载、服务器内存使…