SSH+SpringBoot项目构建
目录:
SSH+SpringBoot项目构建
一、创建SpringBoot工程
1. 配置pom.xml,导入Maven,常用如下: 2. application.properties常用配置 3. 创建HelloController进行测试,成功即进行下一步一、创建SpringBoot工程
注意模板的jdk版本,以及resource文件夹是否被标识为资源文件
1. 配置pom.xml,导入Maven,常用如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<!-- 公司的版本 -->
<!-- <version>2.3.3.RELEASE</version> -->
<relativePath/>
</parent>
<!-- SpringBoot整合web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot集成Junit -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- Jpa,Hibernate的导入 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- lombox -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
2. application.properties常用配置
# http://localhost:8080/sshTest
server.port=8080
server.servlet.context-path=/sshTest
# 设置mysql的四个参数
# 可单独用个beans.xml文件配置,然后用@ImportResource("classpath:beans.xml")导入
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/takessssss?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
#hibernate语句打印
#控制台是否打印
spring.jpa.properties.hibernate.show_sql=true
#格式化sql语句
spring.jpa.properties.hibernate.format_sql=true
#指出是什么操作生成了该语句
spring.jpa.properties.hibernate.use_sql_comments=true
3. 创建HelloController进行测试,成功即进行下一步
二、编写Model
// lombok
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
// Jpa规范,必须标识这是个entity,指向对应table,两者关联。
@Entity
@Table(name = "t_user")
public class User {
// Jpa规范,必须有一个唯一标识标识,此注解标识标识成员属性id为唯一标识。
@Id
// Jpa规范,唯一标识必须有增长策略
@GeneratedValue(generator = "t_user",strategy = GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
// 表的字段与类的成员名字不相同时,用@Column注解可将关系对应上
// 经测试,成员若是eMail,会自动对应表的e_mail.
@Column(name = "e_mail")
private String email;
}
上文提到的增长策略,这里详细说明:
-
AUTO
可以是identity类型,或者sequence类型或者table类型,取决于不同的底层数据库.
-
TABLE -
使用一个特定的数据库表格来保存主键。这种策略的好处就是不依赖于外部环境和数据库的具体实现,在不同数据库间可以很容易的进行移植,但由于其不能充分利用数据库的特性,所以不会优先使用
-
IDENTITY
主键由数据库自动生成(前提是字段有设置自动增长)
-
SEQUENCE
在某些数据库中,不支持主键自增长,比如Oracle。该策略一般与另外一个注解一起使用@SequenceGenerator,@SequenceGenerator注解指定了生成主键的序列。然后JPA会根据注解内容创建一个序列(或使用一个现有的序列)。如果不指定序列,则会自动生成一个序列SEQ_GEN_SEQUENCE。
三、编写Dao层和Service层
1. Dao层
实现Dao层的方式有很多种,本文使用无需额外导入依赖的基于Spring Data Jpa的接口,常用的有两个:
CrudRepository
JpaRepository
二者有继承关系,用法也基本一样,本文以父类CrudRepository
为例。只需要继承JpaRepository接口即可,泛型分别是对应的pojo以及它唯一标识的数据类型
@Repository
public interface UserDaoCrud extends CrudRepository<User,Integer> {
}
2. Service层
service层实现具体业务,可调用CrudRepository
的内置方法有:
// 保存对象
<S extends T> S save(S var1);
// 将集合中的对象批量保存
<S extends T> Iterable<S> saveAll(Iterable<S> var1);
// 根据id查询指定对象,Optional
Optional<T> findById(ID var1);
// 是否存在此id
boolean existsById(ID var1);
// 查询所有
Iterable<T> findAll();
//根据id集合批量查询
Iterable<T> findAllById(Iterable<ID> var1);
// 查询此表总条数
long count();
// 根据id删除指定数据
void deleteById(ID var1);
// 删除数据(实测也是根据id,不会根据其他条件)
void delete(T var1);
// 根据集合内对象的id,批量删除数据
void deleteAll(Iterable<? extends T> var1);
// 清空表
void deleteAll();
JpaRepository与其大同小异,不同的有两点:
-
JpaRepository
有flush等机制,详情请参考文件Spring Data/Jpa // TODO -lyx -
JpaRepository
中deleteAllInBatch()
与继承父类的deleteAll()
;deleteInBatch()
与继承父类的deleteAll(Iterable<? extends T> var1)
的区别就是,后者是一条一条Sql查出来,然后循环去删除,前者Batch是一条Sql语句,所以性能更高。
Service例子:
@Service
// 在类上声明,开启所有public权限方法的事务处理
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDaoCrud userDaoCrud;
@Override
public void save(User entity) {
userDaoCrud.save(entity);
}
}
四、Controller编写
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/toRegister")
public void register(User user, HttpServletResponse response) throws IOException {
userService.save(user);
// 随便跳个网页
response.sendRedirect("http://www.baidu.com");
}
}
然后输入网址:http://localhost:8080/sshTest/user/toRegister?username=admin&password=123 ,
数据库中的结果: