前言

我想整一个Android借助本地MySQL进行登录注册的功能,
奈何搜遍全网,都没看见多好的资源。
好在我是龙虾三少的关门弟子୧(๑•̀◡•́๑)૭
(哇,好厉害啊,关门弟子哎!(o)/~)
没错,我每次听他课都会把宿舍门关上O(∩_∩)O
(……-_-||……)
我又看了一遍龙虾三少的《Java电商秒杀系统》
现记录一下,原因是视频时间有点长,保存成文字+截图或许会节省一点时间,防止再次大量重复劳动。

第2章·基础项目搭建的基本流程:
构建Maven项目—>引入SpringBoot依赖—>接入Mybatis

正文

构建Maven项目:

打开IDEA,new一个新坑

1、选择maven-archetype-quickstart 这种方式创建出来的是以一种jar包的方式提供对外统一的输出

2、点完next之后,会让填写GAV

具体填写什么,可以参考阿里的开发手册

3、接下来一个界面,是找本地安装的Maven,如果以前用IDEA搭建过Maven,直接点next,没有搭建过的,选择一下本地安装Maven路径即可

4、最后,给项目起个名字,然后指定保存路径,就可以finish了

finish之后,稍等片刻,就会看到控制台提示Maven搭建完成

5、手动标记,Mark Directory as Sources/Test Root
现在我们可以看看左侧project,Maven都帮我们自动创建了哪些东西
可以看到浅蓝色是代表source目录,绿色代表test目录

如果不是对应的颜色,需要手动Mark一下。如何手动mark,看下一步示范
6、手动new Directory:resources ,Mark Directory as Resources Root
现在还缺少一个resource目录。
我们可以右键main,new,Directory,新建一个目录,起名为resources

然后右键resources,Mark Directory as ,Resources Root

IDEA就是这样构建的,如果你不Mark对,那么它就找source、test、resources的时候就找不到,所以必须Mark Directory as 对应的类别
mark完之后,整体目录结构长下面这个样子,这就是一个Maven工程具体的样子了。

7、run App ,测试能否出现 Hello World

可以看到控制台输出Hello World,就代表这个Maven框架搭建成功了

构建Maven框架总结

想当年Maven是服务于美国军方的,虽然不知道那个Maven和咱们现在这个Maven到底是不是同一个东西,但不管怎么说,一个听上去很高大上的框架,搭建起来并不费劲,只需要七步。


引入SpringBoot依赖:

哈哈,龙虾哥特意强调了一下,想要集成一个项目,首先要做的不是去百度怎么用,而应该去看它的官方文档!(道理就是:百度到的东西实在是良莠不齐,有那甄选的时间,不如一步到位,直接去正确的地方找找看)
1、上SpringBoot官网
当然,并不是一点也不用百度,找SpringBoot的官网就需要百度一下,我们百度要的链接是:
springboot官网
进去点击Guides下面的一个连接:搭建一个RESTful的web服务器

2、pom.xml文件中指定并引入spring-boot-starter-web的<dependency>
需要引入下面两个

<!-- 1、引入的第一个:导入springmvc、spring-aop之类的jar包 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent><!-- 2、引入的第二个:导入一些web相关的jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

其中 是全局目录project的子目录
是全局目录project的子目录的子目录

引入这俩之后,官网就可以关了,想看的也可以耐下性子细看看官网教程都讲了啥。

3、Reimport All Maven Projects ,下载需要的jar包

按说,第一次修改Maven的pom.xml的时候IDEA会弹出一个小框框

选择Enable Auto Import,之后在pom.xml中每次引入一下,Maven都会自动进行下载并配置。
如果你那里没有弹出Enable Auto import也没有配置IDEA的Maven为自动引入的话,也可以手动点IDEA右侧边栏的Maven

可以直接点Reimport按钮,也可以先右键,再进行Reimport

如果想知道每次引入都import了哪些内容,可以再每次引入的时候,关注一下左侧目录树的External Libraries的变化

4、测试SpringBoot引入成功与否
App.java中添加@EnableAutoConfiguration注解
main方法中添加SpringApplication.run(App.class,args);

5、run App ,浏览器localhost:8080,测试Tomcat是否启动
run的时候,可以看到控制台不止输出了Hello World

打开浏览器,地址栏里输入http://localhost:8080/
具体的端口号可以看SpringBoot的日志
如果出现下面页面就代表引入SpringBoot成功了

引入SpringBoot总结

本来Spring就够高大上了,现在又来个SpringBoot,听上去更加高深莫测,其实如果不深究原理,单纯的引入一下,并不难,5步就够了。


SpringMVC+RESTful的使用

我们搭建后台服务的整体框架是SpringMVC,设计风格是RESTful,下面就来学学SpringMVC,RESTful

1、@RestController注解与@RequestMapping注解
@RestController,作用于类上,用于声明这是一个Controller,也就是MVC中的C层
@RequestMapping("/home"),作用于类内具体方法上,对相应的URL请求进行映射
现在我们的App.java长下面这个样子

2、重新run App,浏览器localhost:8080/home,测试SpringMVC效果

SpringMVC+RESTful的使用总结

SpringBoot是Spring家族的一个集合,集成了Spring,SpringMVC等等,而Spring家族框架的特色就是使用注解开发。

RESTful就是一种访问资源的风格,也就是浏览器地址栏输入的风格,目前我知道的风格有三种
1. 原始风格:http://localhost:8080/home.html或者http://localhost:8080/home.jsp ,带后缀名
2. RPC风格(Doubble):http://localhost:8080/print.home ,带方法调用
3. RESTful风格(SpringMVC):http://localhost:8080/home ,啥都不带,最多会有?parm=value加个参数之类的
这就是我对RESTful的浅显理解。


接入Mybatis

1、新建application.properties配置文件
一开始的时候,我们创建并mark了resources目录,现在在其中new 一个file,起名为application.properties
创建好之后,在IDEA中就会自动显示一个绿叶+按钮的小图标,表示这是SpringBoot的配置文件

我们可以写一行server.port = 8090,然后重新运行
可以发现控制台输出有了变化

当然,对应浏览器地址栏也要进行修改

2、pom.xml中引入mysql-connector-java、druid(德鲁伊)、mybatis-spring-boot-starter
前面我们在<dependencies>中已经引入过SpringBoot的starter-web的相关jar包了,这次一下引入三个

<!--3、引入的第三个:java连接mysql的connector的jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!--4、引入的第四个:阿里的德鲁伊连接池,管理mysql连接的jar包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.3</version>
</dependency>
<!--5、引入的第五个:Mybatis相关的jar包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>

还是,如果你想看到每个引入后的具体变化,可以一个一个的引入,同时观察左侧的External Libraries
全部引入完后,External Libraries已经今非昔比了

3、引入mybatis相关插件mybatis-generator
mybatis和hibernate一样,都是持久层框架,目的就是代替人工来自动映射生成数据库对象
上面引入的都是一些和mysql相关的,下面需要引入一个真正和mybatis相关的generator插件
代码有点多:

 <!-- 6、第六个引入的:mybatis的相关插件 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><!-- 注意这里plugin下的dependencies,Maven是无法识别的 --><!-- 比较骚的操作就是,先把下面的dependency放到外面project下面的dependencies --><!-- 然后去右侧工具条Maven执行Reimport,最后再把这些dependency放回来,再进行Reimport,来导入mybatis的插件 --><dependencies><!-- 7、 第七个引入的:mybatis生成器的core相关jar包  --><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.5</version></dependency><!-- 8、 在mybatis的插件里再引入一遍mysql的连接jar包 --><!-- 上面曾经引入过,是服务端java代码与mysql连接 --><!-- 这里再次声明,是mybatis插件和mysql连接 --><!-- 虽说老师这么写了, 但我个人觉得没必要重复引入jar包啊 --><!-- 老师给出的解释是:要生成的mybatis插件,需要借助相关的依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.41</version></dependency></dependencies><!-- executions : 执行--><!-- 9、配置mybatis generator 插件的执行阶段phase以及执行目的goal --><executions><execution><id>mybatis generator</id><phase>package</phase><goals><goal>generate</goal></goals></execution></executions><!-- 10、mybatis generator 插件的相关属性配置 --><configuration><!-- verbose : 冗余的 , 允许移动生成的文件 --><verbose>true</verbose><!-- 新生成的覆盖旧生成的,实际工作中慎用 --><overwrite>true</overwrite><!-- 指定mybatis配置文件的路径 --><configurationFile>src/main/resources/mybatis-generator.xml</configurationFile></configuration></plugin>

4、为该项目指定mybatis的映射路径已经文件后缀名
在application.properties文件中添加一行配置:
mybatis.mapper-locations=classpath:mapping/*.xml
既然这样指定了,对应我们就该在resources目录下新建一个目录名为mapping

5、设计并创建数据库
我给数据库起名为login_db,这个数据库比较简单,只有两张表user_info 和 user_password

/*
Navicat MySQL Data TransferSource Server         : localhost
Source Server Version : 50724
Source Host           : localhost:3306
Source Database       : login_dbTarget Server Type    : MYSQL
Target Server Version : 50724
File Encoding         : 65001Date: 2019-05-31 14:31:32
*/SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for `user_info`
-- ----------------------------
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',`name` varchar(64) NOT NULL DEFAULT '' COMMENT '用户姓名',`gender` tinyint(4) NOT NULL DEFAULT '1' COMMENT '1代表男性,2代表女性',`age` int(11) NOT NULL DEFAULT '0' COMMENT '用户年龄',`telphone` varchar(255) NOT NULL DEFAULT '' COMMENT '用户登录的手机号码,用于接收短信',`register_mode` varchar(255) NOT NULL DEFAULT '' COMMENT '注册方式:byphone,bywechat,byalipay,byqq',`third_part_id` varchar(64) NOT NULL DEFAULT '' COMMENT '第三方登录的id',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of user_info
-- ------------------------------ ----------------------------
-- Table structure for `user_password`
-- ----------------------------
DROP TABLE IF EXISTS `user_password`;
CREATE TABLE `user_password` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '密码表的冗余字段,有利于查询索引',`encrypt` varchar(255) NOT NULL DEFAULT '' COMMENT '用户密码加密后的MD5值',`user_id` int(11) NOT NULL DEFAULT '0' COMMENT '外键,连接user_info',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of user_password
-- ----------------------------

6、创建并修改mybatis-generator.xml文件
有了数据库之后,就该将数据库表映射为对象了,需要下面两步:
1、创建
mybatis官网给出的mybatis-generator.xml文件模板
我们复制一份,在resources目录下新建一个mybatis-generator.xml进行粘贴
有可能出现下面这样一串红字,是因为我们本地没有这个dtd文件,电脑联网的情况下,点击左侧小灯泡
选择Fetch external resource ,IDEA就会自动进行下载

2、修改
为了保证文件的完整性,我没有删掉注释,因此看上去有点多,但是如果把没用的注释都删掉,其实仅仅34行代码。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!--<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />--><context id="DB2Tables" targetRuntime="MyBatis3"><!--<jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver"--><!--connectionURL="jdbc:db2:TEST"--><!--userId="db2admin"--><!--password="db2admin">--><!--</jdbcConnection>--><!-- 数据库链接地址及连接用户密码 --><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://127.0.0.1:3306/login_db"userId="root"password="123456"></jdbcConnection><!--<javaTypeResolver >--><!--<property name="forceBigDecimals" value="false" />--><!--</javaTypeResolver>--><!-- 生成dataobject类存放位置 --><!-- 意思就是每个数据库表映射的entity java类的位置 --><!-- 老外真有意思,先说包名targetPackage,然后再说相对路径targetProject --><javaModelGenerator targetPackage="edu.heuet.android.logindemo.dataobject" targetProject="src/main/java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><!-- 生成数据库映射文件存放位置 --><!-- 意思就是mybatis到底是按照什么逻辑进行mysql数据库表与java对象之间映射--><sqlMapGenerator targetPackage="mapping"  targetProject="src/main/resources"><property name="enableSubPackages" value="true" /></sqlMapGenerator><!-- 生成DAO类存放位置 --><!-- DAO类里持有dataobject的引用,可以进行相应model的操作 --><javaClientGenerator type="XMLMAPPER" targetPackage="edu.heuet.android.logindemo.dao"  targetProject="src/main/java"><property name="enableSubPackages" value="true" /></javaClientGenerator><!--<table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >--><!--<property name="useActualColumnNames" value="true"/>--><!--<generatedKey column="ID" sqlStatement="DB2" identity="true" />--><!--<columnOverride column="DATE_FIELD" property="startDate" />--><!--<ignoreColumn column="FRED" />--><!--<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />--><!--</table>--><!-- 生成mysql对应表的DAO文件,并指定特殊的生成方式,去掉自动生成的复杂查询语句 --><!-- 更好的 方式是手写发杂查询 --><table tableName="user_info" domainObjectName="UserDO"enableCountByExample="false"enableUpdateByExample="false"enableDeleteByExample="false"enableSelectByExample="false"selectByExampleQueryId="false"/><table tableName="user_password" domainObjectName="UserPasswordDO"enableCountByExample="false"enableUpdateByExample="false"enableDeleteByExample="false"enableSelectByExample="false"selectByExampleQueryId="false"/></context>
</generatorConfiguration>

可以看一下我们现在目录的结构,其中dao、dataobject、mapping都是在写上面文件的过程中手动创建的。

7、运行Mybatis插件,自动生成相关文件
配置运行mybatis插件

点+号,新建一个Maven项目的运行命令

填写Maven待执行的命令 mybatis-generator:generate

然后,执行

执行结束,可以看到控制台对应输出

现在目录结构如下,可以看到mybatis帮我们生成了8个文件,并且都放到了指定的目录

其中有两个带Example的文件是没用的,可以直接删除。
最终目录结构如下


至此,数据库表就映射成了Java类、并且自动生成了DAO类和mapping文件

8、application.properties中配置SpringBoot项目数据源
配置完成后文件全部内容为

# 该项目的 Tomcat 启动端口号
server.port=8090# 为该项目指定mybaits映射文件
mybatis.mapper-locations=classpath:mapping/*.xml# 为该项目指定数据源
spring.datasource.name=login_db
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/login_db
spring.datasource.username=root
spring.datasource.password=123456# 使用druid数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

9、编写代码,运行测试
App.java中注释掉@EnableAutoConfiguration注解,加入@SpringBootApplication(scanBasePackages={"…"})注解,老师说这两个注解有异曲同工之妙,具体怎么异曲同工我也没理解。加入@MapperScan("…")和@Autowired 注解,这两个注解是搭配着使用的,SpringBoot会自动扫描包进行自动装配Autowired
源代码中有一处红线,是因为IDEA执行Autowired编译检查导致的,不影响运行

启动之前,一定一定一定要看清绿色三角按钮旁边是不是App

比如我就是启动的这个,导致启动失败。另外,如果在公司一不小心执行了这个,有可能带来灾难性后果。比如覆盖掉原来的表结构,查询语句等等

启动,浏览器localhost:8090/home ,测试

因为我们手动执行了

UserDOuserDO=userDOMapper.selectByPrimaryKey(1);

而现在我们的数据库还是空的,所以会显示用户信息不存在!
这证明了我们运行是没问题的。

接入mybatis总结

这一步比较繁琐,其实都可以写成一本书了。但是,这些都是见过一遍就能记住的活,
也不涉及多么多么难的技术,所以我一口气,把内容都写到一个文章里了。

【JavaEE】电商秒杀项目·第2章·基础项目搭建相关推荐

  1. 第一章 电商秒杀商品回顾

    第一章 电商秒杀商品回顾 项目环境及技术 学习环境: Intellij IDEA 2021.3 阿里云ECS或本地Linux虚拟机,操作系统 centos 7.6 MySQL5.6数据库,Redis4 ...

  2. 慕课网,乐字节 Java电商秒杀项目

    慕课网.乐字节Java电商秒杀项目 技术点介绍: 前端:Thymeleaf,Bootstrap,Jquerry 后端:SpringBoot,MybatisPlus,Lombok 中间件:RabbitM ...

  3. 电商秒杀 Springboot + Redis +RocketMq +Mysql

    项目地址 https://gitee.com/noah2021/miaosha 转载,亲测可用! 测试用例 在下订单之前需要先发布对应的商品用于在Redis中生成口令避免大量请求导致服务器崩溃~~ 发 ...

  4. Java电商秒杀系统性能优化(一)——电商秒杀系统框架回顾

    电商秒杀系统框架回顾 项目简介 外部依赖 框架回顾 项目要点 项目中存在的问题 小结 课程是免费的,课程地址如下:SpringBoot搭建电商秒杀项目,课程真的很棒,作者的思路很清晰,建议各位读者可以 ...

  5. 电商秒杀系统相关实现

    前言 本文主要就电商秒杀系统所涉及的相关技术进行探究,相关Demo地址如下: 个人实现版本:https://github.com/MrSorrow/seckill Github Star较高的版本,第 ...

  6. Java实现电商秒杀系统-jseckill

    1.前言 什么是秒杀?双十一,双十二天猫京东优惠大促销,大量的用户去抢夺少量的商品,在段时间内抢完,称之为秒杀.典型的高并发应用场景. 2.简介 电商秒杀系统,要求并发量特别大,用Java实现秒杀系统 ...

  7. 电商库存锁_解密 Redis 助力双 11 背后电商秒杀系统

    作者:AlibabaCloud 来源:https://github.com/AlibabaCloudDocs/kvstore/blob/master/cn.zh-CN/最佳实践/使用%20Redis% ...

  8. java教程——电商秒杀系统介绍

    电商秒杀系统实战 QQ 1285575001 Wechat M010527 技术交流 QQ群599020441 纪年科技aming 高并发 缓存 异步化 前后端分离:MVVM框架 原生框架:jQ Bo ...

  9. Web系统大规模并发——电商秒杀与抢购

    Web系统大规模并发--电商秒杀与抢购 allowtransparency="true" frameborder="0" scrolling="no& ...

  10. 徐汉彬:Web系统大规模并发——电商秒杀与抢购

    摘要:电商的秒杀和抢购,从技术的角度来说,会对Web系统产生巨大的考验.本期<问底>,徐汉彬将带大家关注秒杀和抢购的技术实现和优化,同时,从技术层面揭开,为什么我们总是不容易抢到火车票的原 ...

最新文章

  1. python 自动补全函数括号_Python学习笔记(二)
  2. ccf a类期刊_喜报:我院2篇学生论文被CCFA类会议AAAI(2020)接收
  3. nginx A/B 灰色发布
  4. linux 编译链接图
  5. 关系型数据库设计规则
  6. [1.1]XMI 与UML结合开发企业应用中业务模型
  7. C++踩坑之连接mysql数据库
  8. 前端学习(1983)vue之电商管理系统电商系统之清空表格数据
  9. idea搭建web项目及tomcat部署总结
  10. 用完全平方数填满指定区域(洛谷P2666题题解,Java语言描述)
  11. linux暂时不能域名解析,Kali Linux中暂时不能解析域名
  12. git实现审核功能_使用 Pull Request 功能进行代码审查
  13. UPC 条形码的介绍及计算校验码
  14. GridView的DataFormatString格式化字符串
  15. tk芯片智能机刷机方法_MTK芯片手机刷机详细步骤及注意事项
  16. 使用 openocd 调试 STM32F103
  17. c语言next函数定义,c语言的数据结构中,next是如何指向下一个元素的?
  18. Python基础知识-pycharm版-02
  19. JAVA在线教育视频点播学习系统毕业设计 开题报告
  20. Jquery基本教程(背还是要背的)

热门文章

  1. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
  2. 【JAVA今法修真】 第七章 洞天风云起,索引混乱平
  3. 电力系统潮流计算中的导纳矩阵计算,matlab源程序
  4. android app跳转淘宝客户端店铺
  5. Android Framework实战开发-binder通信常见(oneway,in,out,inout)元素介绍及binder双向通信的实现
  6. java定时器Scheduled,可动态设置定时器执行时间
  7. 如何自定义 conventional-changelog
  8. 基于微信小程序音乐播放器的设计与实现毕业设计源码271156
  9. 小说阅读器,记录上次阅读位子。
  10. cv2颜色空间(2)——交互式的颜色检测