JavaWeb动态书城项目-mysql-Tomcat-mysql步骤教程

news/2024/5/18 22:22:23 标签: mysql, java, jdbc, mybatis, 数据库

项目结构

web 层com.java.web/servlet/controller
service 层com.java.service Service 接口包
com.java.service.impl Service 接口实现类
dao 持久层com.java.dao Dao 接口包
com.java.dao.impl Dao 接口实现类
实体 bean 对象com.java.pojo/entity/domain/bean JavaBean 类
测试包com.java.test/junit
工具类com.java.utils

搭建项目目录:

在这里插入图片描述

操作步骤如下:

1.创建书城数据库

CREATE DATABASE book;
USE book;


##创建表t_user
CREATE TABLE t_user(
	`id` INT PRIMARY KEY AUTO_INCREMENT,
	`username` VARCHAR(50) NOT NULL UNIQUE,
	`password` VARCHAR(32) NOT NULL,
	`email` VARCHAR(50) 
	
);

##插入初始数据
INSERT INTO t_user(username,`password`,email) VALUES('admin','admin','admin@java.com');

## 查询表
SELECT * FROM t_user;

2.编写数据库表对应的JavaBean --实体类对象(pojo)

java">package com.atguigu.pojo;

    public class User {

        private Integer id;
        private String username;
        private String password;
        private String email;//IEDA快捷键  Alt + Insert 生成构造方法

        public User(Integer id, String username, String password, String email) {
            this.id = id;
            this.username = username;
            this.password = password;
            this.email = email;
        }


        public User() {
        }

        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    ", email='" + email + '\'' +
                    '}';
        }

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;
        }
    }

3.编写 工具类JdbcUtils -(Utils)包

3.1首先导入数据库连接包

java">package com.atguigu.utils;

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

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class JdbcUtils {

    private static DruidDataSource dataSource;

    static {
        try {
            Properties properties = new Properties();
            // 读取 jdbc.properties属性配置文件
            InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
            // 从流中加载数据
            properties.load(inputStream);
            // 创建 数据库连接 池
            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }



    /**
     * 获取数据库连接池中的连接
     * @return 如果返回null,说明获取连接失败<br/>有值就是获取连接成功
     */
    public static Connection getConnection(){

        Connection conn = null;

        try {
            conn = dataSource.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return conn;
    }

    /**
     * 关闭连接,放回数据库连接池
     * @param conn
     */
    public static void close(Connection conn){
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

jdbcproperties__183">3.2在src下添加配置文件jdbc.properties文件 文件内容如下

java">username=root
password=root
url=jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=utf8
driverClassName=com.mysql.jdbc.Driver
initialSize=5
maxActive=10

3.3 进行测试 查看数据库是否连接成功

idea中没有@Test 需要自己添加测试包
eclipse中有

java">package com.atguigu.test;

import com.atguigu.utils.JdbcUtils;
import org.junit.Test;

public class JdbcUtilsTest {
    @Test
    public void  tesJdbcUtils(){

            System.out.println(JdbcUtils.getConnection());



    }
}

4编写baseDao

java">package com.atguigu.dao.impl;

import com.atguigu.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

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

public abstract class BaseDao {

    //使用DbUtils操作数据库
    private QueryRunner queryRunner = new QueryRunner();

    /**
     * update() 方法用来执行:Insert\Update\Delete语句
     *
     * @return 如果返回-1,说明执行失败<br/>返回其他表示影响的行数
     */
    public int update(String sql, Object... args) {
        Connection connection = JdbcUtils.getConnection();
        try {
            return queryRunner.update(connection, sql, args);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(connection);
        }
        return -1;
    }

    /**
     * 查询返回一个javaBean的sql语句
     *
     * @param type 返回的对象类型
     * @param sql  执行的sql语句
     * @param args sql对应的参数值
     * @param <T>  返回的类型的泛型
     * @return
     */
    public <T> T queryForOne(Class<T> type, String sql, Object... args) {
        Connection con = JdbcUtils.getConnection();
        try {
            return queryRunner.query(con, sql, new BeanHandler<T>(type), args);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(con);
        }
        return null;
    }

    /**
     * 查询返回多个javaBean的sql语句
     *
     * @param type 返回的对象类型
     * @param sql  执行的sql语句
     * @param args sql对应的参数值
     * @param <T>  返回的类型的泛型
     * @return
     */
    public <T> List<T> queryForList(Class<T> type, String sql, Object... args) {
        Connection con = JdbcUtils.getConnection();
        try {
            return queryRunner.query(con, sql, new BeanListHandler<T>(type), args);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(con);
        }
        return null;
    }

    /**
     * 执行返回一行一列的sql语句
     * @param sql   执行的sql语句
     * @param args  sql对应的参数值
     * @return
     */
    public Object queryForSingleValue(String sql, Object... args){

        Connection conn = JdbcUtils.getConnection();

        try {
            return queryRunner.query(conn, sql, new ScalarHandler(), args);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(conn);
        }
        return null;

    }

}

5.编写UserDao测试

java">package com.atguigu.dao;

import com.atguigu.pojo.User;

public interface UserDao {



    /**cc
     * 根据用户名查询用户信息
     * @param username
     * @return 如果返回null ,说明没有这个用户,反之则有
     */
   public User queryUserByUsername(String username);


    /**cc
     *根据 用户名和密码查询用户信息
     * @param username
     * @param password
     * @return 如果返回null,说明用户名和密码错误
     */
    public User queryUserByUsernameAndPassword(String username ,String password);


    /**
     * 保存用户信息
     * @param user
     * @return
     */
    public int saveUser(User user);
}

java">package com.atguigu.test;

import com.atguigu.dao.UserDao;
import com.atguigu.dao.impl.UserDaoImpl;
import com.atguigu.pojo.User;
import org.junit.Test;

import static org.junit.Assert.*;

public class UserDaoTest {

    UserDao userDao = new UserDaoImpl();

    @Test
    public void queryUserByUsername() {

        if (userDao.queryUserByUsername("admin1234") == null ){
            System.out.println("用户名可用!");
        } else {
            System.out.println("用户名已存在!");
        }
    }

    @Test
    public void queryUserByUsernameAndPassword() {
        if ( userDao.queryUserByUsernameAndPassword("admin","admin1234") == null) {
            System.out.println("用户名或密码错误,登录失败");
        } else {
            System.out.println("查询成功");
        }
    }

    @Test
    public void saveUser() {
        System.out.println( userDao.saveUser(new User(null,"wzg168", "123456", "wzg168@qq.com")) );
    }
}

`

6.编写UserService和测试

java">package com.atguigu.service;

import com.atguigu.pojo.User;

import javax.jws.soap.SOAPBinding;

public interface UserService {
    /**cc
     * 注册用户 业务
     * @param user
     */
    public void registUser(User user);

    /**cc
     *
     * @param user
     * @return
     */
     public User login(User user);

    /**cc
     *
     * @param username
     * @return  如果返回true 则表示用户名已存在  false表示用户名可以用
     */
     public  boolean existUsername(String username);
}

java">package com.atguigu.test;

import com.atguigu.dao.UserDao;
import com.atguigu.pojo.User;
import com.atguigu.service.UserService;
import com.atguigu.service.impl.UserServiceImpl;
import org.junit.Test;

import static org.junit.Assert.*;

public class UserServiceTest {
   UserService userService=new UserServiceImpl();
    @Test
    public void registUser() {
        userService.registUser(new User(null,"xa123456", "xa123456","xa123456@qq.com"));
        userService.registUser(new User(null,"js123456","js123456","js123456@qq.com"));
    }

    @Test
    public void login() {
        System.out.println( userService.login(new User(null,"js123456","js123456",null)));
        //如果返回null ,说明登录失败,返回有值 则说明登陆成功
    }

    @Test
    public void existUsername() {
        if(userService.existUsername("js123456")){
            System.out.println("用户已存在!");
        }else{
            System.out.println("用户名可用!");
        }

    }
}

7.编写web层

根据自己前段web来编写
想要完整代码私信分享
完整代码连接

https://download.csdn.net/download/weixin_45185519/20969696


http://www.niftyadmin.cn/n/890585.html

相关文章

jsp 的三种语法-头部的 page 指令-.jsp 中的常用脚本-jsp 中的三种注释- 四大域对象pageContext\request\session\applicatio

1.jsp 头部的 page 指令 jsp 的 page 指令可以修改 jsp 页面中一些重要的属性&#xff0c;或者行为。 <% page contentType“text/html;charsetUTF-8” language“java” %> i. language 属性表示 jsp 翻译后是什么语言文件。暂时只支持 java。 ii. contentType 属性 表…

EL 表达式 JSTL 标签

1.EL 表达式 a)什么是 EL 表达式&#xff0c;EL 表达式的作用? EL 表达式的全称是&#xff1a;Expression Language。是表达式语言。 EL 表达式的什么作用&#xff1a;EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。 因为 EL 表达式在输出数据的…

二维数组顺时针旋转90度

import java.util.Arrays;public class Main01 {//多维数组public static void main(String[] args) {int a 4; //基本数据类型不能为空 null//int[] arr new int[7]; //数组可以为 null int[][] arrays { //二维数组是以一位数组的元素为基础{1,2,3}, //[…

for循环打印输出4个不一样三角形(*) 和九九乘法表

for循环打印输出4个不一样三角形&#xff08;*&#xff09; 和九九乘法表 使用前将注释去掉 分割线 import java.util.Scanner;public class Test {public static void main(String[] args) {/** 输出 : * ** 行 列*** 1 1**** …

Java编写 开关灯游戏的二维数组 如图显示 代码在图下面

** Java编写 开关灯游戏的二维数组如图显示 代码在图下面 ** import java.util.Scanner;public class Test {public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner new Scanner(System.in);int[][] arrays { { 0, 1, 1, 0, 0, 0…

java 判断是否回文

java 判断是否回文 是回文 true 否则false package com.lanou.day10;// 一个字符串满足正着读和倒着读的结果是一样的,那么//是一个回文字符串 如abba,abcba,上海自来水来自海上 public class HomeWork1 {public static void main(String[] args) {HomeWork1 w new HomeWork…

java 写斐波那契 求第n个和

java 写斐波那契 求第n个和 //斐波那契数列 public class Test {public static void main(String[] args) {int n 39; //定义第n的斐波那契值if (n < 2) {System.out.println(1);return;} else {long a 1;long b 1;for (int i 3; i < n - 2; i) {long last a b;ab…

计算机基本组成于工作模型 -二进制-分时复用操作系统-并发并行-内存-硬盘-高速缓存-BIOS

1- 计算机基本组成于工作模型 1.为什么cpu计算机只能认识0和1 ​ 因为cpu作为计算机的核心,负责计算,控制存储等功能.在执行这些功能过程中,CPU需要接受主板供电,从初高中物理上我们得知,任何电器设备,需要形成回路,同时,供电状态只有俩种,一种是高电平一种叫低电平,我们将高…