Druid连接池&Template组件&三级分层开发,模拟账号登陆
Posted 小黑格子屋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Druid连接池&Template组件&三级分层开发,模拟账号登陆相关的知识,希望对你有一定的参考价值。
本篇由学员投稿,大家一起学习一下哦~
首先说下每个连接池,步骤几乎一样;都是基于JDBC连接数据库的(1,注册;2,获取连接;3,创建statement对象;4,执行sql语句,返回结果集;5,释放资源)。
下面两种连接池比较:
使用c3p0连接池获取数据源DataSource,直接new ComboPooledDataSource( )创建DataSource 对象。
Druid连接池获取数据源DataSource,使用的数据工厂类创建。
声明:本人使用的JDK9,mysql8版本数据库,本次案例使用C3p0连接池和druid连接池分别开发(附上durid开发的代码);
第一步:
jar包;
配置文件,德鲁伊用到的druid.properties,和Template用到的jdbc.properties
第二步:
src下分层建包,目录如下;dao层,和数据库交互的层;
service层,处理业务逻辑层,需要从dao层获取从数据(dao层从数据库获取数据或者写入数据);
web层(ui层,doAdmain层);调service层的具体的业务逻辑,展现用户操作的;(和用户(ps;有些ui或者浏览器交互)交互,让用户操作的一层,展现给用户的部分逻辑)
分析案例:用户登录
封装工具类utils,创建和数据库table 对应的javabean (PS;使用框架开发使用的简单java类,也就是pojo,且分层也不一样,使用接口开发以及实体类,这里不过多说);
先要开发dao,依据用户提供的哪些信息来从MYSQL数据库中查找,并返回一些数据给dao层;若按照用户名和密码来判断登录的话,dao层定义个方法 public User findUserByNameAndPassword(String name,String password );
在数据库中查找并返回查找的数据(PS;该数据可能为null,可能为真是查找到的数据,总之把数据依据条件查找出来,等service层的具体的事务逻辑来调用该数据);
service层定义具体的业务逻辑,是登录还是注册,还是其他的业务逻辑,这里是登录(输入账号密码登录),定义一个 public User login(String name,String password);调用dao层中从数据库查找的数据,进行业务逻辑判断;
开发web层:调用service层的login( )方法,用户录入一些数据,进行把用户录入的数据封装成对象,作为参数传递,对login()的返回值进行判断。
附上druid&Template开发代码;配置文件附在最后。
uitls工具类,实体类javbean(PS;按照数据库表中column 列明对应创建,这里不附加)。
package com.company.utils;import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;import java.io.FileReader;import java.io.IOException;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Properties;/** * @auther SyntacticSugar * @data 2018/9/16 0016上午 9:29 */public class JdbcUtils { public static Connection conn = null; public static PreparedStatement statement = null; public static ResultSet resultSet = null; /**
* 获取DataSource
*/
public static DataSource getDataSource() {
DataSource source = null; try {
Properties p = new Properties();
p.load(new FileReader("config/druid.properties"));
source = DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
} return source;
} /**
* 获取连接
*
* @return
*/
public static Connection getConnection(DataSource source) { try {
conn = source.getConnection();
} catch (SQLException e) {
e.printStackTrace();
} return conn;
} /**
* 释放资源
*
* @param conn
* @param statement
* @param resultSet
*/
public static void release(Connection conn, PreparedStatement statement, ResultSet resultSet) { try { if (resultSet != null) {
resultSet.close();
} if (statement != null) {
statement.close();
} if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
} public static void release(Connection conn, PreparedStatement statement) { try { if (statement != null) {
statement.close();
} if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}//}
dao层:
package com.company.dao;import com.company.bean.User;import com.company.utils.JdbcUtils;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;import java.util.List;/** * @auther SyntacticSugar * @data 2018/9/16 0016上午 9:29 */public class UserDao { //和数据库连接 返回一个user
public List<User> findUserByNameAndPassword(String name,String password){ //
DataSource source = JdbcUtils.getDataSource(); //使用jdbcTemplate
JdbcTemplate template = new JdbcTemplate(source);
String sql= "select * from user where name=? and password=?;";
List<User> list = template.query(sql, new BeanPropertyRowMapper<User>(User.class), name, password); return list; //返回一个集合,list 可能为空,在dao层仅仅获取返回数据,不做逻辑判断
}
}
service层:
package com.company.service;import com.company.bean.User;import com.company.dao.UserDao;import java.util.List;/** * @auther SyntacticSugar * @data 2018/9/16 0016上午 9:29 */public class UserService { //业务逻辑层
public User login(String name, String password) { //调用dao层
UserDao userDao = new UserDao();
List<User> list = userDao.findUserByNameAndPassword(name, password);//有可能list为空;
User user = null;//获取到映射结果中的user
try {
user = list.get(0);
} catch (Exception e) { return null;
} return user;
}
}
web层;
package com.company.UserView;import com.company.bean.User;import com.company.service.UserService;import java.util.Scanner;/** * @auther SyntacticSugar * @data 2018/9/16 0016上午 9:30 */public class UserView { public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入name");
String name = sc.nextLine();
System.out.println("请输入password");
String password = sc.nextLine();
UserService userService = new UserService();
User login = userService.login(name, password);//来自键盘录入
if (login==null) {
System.out.println("登录失败");
}else {
System.out.println("登陆成功"+login.getName()+login.getId());
}
}
}
配置文件:
druid.properties如下:
driverClassName = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8&useSSL=falseusername = root
password = root
jdbc.properties如下:
driverClass = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=UTF-8&useSSL=falseusername = root
password = root
运行:
发生两条报错信息:
严重: testWhileIdle is true, validationQuery not set
信息: {dataSource-1} inited
插播一条通知
鉴于很多学员就业之后,在工作或者技术上会有一些自己的见解并且会转化成文字输出到自己的博客上,所以黑可以给大家开通一个投稿渠道。如果觉得自己写的博客文章还不错的话,可以联系我或者小黑助(qq:3419579374),我们会对文章进行审核,筛选后发布。文章的大致要求如下:文章上需有条理性,技术上有一定的见解!
还有一个小小的福利,如果你的文章在本号发布五篇及五篇以上,就可以获得一本传智书籍哦~
通知到此结束~
文章来源:
https://blog.csdn.net/weixin_42323802/article/details/82721377
一只黑
小黑是个好人,只推送有用的东西。
长按左侧二维码关注
微信ID:xhmsvip
小黑QQ:3251175005
小黑微博:小黑黑的格子屋
点个小心心再走嘛!
以上是关于Druid连接池&Template组件&三级分层开发,模拟账号登陆的主要内容,如果未能解决你的问题,请参考以下文章