SpringBoot网上商城项目
一、项目环境搭建
1.项目分析
1、项目功能:登录,注册,热销商品,用户管理(密码,个人信息,头像,收货地址),购物车(展示,增加,删除),订单模块
2.开发顺序:注册,登录,用户管理,购物车,商品,订单模块
3.某一个模块的开发顺序:
持久层开发:依据前端页面的需求规划相关的SQL语句,以及进行配置
业务层开发:核心功能控制,业务操作以及异常的处理
控制层开发:接收请求,处理响应
前端开发:JS,Query,AJAX这些技术来连接后台
2.项目基本环境
- JDK:1.8版本及以上
- maven:需要配置到idea,3.6.1版本及以上
- 数据库:MariaDB,MySQL,要求是5.1版本及以上
- 开发的平台:idea开发
- 项目名称:store,表示商城
- 结构:com.cy.store
- 资源文件:resources文件夹下(static,templates)
- 单元测试:test.com.cy.store
二、用户注册功能
1.创建数据表
1.t_user
CREATE TABLE t_user (
uid INT AUTO_INCREMENT COMMENT '用户id',
username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',
`password` CHAR(32) NOT NULL COMMENT '密码',
salt CHAR(36) COMMENT '盐值',
phone VARCHAR(20) COMMENT '电话号码',
email VARCHAR(30) COMMENT '电子邮箱',
gender INT COMMENT '性别:0-女,1-男',
avatar VARCHAR(50) COMMENT '头像',
is_delete INT COMMENT '是否删除:0-未删除,1-已删除',
created_user VARCHAR(20) COMMENT '日志-创建人',
created_time DATETIME COMMENT '日志-创建时间',
modified_user VARCHAR(20) COMMENT '日志-最后修改执行人',
modified_time DATETIME COMMENT '日志-最后修改时间',
PRIMARY KEY (uid)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
2.创建用户实体类
1.通过表结构提取表公共字段,存放在实体类的基类中,取名BaseEntity。
@Data
@AllArgsConstructor
@NoArgsConstructor
//实体类基类,只要是实体类,要满足几个约束,实现接口Serializable,序列化
public class BaseEntity implements Serializable {
//把下滑线改成大写
// private String created_user;
private String createdUser;
private Date createdTime;
private String modifiedUser;
private Date modifiedTime;
}
2.创建用户的实体类User,需要继承BaseEntity
@NoArgsConstructor
@AllArgsConstructor
@Data
//用户实体类 SpringBoot 约定大于配置
public class User extends BaseEntity implements Serializable {
private Integer uid;
private String username;
private String password;
private String salt;
private String phone;
private String email;
private Integer gender;
private String avatar;
private Integer isDelete;
}
3.持久层开发
1.规划需要执行的SQL语句
用户注册功能,相当于数据的插入操作
insert into t_user(username,password,....) values (值列表)
在用户的注册时首先要查询当前用户名是否存在,如果存在则不能在注册
select * from t_user where username=?
2.设计接口和方法
1.在项目的目录结构创建一个mapper,创建一个UserMapper接口,在接口中定义SQL语句抽象方法
@Mapper
public interface UserMapper {
/*
* 插入用户的数据
* user : 用户的数据
* @return 受影响的行数(增删改都受影响的行数作为返回值)
* */
Integer insert(User user);
/*
* 根据用户名来查询用户的数据
* username : 用户名
* return : 如果找到对应的用户则返回用户的数据,没有找到则返回null
* */
User findByUsername(String username);
}
2.在pom.xml中添加
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
3.在启动类配置mapper接口文件的位置
@MapperScan("com.cy.store.mapper")
3.编写映射
1.在mapper包下创建接口对应的映射文件,遵循和接口的名称一致,创建一个UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.scy.store.mapper.UserMapper">
</mapper>
2.在application开启驼峰命名法,就不需要自己定义映射规则
mybatis.configuration.map-underscore-to-camel-case=true
2.配置接口中的方法对应SQl语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace属性:用于指定当前的映射文件和那个接口进行映射,需要指定接口的文件路径-->
<mapper namespace="com.cy.store.mapper.UserMapper">
<!-- id属性:表示映射的接口中方法的名称,直接用标签的内容来编写sql语句,这里的insert 对应UserMapper中的insert方法
useGeneratedKeys="true" :打开自增 keyProperty="uid“ 让uid进行自增 -->
<insert id="insert" useGeneratedKeys="true" keyProperty="uid">
insert into t_user
(username, password, salt, phone, email, gender, avatar, is_delete,created_user, created_time, modified_user, modified_time)
values
(#{username}, #{password}, #{salt}, #{phone}, #{email}, #{gender}, #{avatar}, #{isDelete}, #{createdUser}, #{createdTime}, #{modifiedUser}, #{modifiedTime})
</insert>
<select id="findByUsername" resultType="com.cy.store.entity.User">
select * from t_user where username = #{username}
</select>
</mapper>
3.单元测试
在test下store创建一个mapper包,在mapper包下创建一个UserMapperTests类
@SpringBootTest
public class UserMapperTests {
@Autowired
private UserMapper userMapper;
/*
单元测试方法:
* 1.必须被@Test注解修饰
* 2.返回值类型必须是void
* 3.方法的参数列表不指定任何类型
* 4.方法的访问修饰符必须是public*/
@Test
public void insert(){
User user=new User();
user.setUsername("tom");
user.setPassword("123");
Integer rows = userMapper.insert(user);
System.out.