POM.XML文件中添加依赖
<dependency><groupId>Junit</groupId><artifactId>Junit</artifactId><version>4.12</version></dependency>
在普通方法上添加注解
@Test
就可以直接执行该方法达到测试的目的
SMBMS项目搭建
一)项目结构搭建—–maven项目,使用web模板,删除pom.xml文件多余注释,更改web.xml配置
二)添加tomcat
三)测试tomcat是否能跑
四)导包(servlet、jsp、jstl、mysql、stand)
五)创建项目包结构
六)连接mysql(建表填充数据)
CREATE DATABASE `smbms`;USE `smbms`;DROP TABLE IF EXISTS `smbms_address`;CREATE TABLE `smbms_address` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT \'主键ID\',`contact` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'联系人姓名\',`addressDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'收货地址明细\',`postCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'邮编\',`tel` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'联系人电话\',`createdBy` BIGINT(20) DEFAULT NULL COMMENT \'创建者\',`creationDate` DATETIME DEFAULT NULL COMMENT \'创建时间\',`modifyBy` BIGINT(20) DEFAULT NULL COMMENT \'修改者\',`modifyDate` DATETIME DEFAULT NULL COMMENT \'修改时间\',`userId` BIGINT(20) DEFAULT NULL COMMENT \'用户ID\',PRIMARY KEY (`id`)) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;INSERT INTO `smbms_address`(`id`,`contact`,`addressDesc`,`postCode`,`tel`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`,`userId`) VALUES (1,\'王丽\',\'北京市东城区东交民巷44号\',\'100010\',\'13678789999\',1,\'2016-04-13 00:00:00\',NULL,NULL,1),(2,\'张红丽\',\'北京市海淀区丹棱街3号\',\'100000\',\'18567672312\',1,\'2016-04-13 00:00:00\',NULL,NULL,1),(3,\'任志强\',\'北京市东城区美术馆后街23号\',\'100021\',\'13387906742\',1,\'2016-04-13 00:00:00\',NULL,NULL,1),(4,\'曹颖\',\'北京市朝阳区朝阳门南大街14号\',\'100053\',\'13568902323\',1,\'2016-04-13 00:00:00\',NULL,NULL,2),(5,\'李慧\',\'北京市西城区三里河路南三巷3号\',\'100032\',\'18032356666\',1,\'2016-04-13 00:00:00\',NULL,NULL,3),(6,\'王国强\',\'北京市顺义区高丽营镇金马工业区18号\',\'100061\',\'13787882222\',1,\'2016-04-13 00:00:00\',NULL,NULL,3);DROP TABLE IF EXISTS `smbms_bill`;CREATE TABLE `smbms_bill` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT \'主键ID\',`billCode` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'账单编码\',`productName` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'商品名称\',`productDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'商品描述\',`productUnit` VARCHAR(10) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'商品单位\',`productCount` DECIMAL(20,2) DEFAULT NULL COMMENT \'商品数量\',`totalPrice` DECIMAL(20,2) DEFAULT NULL COMMENT \'商品总额\',`isPayment` INT(10) DEFAULT NULL COMMENT \'是否支付(1:未支付 2:已支付)\',`createdBy` BIGINT(20) DEFAULT NULL COMMENT \'创建者(userId)\',`creationDate` DATETIME DEFAULT NULL COMMENT \'创建时间\',`modifyBy` BIGINT(20) DEFAULT NULL COMMENT \'更新者(userId)\',`modifyDate` DATETIME DEFAULT NULL COMMENT \'更新时间\',`providerId` BIGINT(20) DEFAULT NULL COMMENT \'供应商ID\',PRIMARY KEY (`id`)) ENGINE=INNODB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;INSERT INTO `smbms_bill`(`id`,`billCode`,`productName`,`productDesc`,`productUnit`,`productCount`,`totalPrice`,`isPayment`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`,`providerId`) VALUES (2,\'BILL2016_002\',\'香皂、肥皂、药皂\',\'日用品-皂类\',\'块\',\'1000.00\',\'10000.00\',2,1,\'2016-03-23 04:20:40\',NULL,NULL,13),(3,\'BILL2016_003\',\'大豆油\',\'食品-食用油\',\'斤\',\'300.00\',\'5890.00\',2,1,\'2014-12-14 13:02:03\',NULL,NULL,6),(4,\'BILL2016_004\',\'橄榄油\',\'食品-进口食用油\',\'斤\',\'200.00\',\'9800.00\',2,1,\'2013-10-10 03:12:13\',NULL,NULL,7),(5,\'BILL2016_005\',\'洗洁精\',\'日用品-厨房清洁\',\'瓶\',\'500.00\',\'7000.00\',2,1,\'2014-12-14 13:02:03\',NULL,NULL,9),(6,\'BILL2016_006\',\'美国大杏仁\',\'食品-坚果\',\'袋\',\'300.00\',\'5000.00\',2,1,\'2016-04-14 06:08:09\',NULL,NULL,4),(7,\'BILL2016_007\',\'沐浴液、精油\',\'日用品-沐浴类\',\'瓶\',\'500.00\',\'23000.00\',1,1,\'2016-07-22 10:10:22\',NULL,NULL,14),(8,\'BILL2016_008\',\'不锈钢盘碗\',\'日用品-厨房用具\',\'个\',\'600.00\',\'6000.00\',2,1,\'2016-04-14 05:12:13\',NULL,NULL,14),(9,\'BILL2016_009\',\'塑料杯\',\'日用品-杯子\',\'个\',\'350.00\',\'1750.00\',2,1,\'2016-02-04 11:40:20\',NULL,NULL,14),(10,\'BILL2016_010\',\'豆瓣酱\',\'食品-调料\',\'瓶\',\'200.00\',\'2000.00\',2,1,\'2013-10-29 05:07:03\',NULL,NULL,8),(11,\'BILL2016_011\',\'海之蓝\',\'饮料-国酒\',\'瓶\',\'50.00\',\'10000.00\',1,1,\'2016-04-14 16:16:00\',NULL,NULL,1),(12,\'BILL2016_012\',\'芝华士\',\'饮料-洋酒\',\'瓶\',\'20.00\',\'6000.00\',1,1,\'2016-09-09 17:00:00\',NULL,NULL,1),(13,\'BILL2016_013\',\'长城红葡萄酒\',\'饮料-红酒\',\'瓶\',\'60.00\',\'800.00\',2,1,\'2016-11-14 15:23:00\',NULL,NULL,1),(14,\'BILL2016_014\',\'泰国香米\',\'食品-大米\',\'斤\',\'400.00\',\'5000.00\',2,1,\'2016-10-09 15:20:00\',NULL,NULL,3),(15,\'BILL2016_015\',\'东北大米\',\'食品-大米\',\'斤\',\'600.00\',\'4000.00\',2,1,\'2016-11-14 14:00:00\',NULL,NULL,3),(16,\'BILL2016_016\',\'可口可乐\',\'饮料\',\'瓶\',\'2000.00\',\'6000.00\',2,1,\'2012-03-27 13:03:01\',NULL,NULL,2),(17,\'BILL2016_017\',\'脉动\',\'饮料\',\'瓶\',\'1500.00\',\'4500.00\',2,1,\'2016-05-10 12:00:00\',NULL,NULL,2),(18,\'BILL2016_018\',\'哇哈哈\',\'饮料\',\'瓶\',\'2000.00\',\'4000.00\',2,1,\'2015-11-24 15:12:03\',NULL,NULL,2);DROP TABLE IF EXISTS `smbms_provider`;CREATE TABLE `smbms_provider` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT \'主键ID\',`proCode` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'供应商编码\',`proName` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'供应商名称\',`proDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'供应商详细描述\',`proContact` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'供应商联系人\',`proPhone` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'联系电话\',`proAddress` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'地址\',`proFax` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'传真\',`createdBy` BIGINT(20) DEFAULT NULL COMMENT \'创建者(userId)\',`creationDate` DATETIME DEFAULT NULL COMMENT \'创建时间\',`modifyDate` DATETIME DEFAULT NULL COMMENT \'更新时间\',`modifyBy` BIGINT(20) DEFAULT NULL COMMENT \'更新者(userId)\',PRIMARY KEY (`id`)) ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;INSERT INTO `smbms_provider`(`id`,`proCode`,`proName`,`proDesc`,`proContact`,`proPhone`,`proAddress`,`proFax`,`createdBy`,`creationDate`,`modifyDate`,`modifyBy`) VALUES (1,\'BJ_GYS001\',\'北京三木堂商贸有限公司\',\'长期合作伙伴,主营产品:茅台、五粮液、郎酒、酒鬼酒、泸州老窖、赖茅酒、法国红酒等\',\'张国强\',\'13566667777\',\'北京市丰台区育芳园北路\',\'010-58858787\',1,\'2013-03-21 16:52:07\',NULL,NULL),(2,\'HB_GYS001\',\'石家庄帅益食品贸易有限公司\',\'长期合作伙伴,主营产品:饮料、水饮料、植物蛋白饮料、休闲食品、果汁饮料、功能饮料等\',\'王军\',\'13309094212\',\'河北省石家庄新华区\',\'0311-67738876\',1,\'2016-04-13 04:20:40\',NULL,NULL),(3,\'GZ_GYS001\',\'深圳市泰香米业有限公司\',\'初次合作伙伴,主营产品:良记金轮米,龙轮香米等\',\'郑程瀚\',\'13402013312\',\'广东省深圳市福田区深南大道6006华丰大厦\',\'0755-67776212\',1,\'2014-03-21 16:56:07\',NULL,NULL),(4,\'GZ_GYS002\',\'深圳市喜来客商贸有限公司\',\'长期合作伙伴,主营产品:坚果炒货.果脯蜜饯.天然花茶.营养豆豆.特色美食.进口食品.海味零食.肉脯肉\',\'林妮\',\'18599897645\',\'广东省深圳市福龙工业区B2栋3楼西\',\'0755-67772341\',1,\'2013-03-22 16:52:07\',NULL,NULL),(5,\'JS_GYS001\',\'兴化佳美调味品厂\',\'长期合作伙伴,主营产品:天然香辛料、鸡精、复合调味料\',\'徐国洋\',\'13754444221\',\'江苏省兴化市林湖工业区\',\'0523-21299098\',1,\'2015-11-22 16:52:07\',NULL,NULL),(6,\'BJ_GYS002\',\'北京纳福尔食用油有限公司\',\'长期合作伙伴,主营产品:山茶油、大豆油、花生油、橄榄油等\',\'马莺\',\'13422235678\',\'北京市朝阳区珠江帝景1号楼\',\'010-588634233\',1,\'2012-03-21 17:52:07\',NULL,NULL),(7,\'BJ_GYS003\',\'北京国粮食用油有限公司\',\'初次合作伙伴,主营产品:花生油、大豆油、小磨油等\',\'王驰\',\'13344441135\',\'北京大兴青云店开发区\',\'010-588134111\',1,\'2016-04-13 00:00:00\',NULL,NULL),(8,\'ZJ_GYS001\',\'慈溪市广和绿色食品厂\',\'长期合作伙伴,主营产品:豆瓣酱、黄豆酱、甜面酱,辣椒,大蒜等农产品\',\'薛圣丹\',\'18099953223\',\'浙江省宁波市慈溪周巷小安村\',\'0574-34449090\',1,\'2013-11-21 06:02:07\',NULL,NULL),(9,\'GX_GYS001\',\'优百商贸有限公司\',\'长期合作伙伴,主营产品:日化产品\',\'李立国\',\'13323566543\',\'广西南宁市秀厢大道42-1号\',\'0771-98861134\',1,\'2013-03-21 19:52:07\',NULL,NULL),(10,\'JS_GYS002\',\'南京火头军信息技术有限公司\',\'长期合作伙伴,主营产品:不锈钢厨具等\',\'陈女士\',\'13098992113\',\'江苏省南京市浦口区浦口大道1号新城总部大厦A座903室\',\'025-86223345\',1,\'2013-03-25 16:52:07\',NULL,NULL),(11,\'GZ_GYS003\',\'广州市白云区美星五金制品厂\',\'长期合作伙伴,主营产品:海绵床垫、坐垫、靠垫、海绵枕头、头枕等\',\'梁天\',\'13562276775\',\'广州市白云区钟落潭镇福龙路20号\',\'020-85542231\',1,\'2016-12-21 06:12:17\',NULL,NULL),(12,\'BJ_GYS004\',\'北京隆盛日化科技\',\'长期合作伙伴,主营产品:日化环保清洗剂,家居洗涤专卖、洗涤用品网、墙体除霉剂、墙面霉菌清除剂等\',\'孙欣\',\'13689865678\',\'北京市大兴区旧宫\',\'010-35576786\',1,\'2014-11-21 12:51:11\',NULL,NULL),(13,\'SD_GYS001\',\'山东豪克华光联合发展有限公司\',\'长期合作伙伴,主营产品:洗衣皂、洗衣粉、洗衣液、洗洁精、消杀类、香皂等\',\'吴洪转\',\'13245468787\',\'山东济阳济北工业区仁和街21号\',\'0531-53362445\',1,\'2015-01-28 10:52:07\',NULL,NULL),(14,\'JS_GYS003\',\'无锡喜源坤商行\',\'长期合作伙伴,主营产品:日化品批销\',\'周一清\',\'18567674532\',\'江苏无锡盛岸西路\',\'0510-32274422\',1,\'2016-04-23 11:11:11\',NULL,NULL),(15,\'ZJ_GYS002\',\'乐摆日用品厂\',\'长期合作伙伴,主营产品:各种中、高档塑料杯,塑料乐扣水杯(密封杯)、保鲜杯(保鲜盒)、广告杯、礼品杯\',\'王世杰\',\'13212331567\',\'浙江省金华市义乌市义东路\',\'0579-34452321\',1,\'2016-08-22 10:01:30\',NULL,NULL);DROP TABLE IF EXISTS `smbms_role`;CREATE TABLE `smbms_role` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT \'主键ID\',`roleCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'角色编码\',`roleName` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'角色名称\',`createdBy` BIGINT(20) DEFAULT NULL COMMENT \'创建者\',`creationDate` DATETIME DEFAULT NULL COMMENT \'创建时间\',`modifyBy` BIGINT(20) DEFAULT NULL COMMENT \'修改者\',`modifyDate` DATETIME DEFAULT NULL COMMENT \'修改时间\',PRIMARY KEY (`id`)) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;INSERT INTO `smbms_role`(`id`,`roleCode`,`roleName`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`) VALUES (1,\'SMBMS_ADMIN\',\'系统管理员\',1,\'2016-04-13 00:00:00\',NULL,NULL),(2,\'SMBMS_MANAGER\',\'经理\',1,\'2016-04-13 00:00:00\',NULL,NULL),(3,\'SMBMS_EMPLOYEE\',\'普通员工\',1,\'2016-04-13 00:00:00\',NULL,NULL);DROP TABLE IF EXISTS `smbms_user`;CREATE TABLE `smbms_user` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT \'主键ID\',`userCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'用户编码\',`userName` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'用户名称\',`userPassword` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'用户密码\',`gender` INT(10) DEFAULT NULL COMMENT \'性别(1:女、 2:男)\',`birthday` DATE DEFAULT NULL COMMENT \'出生日期\',`phone` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'手机\',`address` VARCHAR(30) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'地址\',`userRole` BIGINT(20) DEFAULT NULL COMMENT \'用户角色(取自角色表-角色id)\',`createdBy` BIGINT(20) DEFAULT NULL COMMENT \'创建者(userId)\',`creationDate` DATETIME DEFAULT NULL COMMENT \'创建时间\',`modifyBy` BIGINT(20) DEFAULT NULL COMMENT \'更新者(userId)\',`modifyDate` DATETIME DEFAULT NULL COMMENT \'更新时间\',PRIMARY KEY (`id`)) ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;INSERT INTO `smbms_user`(`id`,`userCode`,`userName`,`userPassword`,`gender`,`birthday`,`phone`,`address`,`userRole`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`) VALUES (1,\'admin\',\'系统管理员\',\'1234567\',1,\'1983-10-10\',\'13688889999\',\'北京市海淀区成府路207号\',1,1,\'2013-03-21 16:52:07\',NULL,NULL),(2,\'liming\',\'李明\',\'0000000\',2,\'1983-12-10\',\'13688884457\',\'北京市东城区前门东大街9号\',2,1,\'2014-12-31 19:52:09\',NULL,NULL),(5,\'hanlubiao\',\'韩路彪\',\'0000000\',2,\'1984-06-05\',\'18567542321\',\'北京市朝阳区北辰中心12号\',2,1,\'2014-12-31 19:52:09\',NULL,NULL),(6,\'zhanghua\',\'张华\',\'0000000\',1,\'1983-06-15\',\'13544561111\',\'北京市海淀区学院路61号\',3,1,\'2013-02-11 10:51:17\',NULL,NULL),(7,\'wangyang\',\'王洋\',\'0000000\',2,\'1982-12-31\',\'13444561124\',\'北京市海淀区西二旗辉煌国际16层\',3,1,\'2014-06-11 19:09:07\',NULL,NULL),(8,\'zhaoyan\',\'赵燕\',\'0000000\',1,\'1986-03-07\',\'18098764545\',\'北京市海淀区回龙观小区10号楼\',3,1,\'2016-04-21 13:54:07\',NULL,NULL),(10,\'sunlei\',\'孙磊\',\'0000000\',2,\'1981-01-04\',\'13387676765\',\'北京市朝阳区管庄新月小区12楼\',3,1,\'2015-05-06 10:52:07\',NULL,NULL),(11,\'sunxing\',\'孙兴\',\'0000000\',2,\'1978-03-12\',\'13367890900\',\'北京市朝阳区建国门南大街10号\',3,1,\'2016-11-09 16:51:17\',NULL,NULL),(12,\'zhangchen\',\'张晨\',\'0000000\',1,\'1986-03-28\',\'18098765434\',\'朝阳区管庄路口北柏林爱乐三期13号楼\',3,1,\'2016-08-09 05:52:37\',1,\'2016-04-14 14:15:36\'),(13,\'dengchao\',\'邓超\',\'0000000\',2,\'1981-11-04\',\'13689674534\',\'北京市海淀区北航家属院10号楼\',3,1,\'2016-07-11 08:02:47\',NULL,NULL),(14,\'yangguo\',\'杨过\',\'0000000\',2,\'1980-01-01\',\'13388886623\',\'北京市朝阳区北苑家园茉莉园20号楼\',3,1,\'2015-02-01 03:52:07\',NULL,NULL),(15,\'zhaomin\',\'赵敏\',\'0000000\',1,\'1987-12-04\',\'18099897657\',\'北京市昌平区天通苑3区12号楼\',2,1,\'2015-09-12 12:02:12\',NULL,NULL);
七)编写实体类
一一与数据库中的字段进行对应即可
八)编写公共工具类
九)编写字符编码过滤器
public class CharacterEncodingFileter implements Filter {public void init(FilterConfig filterConfig) throws ServletException {}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding(\"GBK\");servletResponse.setCharacterEncoding(\"GBK\");filterChain.doFilter(servletRequest,servletResponse);}public void destroy() {}}
同时,web.xml中记得配置
<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>com.wang.filter.CharacterEncodingFileter</filter-class></filter><!-- 这里是针对所有的请求,均通过这个过滤器改变编码 --><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
十)静态文件引入
功能一:登陆功能实现
步骤一:先修改项目首页
将login.jsp先放在webapp目录下,然后在web.xml中配置首页登陆
<welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list>
步骤二:按层分别编写相应代码
①DAO层
操作数据库公共类
BaseDao.java
package com.wang.dao;import java.io.IOException;import java.io.InputStream;import java.sql.*;import java.util.Properties;//操作数据库公共类public class BaseDao {//获取连接private static String driver;private static String url;private static String username;private static String password;static {//通过流取到写在db.properties中的数据库连接信息,如driver、url、username、password,//静态方法,在加载类的时候直接执行Properties properties = new Properties();InputStream is = BaseDao.class.getClassLoader().getResourceAsStream(\"db.properties\");try {properties.load(is);} catch (IOException e) {e.printStackTrace();}driver = properties.getProperty(\"driver\");url = properties.getProperty(\"url\");username = properties.getProperty(\"username\");password = properties.getProperty(\"password\");}//获取数据库连接public static Connection getConnection(){Connection connection = null;try {//JDBC第一步获取连接,通过DriverManager直接执行getConnection()方法获取到Class.forName(driver);connection = DriverManager.getConnection(url,username,password);} catch (Exception e) {e.printStackTrace();}return connection;}//这个是专门用于查询的方法,由调取这个公共类的类提供相应参数public static ResultSet excutequery(Connection connection,String sql,Object[] params,ResultSet resultSet,PreparedStatement prepareStatement ) throws SQLException {//先预编译,传进来的SQL是有占位符的prepareStatement = connection.prepareStatement(sql);//下面这个循环是给占位符进行一一赋值,凑成完整的SQLfor (int i = 0; i <params.length ; i++) {prepareStatement.setObject(i+1,params[i]);System.out.println(\"进入遍历参数遍历\");}//preparstatement对象执行SQL,并获取查询结果赋给resultSet对象,返回resultsetresultSet = prepareStatement.executeQuery();return resultSet ;}//编写增删改方法public static int excute(Connection connection,String sql,Object[] params,PreparedStatement prepareStatement ) throws SQLException {prepareStatement = connection.prepareStatement(sql);for (int i = 0; i <params.length ; i++) {prepareStatement.setObject(i+1,params[i]);}int updateRows = prepareStatement.executeUpdate(sql);return updateRows ;}//关闭连接,提前设置一个boolean值,如果关闭了就不动其初始值true,万一报错就改false最后返回。public static boolean close(Connection connection,PreparedStatement prepareStatement,ResultSet resultSet){boolean flag = true;if(resultSet!=null){try {resultSet.close();resultSet = null ;} catch (SQLException e) {e.printStackTrace();flag = false ;}}if(connection!=null){try {connection.close();connection = null ;} catch (SQLException e) {e.printStackTrace();flag = false ;}}if(prepareStatement!=null){try {prepareStatement.close();prepareStatement = null ;} catch (SQLException e) {e.printStackTrace();flag = false ;}}return flag ;}}
DAO层的实现类
先写接口UserDao:
public interface UserDao {//得到要登陆的用户public User getLoginUser(Connection connection,String UserCode);}
再写其实现类UserDaoImpl.java :
public class UserDaoImpl implements UserDao {public User getLoginUser(Connection connection, String UserCode) {PreparedStatement pstm = null;ResultSet rs = null;User user = null;if(connection!=null){String sql = \"select * from smbms_user where userCode=?\";//这里已经对参数列表赋值Object[] params = {UserCode};try {//SQL有了,参数列表有了,调用公共工具类进行查询获取结果rs = BaseDao.excutequery(connection,sql,params,rs,pstm);if(rs.next()){user = new User();//将查询的获取结果赋值给实体类,让JAVA代码中能够获取到查询的结果数据user.setId(rs.getInt(\"id\"));user.setUserCode(rs.getString(\"userCode\"));user.setUserName(rs.getString(\"userName\"));//参数里填的是数据库中对应的键,要写字段名!user.setUserPassword(rs.getString(\"userPassword\"));user.setGender(rs.getInt(\"gender\"));user.setBirthday(rs.getDate(\"birthday\"));user.setPhone(rs.getString(\"phone\"));user.setAddress(rs.getString(\"address\"));user.setUserRole(rs.getInt(\"userRole\"));user.setCreatedBy(rs.getInt(\"createdBy\"));user.setCreationDate(rs.getTimestamp(\"creationDate\"));user.setModifyBy(rs.getInt(\"modifyBy\"));user.setModifyDate(rs.getTimestamp(\"modifyDate\"));}BaseDao.close(null,pstm,rs);} catch (SQLException e) {e.printStackTrace();}}return user;}}
②业务层
业务层实现类
老规矩,先定义接口UserService,说明业务的构造:
public interface UserService {public User login(String uesrcode, String password);}
写实现类UserServiceImpl:
package com.wang.service.user;import com.wang.dao.BaseDao;import com.wang.dao.user.UserDao;import com.wang.dao.user.UserDaoImpl;import com.wang.pojo.User;import org.junit.Test;import java.sql.Connection;public class UserServiceImpl implements UserService {private UserDao userDao;//直接写在构造方法中,这样可以保证直接在类加载的时候直接获取一个Dao实现类的一个方法,可以直接用public UserServiceImpl (){userDao = new UserDaoImpl();}public User login(String uesrcode, String password) {//需要用到的参数,一一进行初始化Connection connection = null ;User user = null ;connection = BaseDao.getConnection();//这里直接调用DAO层方法,获取结果,如果DAO层传回了正常的User对象,那就说明查询成功了,数据库中确实是存在uesrcode这个人user = userDao.getLoginUser(connection,uesrcode);BaseDao.close(connection,null,null);return user ;}@Testpublic void Test(){UserServiceImpl us = new UserServiceImpl();User user = us.login(\"admin\",\"ASDFASDFASDF\");System.out.println(user.getUserPassword());}}
③控制层
控制层中要写servlet了
package com.wang.servlet.user;import com.wang.pojo.User;import com.wang.service.user.UserService;import com.wang.service.user.UserServiceImpl;import com.wang.util.Constants;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class LoginServlet extends HttpServlet {//处理登陆请求,这里是控制层,负责调业务层的代码@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(\"进入了控制层\");//先把前台输入的参数获取到String usercode = req.getParameter(\"userCode\");String password = req.getParameter(\"userPassword\");//调用业务层UserService userService = new UserServiceImpl();User user = userService.login(usercode,password);//这里已经把登陆的人查出来了if(user!=null){System.out.println(\"这个人确实是有的,可以登陆了\");//把用户的信息放入session,注意,这里使用了一个常量,在JAVA文件夹下新建一个工具类,存放常量req.getSession().setAttribute(Constants.USER_SESSION,user);//登陆成功就放进去resp.sendRedirect(\"jsp/frame.jsp\");}else{//查无此人req.setAttribute(\"error\",\"你个逼输入的都是什么玩意\");req.getRequestDispatcher(\"login.jsp\").forward(req,resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}}