jpa+thymeleaf

在Java Web开发领域,JPA(Java Persistence API)和Thymeleaf是两个非常流行的技术栈组件,它们分别用于数据持久化和视图渲染。将JPA与Thymeleaf结合使用,可以构建出既高效又易于维护的Web应用程序。以下是对这一组合使用的总结:

1. 数据持久化标准

  • JPA是Java EE 5标准的一部分,它提供了一种将Java对象映射到关系数据库中的表的标准方式。这意呀着开发者可以使用纯Java对象(POJOs)来操作数据库,而无需编写大量的SQL语句。

2. ORM(对象关系映射)

  • JPA通过ORM技术,实现了Java对象与数据库表之间的映射。开发者可以定义实体类(Entity)来映射数据库表,并通过JPA提供的API进行CRUD(创建、读取、更新、删除)操作。

3. 灵活性

  • JPA支持多种实现,如Hibernate、EclipseLink等,这为开发者提供了选择最适合项目需求的实现方案的灵活性。

4. 简化开发

  • JPA减少了数据库交互的复杂性,使得开发者可以更加专注于业务逻辑的实现。同时,它也支持事务管理、缓存等高级特性,进一步提升了开发效率。
  • 1. 数据持久化标准

  • JPA是Java EE 5标准的一部分,它提供了一种将Java对象映射到关系数据库中的表的标准方式。这意呀着开发者可以使用纯Java对象(POJOs)来操作数据库,而无需编写大量的SQL语句。
  • 2. ORM(对象关系映射)

  • JPA通过ORM技术,实现了Java对象与数据库表之间的映射。开发者可以定义实体类(Entity)来映射数据库表,并通过JPA提供的API进行CRUD(创建、读取、更新、删除)操作。
  • 3. 灵活性

  • JPA支持多种实现,如Hibernate、EclipseLink等,这为开发者提供了选择最适合项目需求的实现方案的灵活性。
  • 4. 简化开发

  • JPA减少了数据库交互的复杂性,使得开发者可以更加专注于业务逻辑的实现。同时,它也支持事务管理、缓存等高级特性,进一步提升了开发效率。
  • Thymeleaf 总结

    1. 模板引擎

  • Thymeleaf是一个现代的服务器端Java模板引擎,用于Web和独立环境。它主要用于处理Web视图层,将模型数据渲染到HTML页面中。
  • 2. 易于集成

  • Thymeleaf可以轻松地与Spring MVC等框架集成,为开发者提供了一种声明式地将模型数据绑定到视图模板的方法。
  • 3. 安全性

  • Thymeleaf在处理HTML时,能够自然地防止XSS攻击,因为它会对模板中的数据进行转义处理。这使得开发者在构建安全的Web应用时更加放心。
  • 4. 灵活性

  • Thymeleaf支持多种模板模式(如HTML5、XML、JavaScript、纯文本等),并且提供了丰富的表达式语言,使得开发者可以灵活地控制模板的渲染过程。
  • 5. 易于维护

  • Thymeleaf的模板代码清晰易懂,易于维护。它鼓励开发者编写结构良好的HTML代码,并通过Thymeleaf的特定属性来添加动态内容。

构建项目

1.创建项目

2.修改pox.xml文件,添加其他依赖及设置:

<dependencies>
        <!-- 引入SpringBoot的Web依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>6.3.3</version>
        </dependency>
        <!-- 引入JSTL标签库依赖 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- 引入MyBatis-Plus支持(不需要再引入MyBatis包) -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- 引入Druid数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-3-starter</artifactId>
            <version>1.2.20</version>
        </dependency>
        <!-- &lt;!&ndash; 引入MyBatis-Plus动态数据源支持 &ndash;&gt; -->
        <!-- <dependency> -->
        <!--     <groupId>com.baomidou</groupId> -->
        <!--     <artifactId>dynamic-datasource-spring-boot3-starter</artifactId> -->
        <!--     <version>4.1.2</version> -->
        <!-- </dependency> -->
        <!-- 引入MySQL驱动 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- 引入Lombok完成实体类自动Getter/Setter -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- 引入Slf4j日志依赖 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <!-- 引入SpringBoot测试依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


        <!-- 配置处理依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- 配置热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- thymeleaf依赖布局 -->
        <dependency>
            <groupId>nz.net.ultraq.thymeleaf</groupId>
            <artifactId>thymeleaf-layout-dialect</artifactId>
        </dependency>
    </dependencies>

2.配置文件

spring:
    datasource:
        #使用Druid作为数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql:///crm?useUnicode=true&characterEncoding=utf-8
        username: root
        password: liuyuhan

7.2 模型开发

模型包括entity、repository、service

7.2.1 entity

实体类包括User、Role,使用注解配置映射,且配置好关联关系

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("sys_user")
public class User implements Serializable {
  @TableId(type = IdType.AUTO)
  private Long usrId;
  private String usrName;
  private String usrPassword;
  @TableField("usr_role_id")
  private Long usrRoleId;
  @TableField(exist = false)
  private Role role;
  private Integer usrFlag;

}
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("sys_role")
@JsonIgnoreProperties(value = {"hibernateLazyInitializer","handler"})
public class Role implements Serializable {
  @TableId(type = IdType.AUTO)
  private Long roleId;
  private String roleName;
  private String roleDesc;
  private Long roleFlag;
//  @OneToMany(targetEntity = User.class,fetch = FetchType.LAZY,cascade = CascadeType.REMOVE,mappedBy = "role")
//  private Set<User> users = new HashSet<User>();
//  @JsonIgnore
//  private Set<User> users = new HashSet<>();
}

7.2.2 repository

        repository 只需要提供实体相应的接口,继承JpaRepository接口即可,如果有特殊的操作,则可适当添加对应的方法。

public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
    public List<User> findByUsrNameAndUsrPassword(String usrName,String usrPassword);
}
public interface RoleRepository extends JpaRepository<Role,Long> {
}

UserRepository除继承JpaRepository外,还继承了JpaSpecificationExecutor,用于复杂查询,具体操作在service中实现,另提供了按用户名和密码进行查询的方法。

7.2.3 service

service层咱们分别开发UserService和RoleService

public interface UserService extends IService<User> {
    /**
     * 用户登录
     * @param usrName
     * @param usrPassword
     * @return
     */
    User login(String usrName, String usrPassword);
    int addUser(User user);
    int deleteUser(Long usrId);
    int updateUser(User user);
    User getUser(Long usrId);

    /**
     * 根据用户名和角色ID分页查询用户数据
     * @param usrName
     * @param roleId
     * @param page
     * @return
     */
    Page<User> findPage(String usrName, Long roleId, Page<User> page);

    /**
     * 新增
     * @param user
     */
    void saveUser(User user);

    /**
     * 检查用户名是否存在
     * @param usrName
     * @return
     */
    User checkUserName(String usrName);

    /**
     * 删除
     * @param usrId
     * @return
     */
    int delUser(Long usrId);
}
public interface RoleService extends IService<Role> {
    List<Role> findAllRoles();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值