Day43

Day43

前几天偷懒了,今天要学够5个小时,加油。

 

javaEE项目的三层结构

  1. 先创建书城需要的数据库和表

  2. 编写数据库对应的JAVABEAN对象(下面就是javabean类)

    package com.atguigu.pojo;

    /**
    * @Author nextGame
    * @Date 2021/5/2 12:16
    * @Version 1.0
    */
    public class User {
       //这里设置为Integer为了后面可以用来比较,对象是否为空,判断该值是否为空,int不行
       private Integer id;
       private String username;
       private String password;
       private String 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;
      }


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

       public User() {
      }

       public User(Integer id, String username, String password, String email) {
           this.id = id;
           this.username = username;
           this.password = password;
           this.email = email;
      }
    }
  3. 3-1编写工具类utils

    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编写测试jdbc

    package com.atguigu.test;

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

    import java.sql.Connection;

    public class JdbcUtilsTest {
       @Test
       public void testJdbcUtils(){
           //maxActive=10,设置了最大连接数10,所以只会有10个连接,只要及时释放。就可以了
           for (int i = 0; i < 100; i++) {
               Connection connection = JdbcUtils.getConnection();
               System.out.println(connection);
               JdbcUtils.close(connection);
          }
      }
    }
  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;

    /**
    * 这里用abstract将BaseDao定义成抽象类,给别人使用的,不需要实例。
    * QueryRunner类:
    *             update(connection,sql,params):执行任何增删改
    *             query(connection,sql,ResultHandler,params):执行任何查询语句
    * ResultHandler接口
    *             BeanHandler:将结果集的第一行,封装成对象,并返回     new BeanHanler<>(XX.class)
    *             BeanListHandler:将结果集的所有行,封装成对象的集合,并返回   new BeanListHandler<>(XX.class)
    *             ScalarHandler:将结果集中的第一行第一列,以Object形式返回 new ScalarHandler()
    * @author 喜
    */
    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 {
               int update = queryRunner.update(connection, sql, args);
               return update;
          } catch (Exception 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 connection = JdbcUtils.getConnection();
           try {
               return queryRunner.query(connection,sql,new BeanHandler<T>(type),args);
          } catch (Exception e) {
               e.printStackTrace();
          } finally {
               JdbcUtils.close(connection);
          }
           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 connection = JdbcUtils.getConnection();
           try {
               return queryRunner.query(connection,sql,new BeanListHandler<T>(type),args);
          } catch (Exception e) {
               e.printStackTrace();
          } finally {
               JdbcUtils.close(connection);
          }
           return null;
      }

       /**
        * 执行返回一行一列的sql语句
        * @param sql   执行的sql语句
        * @param args sql对应的参数值
        * @return
        */
       public Object queryForSingleValue(String sql,Object...args){
           Connection connection = JdbcUtils.getConnection();
           try {
               queryRunner.query(connection,sql,new ScalarHandler(),args);
          } catch (Exception e) {
               e.printStackTrace();
          } finally {
               JdbcUtils.close(connection);
          }
           return null;
      }
    }
  5. 编写BaseDao测试

    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.*;

    /**
    * @Author nextGame
    * @Date 2021/5/2 15:23
    * @Version 1.0
    */
    public class UserDaoTest {
       UserDaoImpl userDao = new UserDaoImpl();

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

       @Test
       public void queryUserByUsernameAndPassword() {
           UserDaoImpl userDao = new UserDaoImpl();
           if(userDao.queryUserByUsernameAndPassword("admin","admin")==null){
               System.out.println("登陆失败");
          }else {
               System.out.println("登录成功");
          }
      }

       @Test
       public void saveUser() {
           System.out.println(userDao.saveUser(new User(null, "admin", "admin", "123456")));
      }
    }
  6. 编写UserService和测试

    userService

    package com.atguigu.service;

    import com.atguigu.pojo.User;

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

       /**
        * 登录
        * @param user
        * @return 如果返回null,说明登录失败,返回有值,是登录成功
        */
       public User login(User user);

       /**
        * 检查 用户名是否可用
        * @param username
        * @return 返回true表示用户名已存在,返回false表示用户名可用
        */
       public boolean existsUsername(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.*;

    /**
    * @Author nextGame
    * @Date 2021/5/2 16:29
    * @Version 1.0
    */
    public class UserServiceTest {
       
       UserService userService = new UserServiceImpl();
       @Test
       public void registUser() {
           userService.registUser(new User(null,"ccmin","123456","123456@qq.com"));
           userService.registUser(new User(null,"ddmin","1111111","000000@qq.com"));
      }

       @Test
       public void login() {
           System.out.println(userService.login(new User(null, "admin", "1111111", null)));
      }

       @Test
       public void existsUsername() {
           if(userService.existsUsername("admin")){
               System.out.println("用户名已经存在");
          }else{
               System.out.println("用户名可以使用");
          }
      }
    }
  7.  

posted @ 2021-05-03 21:29  独眼龙  阅读(53)  评论(0)    收藏  举报