目录
学习背景
大概内容:前端 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;
}
}
小结
革命还未成功,同志仍需努力!