01-三层架构之查询数据库数据

打印 上一主题 下一主题

主题 896|帖子 896|积分 2688

一、后台操作流程

1.创建数据库
  1. CREATE DATABASE wyy_music;
  2. USE wyy_music;
  3. DROP TABLE IF EXISTS `tb_music`;
  4. CREATE TABLE `tb_music` (
  5.   `music_id` INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, -- 歌曲ID
  6.   `music_name` VARCHAR(255) NOT NULL, -- 歌曲名称
  7.   `music_album_name` VARCHAR(255), -- 专辑名称
  8.   `music_album_picUrl` VARCHAR(255), -- 专辑图片路径
  9.   `music_mp3Url` VARCHAR(255), -- 歌曲播放路径
  10.   `music_artist_name` VARCHAR(255), -- 歌手名称
  11.   `sheet_id` INT(11) DEFAULT NULL -- 对应的歌单ID
  12. ) ENGINE=INNODB DEFAULT CHARSET=utf8;
  13. INSERT INTO tb_music VALUES ('1', '光年之外', '光年之外', 'https://imgessl.kugou.com/stdmusic/20161229/20161229233400375274.jpg', 'https://webfs.tx.kugou.com/202109061310/31fb3f36e2048b2172a70e327bbfc8e3/KGTX/CLTX001/f87095bff0de7c636c3a3b8aac702d76.mp3', 'G.E.M.邓紫棋','1');
  14. INSERT INTO tb_music VALUES ('2', '夜空中最亮的星', '世界', 'https://imgessl.kugou.com/stdmusic/20150719/20150719010047203836.jpg', 'https://webfs.ali.kugou.com/202109061306/1b30ae27a5749debd602507b3bf1fea6/G202/M04/1B/13/aocBAF55G0-ADd0HAD2Y88Efqbw072.mp3', '逃跑计划','1');
  15. INSERT INTO tb_music VALUES ('3', '只要平凡', '只要平凡', 'https://imgessl.kugou.com/stdmusic/20180622/20180622194005815458.jpg', 'https://webfs.ali.kugou.com/202109061309/edb2e89d90e66b9d125950dba107e9eb/KGTX/CLTX001/38aead7ed546b0736791ebb25c3a3951.mp3', '张杰/张碧晨','2');
复制代码
2.在IDEA中创建maven工程并导入依赖
  1. <dependencies>
  2.         <dependency>
  3.             <groupId>javax.servlet</groupId>
  4.             <artifactId>javax.servlet-api</artifactId>
  5.             <version>4.0.1</version>
  6.             <scope>provided</scope>
  7.         </dependency>
  8.         <dependency>
  9.             <groupId>mysql</groupId>
  10.             <artifactId>mysql-connector-java</artifactId>
  11.             <version>8.0.32</version>
  12.         </dependency>
  13.         <dependency>
  14.             <groupId>com.alibaba</groupId>
  15.             <artifactId>druid</artifactId>
  16.             <version>1.2.17</version>
  17.         </dependency>
  18.         <dependency>
  19.             <groupId>commons-dbutils</groupId>
  20.             <artifactId>commons-dbutils</artifactId>
  21.             <version>1.7</version>
  22.         </dependency>
  23.         <dependency>
  24.             <groupId>com.alibaba.fastjson2</groupId>
  25.             <artifactId>fastjson2</artifactId>
  26.             <version>2.0.20</version>
  27.         </dependency>
  28.         <dependency>
  29.             <groupId>org.projectlombok</groupId>
  30.             <artifactId>lombok</artifactId>
  31.             <version>1.18.26</version>
  32.         </dependency>
  33.     </dependencies>
复制代码
3.创建db.properties文件,配置数据库
  1. driverClassName=com.mysql.jdbc.Driver
  2. url=jdbc:mysql://localhost:3306/wyy_music
  3. username=root
  4. password=1234
复制代码
4.编写工具类
  1. package com.slj.util;
  2. import com.alibaba.druid.pool.DruidDataSource;
  3. import com.alibaba.druid.pool.DruidDataSourceFactory;
  4. import java.io.InputStream;
  5. import java.sql.*;
  6. import java.util.Objects;
  7. import java.util.Properties;
  8. public class JdbcUtil {
  9.     //声明一个DruidDataSource对象
  10.     private static DruidDataSource ds;
  11.     //声明一个ThreadLocal对象 本地线程对象,线程安全,不需要加锁,提高执行效率
  12.     private static final ThreadLocal<Connection> THREAD_LOCAL = new ThreadLocal<>();
  13.     //静态代码块,在类加载时只执行一次,我们可以在这里初始化数据源对象
  14.     //整个项目中只需要一个数据源对象就可以 数据源内部有个连接池对象,我们之后获取连接可以从连接池中获取
  15.     static {
  16.         try {
  17.             //读取database.properties属性文件获取到输入流对象
  18.             InputStream inputStream = JdbcUtil.class.getResourceAsStream("/db.properties");
  19.             //创建Properties对象
  20.             Properties properties = new Properties();
  21.             //属性文件中的内容就读取到properties中了
  22.             properties.load(inputStream);
  23.             //根据properties文件创建数据源
  24.             ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
  25.         } catch (Exception e) {
  26.             e.printStackTrace();
  27.         }
  28.     }
  29.     //获取连接的方法 getConnection
  30.     public static Connection getConnection() {
  31.         //从THREAD_LOCAL获取连接对象
  32.         Connection connection = THREAD_LOCAL.get();
  33.         if (Objects.isNull(connection)) {
  34.             try {
  35.                 connection = ds.getConnection();
  36.                 // 第一次获取到连接对象 connection 就放到THREAD_LOCAL,以后再取的时候里面就有值了
  37.                 THREAD_LOCAL.set(connection);
  38.             } catch (SQLException e) {
  39.                 e.printStackTrace();
  40.             }
  41.         }
  42.         return connection;
  43.     }
  44.     //关闭资源的方法
  45.     private static void close(Connection connection) {
  46.         if (Objects.nonNull(connection)) {
  47.             try {
  48.                 connection.close();
  49.                 //关闭连接后 把THREAD_LOCAL中的对象清除掉,一定不能忘记
  50.                 THREAD_LOCAL.remove();
  51.             } catch (SQLException e) {
  52.                 e.printStackTrace();
  53.             }
  54.         }
  55.     }
  56. }
复制代码
5.编写实体类
  1. package com.slj.entity;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. /**
  6. * 实体类
  7. * 有了lombok依赖,直接使用注解方式
  8. */
  9. @Data
  10. @NoArgsConstructor
  11. @AllArgsConstructor
  12. public class Music {
  13.     private Integer musicId;
  14.     private String musicName;
  15.     private String musicAlbumName;
  16.     private String musicAlbumPicurl;
  17.     private String musicMp3url;
  18.     private String musicArtistName;
  19.     private String sheetId;
  20. }
复制代码
6.编写持久层(dao层)
  1. package com.slj.dao;
  2. import com.slj.entity.Music;
  3. import java.util.List;
  4. public interface MusicDao {
  5.     /**
  6.      * 查询所有
  7.      *
  8.      * @return
  9.      */
  10.     List<Music> queryAll();
  11. }
复制代码
7.编写DaoImpl
  1. package com.slj.dao.impl;
  2. import com.slj.dao.MusicDao;
  3. import com.slj.entity.Music;
  4. import com.slj.util.JdbcUtil;
  5. import org.apache.commons.dbutils.QueryRunner;
  6. import org.apache.commons.dbutils.handlers.BeanListHandler;
  7. import java.sql.Connection;
  8. import java.sql.SQLException;
  9. import java.util.List;
  10. public class MusicDaoImpl implements MusicDao {
  11.     private QueryRunner queryRunner = new QueryRunner();
  12.     /**
  13.      * 查询所有信息
  14.      *
  15.      * @return
  16.      */
  17.     @Override
  18.     public List<Music> queryAll() {
  19.         //1.获取连接
  20.         Connection connection = JdbcUtil.getConnection();
  21.         //2.SQL语句
  22.         String sql = "select music_id as musicId,music_name as musicName," +
  23.                 "music_album_name as musicAlbumName,music_album_picUrl as musicAlbumPicurl," +
  24.                 "music_mp3Url as musicMp3url,music_artist_name as musicArtistName," +
  25.                 "sheet_id as sheetId from tb_music";
  26.         //3.调用方法
  27.         try {
  28.             return queryRunner.query(connection, sql, new BeanListHandler<>(Music.class));
  29.         } catch (SQLException e) {
  30.             throw new RuntimeException(e);
  31.         }
  32.     }
  33. }
复制代码
8.编写业务逻辑层(service层)
  1. package com.slj.service;
  2. import com.slj.entity.Music;
  3. import java.util.List;
  4. public interface MusicService {
  5.     /**
  6.      * 查询所有歌曲
  7.      *
  8.      * @return
  9.      */
  10.     List<Music> findAll();
  11. }
复制代码
9.编写ServiceImpl
  1. package com.slj.service.impl;
  2. import com.slj.dao.MusicDao;
  3. import com.slj.dao.impl.MusicDaoImpl;
  4. import com.slj.entity.Music;
  5. import com.slj.service.MusicService;
  6. import java.util.List;
  7. public class MusicServiceImpl implements MusicService {
  8.     private MusicDao musicDao = new MusicDaoImpl();
  9.     //调用dao层方法
  10.     public List<Music> findAll() {
  11.         return musicDao.queryAll();
  12.     }
  13. }
复制代码
10.编写页面层(Controller层)
  1. package com.slj.controller;
  2. import com.alibaba.fastjson2.JSON;
  3. import com.slj.entity.Music;
  4. import com.slj.service.MusicService;
  5. import com.slj.service.impl.MusicServiceImpl;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import java.io.IOException;
  12. import java.util.List;
  13. @WebServlet("/findAllController.do")
  14. public class FindAllController extends HttpServlet {
  15.     @Override
  16.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  17.         //调用service层处理核心业务逻辑
  18.         MusicService musicService = new MusicServiceImpl();
  19.         List<Music> all = musicService.findAll();
  20.         //将Java数据转换成Json数据
  21.         String jsonString = JSON.toJSONString(all);
  22.         //返回给前端
  23.         response.getWriter().write(jsonString);
  24.     }
  25.     @Override
  26.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  27.         this.doGet(request, response);
  28.     }
  29. }
复制代码
11.编写过滤器(处理请求响应字符乱码问题)
  1. package com.slj.filter;
  2. import javax.servlet.*;
  3. import javax.servlet.annotation.WebFilter;
  4. import java.io.IOException;
  5. @WebFilter(urlPatterns = "*.do")
  6. public class EncodingFilter implements Filter {
  7.     @Override
  8.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  9.         /**
  10.          * 设置编码
  11.          */
  12.         request.setCharacterEncoding("utf-8");
  13.         response.setCharacterEncoding("utf-8");
  14.         response.setContentType("text/html;charset=utf-8");
  15.         chain.doFilter(request, response);
  16.     }
  17.     @Override
  18.     public void init(FilterConfig filterConfig) throws ServletException {
  19.         System.out.println("init.......");
  20.     }
  21.     @Override
  22.     public void destroy() {
  23.         System.out.println("destroy.......");
  24.     }
  25. }
复制代码
12.查询结果(tomcat服务器)


 二、介绍一个电脑自带浏览器的插件(可以进行测试哦)


 

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表