基于SPB的简单CURD项目(回顾)
SpringBoot项目(集合Thymeleaf、MyBatis等)
一、项目构建
新建SpringBoot项目
勾选LomBok、Spring Web、Thymeleaf、MySQL、Druid等
·需要额外引入的包有如下(/pom.xml):
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.19</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<!--
<version>可附加版本号 如5.1.38</version>
-->
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
→ 完成后,更新maven import
·配置项(/src/main/resources/application.properties)设置 //*.Properties 注释需在段首
server.port=8080
server.servlet.context-path=/ems
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ems_thymeleaf?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
mybatis.mapper-locations=classpath:/com/example/mapper/*.xml
#对应实体类
mybatis.type-aliases-package=com.example.entity
#Thymeleaf基础配置
spring.resources.static-locations=classpath:/templates/,classpath:/static/
·项目目录结构构建
EmsThymeleaf (Project-Model)
├── src
│ └── main
│ ├── java
│ │ ├── com
│ │ │ ├── example
│ │ │ │ ├── controller
│ │ │ │ ├── dao
│ │ │ │ ├── entity
│ │ │ │ └── service
│ │ │ └── MainApplication.java #主程序类,入口
│ └── resources
│ ├── com
│ │ └── example
│ │ ├── mapper【注1】
│ │ └── sql #数据库初始化SQL语句【注2】
│ ├── static #静态资源(css、imgs)
│ │ ├── assets
│ │ └── imgs
│ ├── templates #html文件(Thymeleaf模板化)
│ │ └── index.html
│ └── application.properties #配置项文件
└── pom.xml
注1:/src/main/resources 中增加目录结构,需以 "com/example/mapper"形式创建
数据库设计
-- database:ems_thymeleaf
-- table: t_user (id,username,realname,password,gender);
-- table: t_emp (id,name,salary.ageb,birth);
-- end.
# use ems_thymeleaf;
use ems_thymeleaf;
# 注2:使用此文件进行数据库初始化构建
# Create table:
create table t_user(
id varchar(40) primary key,
username varchar(40),
realname varchar(40),
password varchar(40),
gerder varchar(4)
);
create table t_emp(
id varchar(40) primary key,
name varchar(40),
salary double(7,2),
age int(3),
birth date
);
Thymeleaf相关
通过下面的 application.properties设置,结合Controller控制器,进行模板渲染访问
#application.properties
#Thymeleaf基础配置
spring.resources.static-locations=classpath:/templates/,classpath:/static/
<!-- login.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thyemleaf.org">
<head>
<title>login</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" th:href="@{css/style.css}"/>
</head>
……
</html>
/**
* ~/controller/WebPageController.java
* Controller 通过控制器,渲染Thymeleaf模板页面,进行访问
*/
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class WebPageController {
//主页跳转:
@GetMapping("/")
public String toIndex(){
return "login";
}
}
其中,页面模板文件结构如下:
resources
|-- static
|-- css
|-- style.css
|-- img
|--templates
|-- login.html
通过以上设置,在访问 “~/”时,控制器自动跳转到经Thymeleaf渲染过的login.html页面。
二、程序设计相关
(〇)一些基本说明
关于注解
关于Lombok注解相关
Lombok的基本使用 https://www.jianshu.com/p/2543c71a8e45
开发实用工具类(视频P2、P3:60mins) https://www.bilibili.com/video/BV1gg4y1v7Mi
LomBok全原理简单介绍 https://blog.csdn.net/weixin_38378034/article/details/112480908
SpringMVC/MVC设计模式相关
SpringMVC 讲解:https://www.bilibili.com/video/BV1n4411R7bL
主程序入口,添加MapperScan路径
@SpringBootApplication
@MapperScan("com.example.dao")
public class MainApplication{
public static void main(String[] args){
SppringApplication.run(MainApplication.class, args);
}
}
关于Mabits映射文件中的ParameterType和ResultType
parameterType:指定输入参数类型,mybatis从输入对象中获取参数值拼接在sql中。
resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据*,则分别进行映射,并把对象放到容器List*中

更多示例可参考 https://blog.csdn.net/qq_34598667/article/details/83963934
(一)验证码生成
(二)功能模块
用户注册
以用户注册模块为例
a) com.example.entity.User.java [src]
//User.java
//Entity::User
//参考数据库表`t_user`结构,建立实体
//使用Lombok做注解
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User{
private String id;
private String username;
private String realname;
private String password;
private String gender;
}
b) com.example.dao.UserDAO [src]
public interface UserDAO{
void regist(User user);
}
c) com.example.mapper.UserDAOMapper.xml [resources]
<!--以用户注册为例-->
<insert id="regist" parameterType="User">
insert into t_user values(#{id},#{username},#{realname},#{password},#{gender})
</insert>
<!-- #values内字段须与数据库内完全一致!
-->
c#) 关于插入非空字段
INSERT INTO t_user
SELECT 'admin', 'password' FROM DUAL
WHERE NOT EXISTS (SELECT username FROM t_user WHERE username = 'admin');
#也可以用count(*)方法判断
## insert into t_user select #{username},#{password} from dual WHERE NOT EXISTS (SELECT username FROM t_user WHERE username = #{username})
d-1) com.example.service.UserService.java [src]
//用户相关功能(如登录、注册等)均做在UserService下,表示为不同方法
public interface UserService{
void regist(User user);
}
d-2) com.example.service.UserServiceImpl.java [src]
@Service //工厂管理
@Transactional //控制事务
public class UserServiceImpl implements UserService{
@Autowired
private UserDAO userDAO; //注入DAO
@Override
public void regist(User user){
//处理业务,设置id主键
user.setId(UUID.ramdomUUID().toString()); //User.java中Lombok了getter和setter方法?
userDAO.regist(user);
}
}
UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法。UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的,是由一个十六位的数字组成,表现出来的 形式。由以下几部分的组合:
1、当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不 同,其余相同);
2、时钟序列;
3、全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。
e) com.example.controller.UserController.java [src]
@Controller
@RequestMapping("/user") //设置命名空间
public class UserController{
@Autowired
private UserService userService;
//用户注册功能方法实现
@PostMapping("/regist")
public String regist(User user){
userService.regist(user);
return "redirect:/"; //当注册成功,跳转到主页面(自定义)
}
}
注:为避免乱码,数据库链接需指定 characterEncoding=utf-8
用户登录
a) UserDAO.java [src]
public interface UserDAO{
void login(@param("username") String username, @Param("password") String password); //对登录的username和password进行绑定
}
b) UserDAOMapper.xml [resources]
<mapper namespace="com.example.dao.UserDAO">
<!--登录-->
<select id="login" resultType="User">
select id,username,realname,password,gender from t_user
where username = #{username} and password = #{password}
</select>
</mapper>
c-1) UserService.java [src]
public interface UserService(User user){
User login(String username, String password);
}
c-2) UserServiceImpl.java [src]
@Service
@Transactional
public class UserServiceImpl implements UserService{
@Autowired
private UserDAO userDAO;
@Override
public User login(String username, String password){
return userDAO.login(username,password); //返回User对象
}
}
d) UserController.java [src]
@Controller
@RequestMapping("/User")
public class UserController{
@Autowired
private UserService userService;
//登录方法
@PostMapping("/login")
public String login(String username, String password){
User login = userService.login(username,password);
if(login != null){
//跳转到 登录成功页面
return "redirect:/success";
}else{
//跳转到 登录页面
return "redirect:/";
}
}
}
用户查询
User类已定义;
a) UserDAO.java
public interface UserDAO{
List<User> find(@Param("username") String username);
//用于绑定对象属性值
}
b) UserDAOMapper.xml
<mapper namespace="com.example.dao.User">
<select id="find"resultType="User">
select username,…… from ……
</select>
</mapper>
c) UserService接口写List
d) UserServiceImpl.java
@Service
@Transactional
public class UserServiceImpl implements UserService{
@Autowired
private UserDAO userDAO;
@Override
@Transactional(propagation = propagation.SUPPORTS)
public List<User> find(String username){
return userDAO.find(username);
}
}
e) UserController.java
//在原controller基础上,增加find方法
@GetMapping("/find")
public String find(String username){
//注:获取到的 List<User> users = userService.find(username);
//添加 model.addAttribute("users",users); //前者"users"为attributeName。
return Stringvalue;
}
f) webpage .html文件
<tr class="row" th:each="user:${users}">
<td>
<span th:text="${user.username}" />
……
<span th:text="${dates.format(user.birthday,'yyyy-MM-dd')}" />
</td>
</tr>
RestController、批量对象数组插入
@RestController
@RequestMapping("/User")
public class UserRstController {
@Autowired
private UserService userService;
//查询所有
@GetMapping("/findAll")
public List<User> findAll(){
System.out.println("findall start");
List<User> users = userService.findall();
System.out.println("执行成功! ");
return users;
}
//批量注册
@PostMapping("/imp")
public String regist2(@RequestBody List<User> users){
System.out.println("imp:::::::");
for(User usr : users) {
userService.regist(usr);
System.out.println(usr.getUsername() + "\t");
}
System.out.println("执行成功! ");
return "BatchImp ok";
}
}
注:@RequestBody 传递对象数组
项目: 基于SPB的Web 数据查询
引用参考
https://cnblogs.com/lin02/p/11648899.html springboot实现数据库数据导出生成Excel报表
https://cnblogs.com/jc1997/p/10946555.html springBoot 整合 mybatis+Oracle
https://www.hangge.com/blog/cache/detail_2825.html SpringBoot - 整合并操作Oracle数据库教程

浙公网安备 33010602011771号