基于SSH+SpringBoot的项目构建

SSH+SpringBoot项目构建

目录:

SSH+SpringBoot项目构建
一、创建SpringBoot工程1. 配置pom.xml,导入Maven,常用如下:2. application.properties常用配置3. 创建HelloController进行测试,成功即进行下一步
二、编写Model
三、编写Dao层和Service层1. Dao层2. Service层
四、Controller编写

一、创建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的接口,常用的有两个:

  1. CrudRepository
  2. 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与其大同小异,不同的有两点:

  1. JpaRepository有flush等机制,详情请参考文件Spring Data/Jpa // TODO -lyx
  2. JpaRepositorydeleteAllInBatch()与继承父类的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 ,

数据库中的结果:基于SSH+SpringBoot的项目构建
上一篇:⑨ promise


下一篇:Python代码阅读(第2篇):数字转化成列表