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

这篇具有很好参考价值的文章主要介绍了01-三层架构之查询数据库数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、后台操作流程

1.创建数据库

CREATE DATABASE wyy_music;

USE wyy_music;

DROP TABLE IF EXISTS `tb_music`;
CREATE TABLE `tb_music` (
  `music_id` INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, -- 歌曲ID
  `music_name` VARCHAR(255) NOT NULL, -- 歌曲名称
  `music_album_name` VARCHAR(255), -- 专辑名称
  `music_album_picUrl` VARCHAR(255), -- 专辑图片路径
  `music_mp3Url` VARCHAR(255), -- 歌曲播放路径
  `music_artist_name` VARCHAR(255), -- 歌手名称
  `sheet_id` INT(11) DEFAULT NULL -- 对应的歌单ID
) ENGINE=INNODB DEFAULT CHARSET=utf8;

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');
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');
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工程并导入依赖

<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.7</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.20</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
        </dependency>
    </dependencies>

3.创建db.properties文件,配置数据库

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/wyy_music
username=root
password=1234

4.编写工具类

package com.slj.util;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import java.io.InputStream;
import java.sql.*;
import java.util.Objects;
import java.util.Properties;


public class JdbcUtil {

    //声明一个DruidDataSource对象
    private static DruidDataSource ds;
    //声明一个ThreadLocal对象 本地线程对象,线程安全,不需要加锁,提高执行效率
    private static final ThreadLocal<Connection> THREAD_LOCAL = new ThreadLocal<>();

    //静态代码块,在类加载时只执行一次,我们可以在这里初始化数据源对象
    //整个项目中只需要一个数据源对象就可以 数据源内部有个连接池对象,我们之后获取连接可以从连接池中获取
    static {
        try {
            //读取database.properties属性文件获取到输入流对象
            InputStream inputStream = JdbcUtil.class.getResourceAsStream("/db.properties");
            //创建Properties对象
            Properties properties = new Properties();
            //属性文件中的内容就读取到properties中了
            properties.load(inputStream);
            //根据properties文件创建数据源
            ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    //获取连接的方法 getConnection
    public static Connection getConnection() {
        //从THREAD_LOCAL获取连接对象
        Connection connection = THREAD_LOCAL.get();
        if (Objects.isNull(connection)) {
            try {
                connection = ds.getConnection();
                // 第一次获取到连接对象 connection 就放到THREAD_LOCAL,以后再取的时候里面就有值了
                THREAD_LOCAL.set(connection);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return connection;
    }

    //关闭资源的方法
    private static void close(Connection connection) {
        if (Objects.nonNull(connection)) {
            try {
                connection.close();
                //关闭连接后 把THREAD_LOCAL中的对象清除掉,一定不能忘记
                THREAD_LOCAL.remove();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

5.编写实体类

package com.slj.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 实体类
 * 有了lombok依赖,直接使用注解方式
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Music {
    private Integer musicId;
    private String musicName;
    private String musicAlbumName;
    private String musicAlbumPicurl;
    private String musicMp3url;
    private String musicArtistName;
    private String sheetId;
}

6.编写持久层(dao层)

package com.slj.dao;

import com.slj.entity.Music;

import java.util.List;

public interface MusicDao {
    /**
     * 查询所有
     *
     * @return
     */
    List<Music> queryAll();
}

7.编写DaoImpl

package com.slj.dao.impl;

import com.slj.dao.MusicDao;
import com.slj.entity.Music;
import com.slj.util.JdbcUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public class MusicDaoImpl implements MusicDao {
    private QueryRunner queryRunner = new QueryRunner();

    /**
     * 查询所有信息
     *
     * @return
     */
    @Override
    public List<Music> queryAll() {
        //1.获取连接
        Connection connection = JdbcUtil.getConnection();

        //2.SQL语句
        String sql = "select music_id as musicId,music_name as musicName," +
                "music_album_name as musicAlbumName,music_album_picUrl as musicAlbumPicurl," +
                "music_mp3Url as musicMp3url,music_artist_name as musicArtistName," +
                "sheet_id as sheetId from tb_music";

        //3.调用方法
        try {
            return queryRunner.query(connection, sql, new BeanListHandler<>(Music.class));
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

8.编写业务逻辑层(service层)

package com.slj.service;

import com.slj.entity.Music;

import java.util.List;

public interface MusicService {
    /**
     * 查询所有歌曲
     *
     * @return
     */
    List<Music> findAll();
}

9.编写ServiceImpl

package com.slj.service.impl;

import com.slj.dao.MusicDao;
import com.slj.dao.impl.MusicDaoImpl;
import com.slj.entity.Music;
import com.slj.service.MusicService;

import java.util.List;

public class MusicServiceImpl implements MusicService {
    private MusicDao musicDao = new MusicDaoImpl();

    //调用dao层方法
    public List<Music> findAll() {
        return musicDao.queryAll();
    }
}

10.编写页面层(Controller层)

package com.slj.controller;

import com.alibaba.fastjson2.JSON;
import com.slj.entity.Music;
import com.slj.service.MusicService;
import com.slj.service.impl.MusicServiceImpl;

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 java.io.IOException;
import java.util.List;

@WebServlet("/findAllController.do")
public class FindAllController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //调用service层处理核心业务逻辑
        MusicService musicService = new MusicServiceImpl();
        List<Music> all = musicService.findAll();

        //将Java数据转换成Json数据
        String jsonString = JSON.toJSONString(all);
        //返回给前端
        response.getWriter().write(jsonString);

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

11.编写过滤器(处理请求响应字符乱码问题)

package com.slj.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter(urlPatterns = "*.do")
public class EncodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        /**
         * 设置编码
         */

        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init.......");
    }

    @Override
    public void destroy() {
        System.out.println("destroy.......");
    }
}

12.查询结果(tomcat服务器)

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

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

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

 文章来源地址https://www.toymoban.com/news/detail-436291.html

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

 

到了这里,关于01-三层架构之查询数据库数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库实验一:基本表操作、基本数据查询和复杂数据查询

    按下图创建四个表:teacher、student、course和SC,为属性选择合适的域、合适的主码和外键约束,并为他们插入所列出数据; 中文语义 teacher (TID,TNAME,DEPT,SALARY) 教师(教工号,姓名,系,薪水) student (SID,SNAME,DEPT,AGE,GENDER) 学生(学号,姓名,系,年龄,性别) course (CID,CNAME,DE

    2024年02月01日
    浏览(61)
  • SQL数据库的查询操作大全(select)

    1、数据库的连接、创建 2、对字段的操作:(alter table) 3、对数据的操作(插入、修改、删除) 4、数据查询(select) 5、多表查询(join on) 6、约束操作 四、数据库查询大全(select) 1、select 字段名 from 表; 2、In查询:用于 过滤 你所需要查询的内容                

    2023年04月08日
    浏览(71)
  • 数据库系统原理及MySQL应用教程实验四MySQL数据库表数据的查询操作

    1.掌握SELECT 语句的基本语法格式。 2.掌握SELECT 语句的执行方法。 3.掌握SELECT 语句的 GROUP BY 和 ORDER BY 子句的作用。 验证性实验:在公司的部门员工管理数据库的bumen表和yuangong表上进行信息查询。 设计性试验:将在student表和score表上进行查询。 ( 一 ) 验证性实验 在

    2024年02月05日
    浏览(54)
  • MYSQL数据库基本操作-DQL-基本查询

    一.概念 数据库管理系统一个重要功能就是数据查询。数据查询不应是简单返回数据库中存储的数据,还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示。 MySQL提供了功能强大,灵活的语句来实现这些操作。 MySQL数据库使用select语句来查询数据。 二:语法  

    2024年01月25日
    浏览(62)
  • .NET 数据库大数据操作方案(插入、更新、删除、查询 、插入或更新)

    海量数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现 当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API 操作数据库达到极限性能,当然你如果不用sqlsugar了解一下原理也可以使用其他ORM实现   BulkCopy是一种用于高效批量插入大量数据

    2024年02月08日
    浏览(44)
  • MyBatis 查询数据库之二(增、删、改、查操作)

    目录 1. 配置打印 MyBatis 执行的SQL 2. 查询操作 2.1 通过用户 ID 查询用户信息、查询所有用户信息 (1) Mapper 接口 (2)UserMapper.xml 查询所有用户的具体实现 SQL (3)进行单元测试 3. 增加操作 3.1 在 mapper(interface)里面添加增加方法的声明 3.2 在 XMl 中添加 标签和增加的 sql 代码 3.3 生成

    2024年02月14日
    浏览(45)
  • QT实现连接MySQL数据库以及查询等操作

    功能包含数据库的增删改查和界面的显示,因为没有用.ui文件所以控件的位置都是手动设置的,写的有点费劲 首先打开Navicat,新建一个名字为bak_db的数据库,然后新建查询导入下面的sql语句: 然后刷新显示表已经创建好了,接下来就开始进行操作了: 文件结构 源码在我的

    2024年02月04日
    浏览(63)
  • Django基础入门⑩:Django查询数据库操作详讲

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 添加数据 存储

    2024年02月13日
    浏览(51)
  • ②【MySQL表操作】 数据库表的创建、查询、修改、删除

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 数据库表中的数据类型 : 数值类型: TINYINT :小整数 SMALLINT :大整数 MEDIUMINT :大整数,范围大于SMALLINT

    2024年02月06日
    浏览(59)
  • Python 通过pymssql访问查询操作 SQL Server数据库

    在企业应用开发中,经常用到应用程序访问数据库的开发模式,中小企业使用的数据库中,以ms SQL Server居多。本文就以一个简单的实例模型,简单介绍一下python访问ms sql sever数据库的方法。 本文中以下面的本地SQL Server数据库为例进行数据库连接,数据表的查询、增加、删除

    2024年02月10日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包