SSH框架搭建之使用注解实现SSH集成

一、基础环境

1、Windows10、Java17、Maven3.8.8、Tomcat9.0.76、IDEA2022.3.3

2、已通过配置文件的方式实现SSH集成

二、框架版本

struts2:2.5.31

spring:5.3.27

hibernate:5.6.15.Final

三、对持久化的类使用Hibernate注解实现ORM映射并进行配置

使用注解定义bean:通过注解形式将bean以及相应的属性值放入ioc容器。

1、对持久化类使用注解实现orm映射

完成注解添加后即可删除employee.hbm.xml实体类映射文件。

@Entity注解:

@Entity注解和@Table注解都是Java Persistence API中定义的一种注解。

@Entity说明这个class是实体类,并且使用默认的orm规则,即class类名就是数据库中表名,class属性名即表中字段名。@Entity注解指明这是一个实体Bean。

  • @Entity注解表示该类是个实体类,在项目启动时会根据该类自动生成一张表,表的名称即@Entity注解中name的值,如果不配置name,默认表名为类名。
  • 所有的实体类都要有主键,@Id注解表示该属性是一个主键,@GeneratedValue注解表示主键自动生成,strategy则表示主键的生成策略。
  • 默认情况下,生成的表中字段的名称就是实体类中属性的名称,通过@Column注解可以定制生成的字段属性,name表示该属性对应的数据表中字段的名称,nullable表示该字段非空。
  • @Transient注解表示在生成数据库中的表时,该属性被忽略,即不生成对应的字段。

@Table注解:

@Table注解默认情况下只会完成表和实体之间的映射,声明该对象映射到数据库的数据表,通过它可以为实体指定表(table)。

  • 常用属性:name  指定表
  • @Table(name = "book")

@Table注解是一个非必须的注解,@Table注解指定了Entity所要映射的数据库表,其中@Table.name()用来指定映射表的表名。

如果同时使用了@Entity(name="student")和@Table(name="book"),最终对应的表名是book,这说明优先级:@Table>@Entity。

2、配置spring配置文件,注释掉先前配置的实体类映射文件配置,添加扫描实体类注解的配置

添加扫描实体类注解:

<!-- 到指定的包中扫描带有hibernate注解的实体类,并形成orm关系映射 -->

<property name="packagesToScan" value="demo.employee.entity" />

四、改造DAO层,使用注解的方式简化配置文件

1、在实现类中使用@Repository注解

@Repository注解:

  • @Repository是属于Spring的注解,用来表示一个持久层bean,即数据访问层DAO组件。
  • @Repository是@Component注解的一个派生品,用以在类上实例化bean,并把当前类对象的实现类交给Spring容器进行管理。
  • @Repository作为Spring的注解,他还能把所标注的类中抛出的数据访问异常封装为Spring的数据访问异常类型。

2、使用构造方法在实现类中注入sessionFactory

@autowired 注解:

@Autowired将被注解的对象或者类自动装配(注入)到当前类中。

3、配置Spring配置文件,注释掉bean注入到Spring容器的配置(含sessionFactory注入到dao中的配置)

五、改造业务层

1、在业务层实现类中使用@Service注解

@Service注解:

  • @Service注解用于类上,标记当前类是一个service类。
  • @Service注解会将当前类自动注入到Spring容器中,不需要再在applicationContext.xml文件定义bean。

2、在业务层实现类中使用@Autowired注解

使用@Autowired注解自动注入employeeDao对象方式后,将原手动注入的方式注释掉。

3、配置Spring配置文件,注释掉bean注入到Spring容器的配置(含dao注入到service中的配置)

4、开启关于Spring注解的扫描

<!-- 为了使得service层以及dao层的注解能起作用,需要开启关于Spring注解的扫描 -->

<context:component-scan base-package="demo.employee" />

六、改造Action

1、在Action中使用@Controller注解和@Scope注解

@Controller注解:

  • @Controller注解用于类上,标记当前类是一个Controller层。
  • @Controller注解会将当前类自动注入到Spring容器中,不需要再在applicationContext.xml文件定义bean。即@Controller注解负责注册一个bean到spring上下文中,bean的ID默认为类名称开头字母小写,也可以自己指定。

@Scope注解:

  • @Scope注解是Spring IOC容器中的一个作用域,在Spring IOC容器中,他用来配置Bean实例的作用域对象。
  • @Scope 具有以下几种作用域:

singleton:单实例的(单例)(默认)——全局有且仅有一个实例

prototype:多实例的(多例)——每次获取Bean的时候会有一个新的实例

reqeust:同一次请求——request:每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效

session:同一个会话级别——session:每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效

2、在Action中使用@Autowired注解

3、配置Spring配置文件,注释掉bean注入到Spring容器的配置(含service注入到action中的配置)

七、使用注解简化事务管理规则及AOP

1、配置Spring配置文件,开启关于事务管理规则注解的扫描

<!-- 开启关于事务管理规则注解的扫描 -->

<tx:annotation-driven transaction-manager="transactionManager" />

2、注释掉手动配置的事务管理规则和手动配置的AOP

3、找到相关service的实现类加上关于事务管理的注解@Transactional

 @Transactional注解:

  • 声明式事务有两种方式:一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Transactional注解的方式。
  • 使用@Transactional注解的类或者方法表示该类里面的所有方法或者这个方法的事务由spring处理,来保证事务的原子性,即是方法里面对数据库操作,如果失败则spring负责回滚操作,成功则提交操作。
  • @Transactional注解可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。
  • @Transactional注解应该只被应用到public方法上,如果你在protected、private或者默认可见性的方法上使用@Transactional注解,这将被忽略,也不会抛出任何异常。

八、测试service层方法

九、启动项目测试查询、添加

省略。

附1、框架搭建总结

实现思路:

1、添加3个框架所需要的依赖(或者JAR文件)

2、在Spring中配置数据源对象和会话工厂

3、实现并配置DAO

4、实现并配置Service

5、为业务层添加事务管理

6、实现并配置Action

7、创建JSP测试页面

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值