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

Posted 陕西五花肉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb动态书城项目-mysql-Tomcat-mysql步骤教程相关的知识,希望对你有一定的参考价值。

项目结构

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)

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首先导入数据库连接包

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();
            }
        }
    }

}

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

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中有

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

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测试

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);
}

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和测试

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);
}

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

以上是关于JavaWeb动态书城项目-mysql-Tomcat-mysql步骤教程的主要内容,如果未能解决你的问题,请参考以下文章

[JavaWeb]文件上传下载和书城项目

基于 JavaWeb 的尚书房网上书城项目

基于 JavaWeb 的尚书房网上书城项目

JavaWeb项目(书城idea)---注册

项目01-JavaWeb网上书城01之工具类

[JavaWeb]文件上传文件下载和书城项目