一个web项目结构如下图:
实体类(简单的类)----com.moon.pojo
数据访问对象(Data access object)-----com.moon.dao
控制器(servlet业务):请求,转发,重定向------com.moon.controller
工具类:MD5加密,邮件处理,短信处理,验证码,数据库访问工具类------com.moon.util数据
项目的流程:
一、modules
1、java文件---->.class文件
2、包含所有的资源文件(css,html,js,图片)
二、加载到artifacts
- WEB-INF
- classes:package下面的class文件和一些资源(db.properties)
- Lib:驱动包(mysql)
三、Tomcat服务器会加载和运行第二步传递过来的文件
数据库的url地址:
- 5.5版本:jdbc:mysql://localhost:3306
- 8.0版本:jdbc:mysql://localhost:3306?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
创建配置文件:
我一般把数据库配置文件**放在resources目录下**,方便项目读取到配置文件
在resources目录下新建**
db-config.properties
**propties文件内容如下:
driverClassName=com.mysql.cj.jdbc.Driver user=root password=19981104 url=jdbc:mysql://localhost:3306/cloudMusic?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTCurl连接到之前创建好的cloudmusic数据库
在maven的配置文件pom.xml中,添加数据库驱动依赖
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency>注意:如果maven下载不下来,也**可以手动导入数据库驱动包**
书写数据库连接工具类
/** * @author 晓龙 * @version 1.8.271 * @ProtectName cloudMusic_v1 * @ClassName JdbcConnection * @Description 初始化数据库连接,获得数据库连接对象 * @createTime 2021年05月03日 12:41:00 */ public class JdbcConnection { /** * 数据源配置 */ private String driverClassName = null; private String user = null; private String password = null; private String url = null; /** * 单例模式 */ private JdbcConnection() { } private static volatile JdbcConnection jc = null; /** * 公开方法:获得数据库连接 * * @return 返回连接对象 * @throws SQLException */ public synchronized static Connection getConnection() throws SQLException { if (jc == null) { jc = new JdbcConnection(); } return jc.connection(); } /** * 公开方法:关闭数据库 * * @param con 数据库连接对象 * @param state 数据库操作对象 * @param res 数据库结果集 */ public static void close(Connection con, PreparedStatement state, ResultSet res) { try { if (con != null) { con.close(); } } catch (SQLException throwables) { throwables.printStackTrace(); } finally { try { if (state != null) { state.close(); } } catch (SQLException throwables) { throwables.printStackTrace(); } finally { try { if (res != null) { res.close(); } } catch (SQLException throwables) { throwables.printStackTrace(); } } } } /** * 初始化连接 * * @return * @throws SQLException */ private Connection connection() throws SQLException { // 初始化数据库驱动 initJdbcDriver(); return DriverManager.getConnection(url, user, password); } /** * 初始化数据库驱动 */ private void initJdbcDriver() { // 获得配置文件 InputStream config = JdbcConnection.class.getClassLoader() .getResourceAsStream("xFrameConfig.properties"); // 读取文件 initJdbcConfig(config, new Properties()); try { // 加载驱动 Class.forName(driverClassName); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 读取配置文件 * * @param config 配置文件 * @param prop Properties对象 */ private void initJdbcConfig(InputStream config, Properties prop) { try { // 加载配置文件 prop.load(config); // 读取配置文件并赋值 driverClassName = prop.getProperty("driverClassName"); user = prop.getProperty("user"); password = prop.getProperty("password"); url = prop.getProperty("url"); } catch (IOException e) { e.printStackTrace(); } } }
数据库操作工具
/** * @author 晓龙 * @version 1.8.271 * @ProtectName cloudMusic_v1 * @ClassName JdbcUtil * @Description 数据库工具类,通过JdbcConnection获取连接, * 对外只放出结果集对象, * 封装数据库连接对象和数据库操作对象 * @createTime 2021年05月03日 12:53:00 */ public class JdbcUtil { /** * 操作对象,SQL和连接对象 */ private static String SQL = null; private static Connection con = null; private static PreparedStatement state = null; private JdbcUtil() { } /** * 公开方法:设置sql */ public static void SQL(String sql) { SQL = sql; // 获得操作对象 getState(); } private static void getState() { try { // 获得操作对象 con = JdbcConnection.getConnection(); state = con.prepareStatement(SQL); } catch (SQLException throwables) { throwables.printStackTrace(); } } /** * 公开方法:提交查询,返回结果集 */ public static ResultSet query(Object... el) throws SQLException { if (state != null) { // 遍历传参,进行赋值 for (int i = 0; i < el.length; i++) { state.setObject(i + 1, el[i]); } // 提交返回结果 return state.executeQuery(); } return null; } /** * 公开方法:提交修改,返回boolean */ public static boolean update(Object... el) throws SQLException { if (state != null) { // 遍历传参,进行赋值 for (int i = 0; i < el.length; i++) { state.setObject(i + 1, el[i]); } // 如果成功,返回true if (state.executeUpdate() > 0) { return true; } } return false; } /** * 公开方法:关闭连接 */ public static void close(ResultSet res) { // 只对外部放出了ResultSet,所以内部关闭连接对象和操作对象 JdbcConnection.close(con, state, res); } }