Java全栈学习心得Ⅰ

目录

学习背景

前言

前端

结构

表格

​编辑表单 

标签

 表现

样式引入

选择器 

字体和文本 

背景列表边框 

布局方式 

元素 

 JBDC

项目:SOSO移动业务大厅

开发工具

开发分层 

 项目需求

大致流程

具体实现

小结


学习背景

大概内容:前端 HTML CSS,JDBC;

地点:长沙欧富安科技园1栋节点飞思

时间:23年7月一号到九号

前言

就本周的学习内容来看不算太多,但想要掌握,并熟练的运用对我而言,还得要些时间。同时这可能也是我第一次接触到业务,通过Java代码实现与数据库的连接,以及其它功能的编撰,很新,很难,和其他一同学习的同学相比,能感受到我在这方面知识的欠缺和明显的不足,后面的学习还得继续加把劲。

前端

这也算是我一次系统的学习前端,之前的都是浅尝即止。这周主要学习的是关于W3C相关的方面,重点涉及到结构和表现。

结构

关于HTML主要学习了三个部分,表格,表单和标签。就个人的实际体验而言标签算是结构,甚至前端中一个及其重要的部分,元素靠标签修饰,标签又依靠元素体现。其次就是表单,表单有着独一无二的按钮控件。

表格



表单 

输入控件

 

标签

 

 表现

这块应该算是W3C的重点了,涉及到方方面面,整个页面的样式,布局全靠它支撑,同样它也是一个难点,对于细节的把控,各组件的合理运用也是一门学问。

样式引入

选择器 

字体和文本 

背景列表边框 

布局方式 

盒子模型

浮动

  定位

元素 

 JBDC

其本质为用Java语言来操纵数据库,大致分为几个方面:

DriverManager(驱动管理器)用来注册驱动,及将mysql提供的Driver对象注册到java中的DriverManager中,也能获取Connection对象;

Connection负责与数据库的连接与交互,重点在于获取Statement对象;

Statement向数据库发送SQL语句,但考虑到SQL注入(在传入到sql参数的值中恶意加入相应的sql不能识别的字符导致程序运行时出错)的存在,一般实际开发中更多的还是使用它的一个子类即PreparedStatement,通过‘?’达到一个占位的效果。具体到方法的实际运用中,主要还是两种即更新操作:void executeUpdate(String sql,...)和查询操作:ResultSet executeQuery(String sql,...);

ResultSet为查询结果的返回集,语法为boolean next();移动‘行光标’到下一行,并返回移动后是否存在,感觉使用更多的还是另一种方法即XXX getXXX(String colName),根据列明获取指定列上的值,方便我们之后对数据的调用,改动和打印。

连接池:c3p0

负责统一管理和调配Connection,c3p0连接池是一个免费开源的项目

连接池:使用

连接池由,driverClass,jdbcUrl,user,password和其它配置构成,同时库不同,配置也会不同。

 注意:c3p0连接池的配置文件名必须叫c3p0.config.xml

dbutils和jdbcutil

前者实现与数据库的交互,后者通过Java实现功能......

项目:SOSO移动业务大厅

开发工具

c3p0连接池,dbutils工具,beanutils工具,jdbc-connection

开发分层 

bean:实体层(数据封装)

dao:持久层(完成与数据库的数据交互,数据持久化)

srevice:业务层(需求的业务逻辑处理)

view:视图层(负责数据渲染和图形显示)(可有可无)

util:工具包(可有可无)

config:配置(可有可无)

 项目需求

用户登录:用户通过输入卡号和密码进入二级菜单

        本月账单查询:可查询该卡号的套餐费用,实际消费金额,账户余额

        套餐余量查询:分别判断用户属于三种套餐的哪一种,然后输出套餐余量

        打印消费详单

        套餐变更

        办理退网

用户注册:用户输入的信息包括:选择卡号,选择套餐类型,输入用户名和密码,预存话费金额(预存话费金额必须满足以支付所选套餐的一个月的费用),在此之前系统将筛选出空闲状态的手机号码,供用户选择

使用嗖嗖

话费充值

资费说明

退出系统

大致流程

1.在bean层中创建一个与数据库中表字段一致的JavaBean类

2.分析实现需求中与数据库交互的方法

3.在dao层创建要操作表的对应的Dao类,并将方法写进创建好的Dao类接口中

4.再创建对应Impl类,并实现Dao类中方法,如撰写SQL语句,创建连接池对象等,同时不因在dao层处理异常,因为涉及到事务

5.分析需求中需要使用Java实现的方法

6.再在service层创建dao层相对应的Service类,并将方法写进创建好的Service类接口中

7.再创建对应Impl类,并实现Service类中的方法,由于service层是依赖于dao层,故多半要在此创建相应的Dao类对象等,存在事务语句的编写,回滚和异常的处理

8.如果有,则再编写视图,实现方法的调用与功能的排布,将结果打印到控制台上

具体实现

(部分代码)

package com.fs.service.impl;

import com.fs.bean.MoboleCard;
import com.fs.dao.CardDao;
import com.fs.dao.MoboleCardDao;
import com.fs.dao.impl.CardDaoImpl;
import com.fs.dao.impl.MoboleCardDaoImpl;
import com.fs.util.JdbcUtil;

import java.sql.SQLException;

public class MoboleCardServiceImpl implements com.fs.service.MoboleCardService {

    //业务层依赖于数据持久层(Service depend on Dao)

    private MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
    private CardDao cardDao = new CardDaoImpl();

    //用户登录失败的情况
    @Override
    public String login(String cardNumber, String password) {
        MoboleCard mobleCar = null;
        try {
            mobleCar = moboleCardDao.findMoboleCar(cardNumber, password);
            if(mobleCar==null){//判断卡号是否存在,或者密码是否正确
                //视图层
                //System.out.println("[友情提示]卡号或密码提示");
                return "卡号或密码错误";
            }
            if(mobleCar.getStatus()==1){//判断Status的状态 0:正常  1:冻结
                return "该卡号已被冻结";
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    //用户成功登录
    @Override
    public MoboleCard getMoboleCard(String cardNumber, String password) {
        try {
            return moboleCardDao.findMoboleCar(cardNumber,password);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    @Override
    public String register(MoboleCard moboleCard) {
        try {
            JdbcUtil.beginTransaction();//开启事务
            if(!moboleCardDao.addMoboleCard(moboleCard)){
                return "注册失败";
            }
            cardDao.updateCardStatus(moboleCard.getCard_number());
            JdbcUtil.commitTransaction();
        } catch (SQLException throwables) {
            try {
                JdbcUtil.rallbackTransaction();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            throwables.printStackTrace();
        }
        return "注册成功";
    }
}
package com.fs.dao.impl;

import com.fs.bean.MoboleCard;
import com.fs.dao.MoboleCardDao;
import com.fs.util.JdbcUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
/**
 * 千万不要在Dao层处理SQLException异常
 */
import java.sql.Connection;
import java.sql.SQLException;

public class MoboleCardDaoImpl implements MoboleCardDao {

    //创建dbutils工具类对象
    //JdbcUtil.getDateSource():c3p0连接池对象统一调度connection
    private QueryRunner qr = new QueryRunner(JdbcUtil.getDataSource());


    @Override
    public MoboleCard findMoboleCar(String cardNumber, String password) throws SQLException {
        //sql语言:通过对手机号码和密码来从tb_mobole_card中筛选用户全部信息
        String sql = "SELECT * FROM `tb_mobole_card` WHERE `card_number` = ? AND `password` = ?";

        //通过调用dbuntils包中不含事务的查询方法,创建BeanListHandler结果集处理器,将sql语句查询到的结果转换为Java对象,并将每一行的结储存到List集合中并返回
        //通过反射获取要转换的类,将结果转换成对应的实例(MoboleCard.class)
        return qr.query(sql, new BeanHandler<MoboleCard>(MoboleCard.class), cardNumber, password);
    }

    @Override
    public boolean addMoboleCard(MoboleCard moboleCard) throws SQLException {
        Connection con = JdbcUtil.getConnection();//事务
        String sql = "INSERT INTO `tb_mobole_card` (`card_number`,`username`,`password`,`ser_package`,`money`,`status`) VALUES(?,?,?,?,?,?)";
        Object params[] = {
                moboleCard.getCard_number(), moboleCard.getUsername(), moboleCard.getPassword(),
                moboleCard.getSer_package(), moboleCard.getMoney(), moboleCard.getStatus()
        };
        return qr.update(con, sql, params) > 0 ? true : false;
    }
}

小结

革命还未成功,同志仍需努力!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值