• Spring笔记13--SSH--全注解开发


    SSH全注解开发:

      (1) 在Action类中添加注解,实现Struts2的注解开发(@NameSpace、@ParentPackage、@Action...)

     1 package com.tongji.actions;
     2 
     3 import org.apache.struts2.convention.annotation.Action;
     4 import org.apache.struts2.convention.annotation.Namespace;
     5 import org.apache.struts2.convention.annotation.ParentPackage;
     6 import org.apache.struts2.convention.annotation.Result;
     7 import org.springframework.beans.factory.annotation.Autowired;
     8 import org.springframework.context.annotation.Scope;
     9 import org.springframework.stereotype.Component;
    10 
    11 import com.tongji.beans.Student;
    12 import com.tongji.service.IStudentService;
    13 
    14 @Component
    15 @Scope("prototype")
    16 @Namespace("/test")
    17 @ParentPackage("struts-default")
    18 public class RegisterAction {
    19     private String name;
    20     private int age;
    21     
    22     //声明Service对象
    23     @Autowired
    24     private IStudentService service;
    25     
    26     public String getName() {
    27         return name;
    28     }
    29     
    30     public void setName(String name) {
    31         this.name = name;
    32     }
    33     
    34     public int getAge() {
    35         return age;
    36     }
    37     
    38     public void setAge(int age) {
    39         this.age = age;
    40     }
    41     
    42     public IStudentService getService() {
    43         return service;
    44     }
    45 
    46     public void setService(IStudentService service) {
    47         this.service = service;
    48     }
    49 
    50     @Action(value="register", results=@Result(location="/welcome.jsp"))
    51     public String execute() {
    52         Student student = new Student(name, age);
    53         service.addStudent(student);
    54         return "success";
    55     }
    56 }

      (2) 在 Spring 配置文件中注册组件扫描的基本包 <context:component-scan base-package="com.tongji"/>,在Dao层、Service层和Action层中注解组件和依赖注入,相应地删除在 Spring 配置文件中删除 dao、service、action 的 Bean 定义 

     1 package com.tongji.dao;
     2 
     3 import java.util.List;
     4 
     5 import org.hibernate.Session;
     6 import org.hibernate.SessionFactory;
     7 import org.springframework.beans.factory.annotation.Autowired;
     8 import org.springframework.stereotype.Repository;
     9 
    10 import com.tongji.beans.Student;
    11 
    12 @Repository("studentDao")   //表示当前Dao的Bean的id为studentDao
    13 public class StudentDaoHbnImpl implements IStudentDao{
    14     
    15     @Autowired
    16     private SessionFactory sessionFactory;
    17     
    18     public void setSessionFactory(SessionFactory sessionFactory) {
    19         this.sessionFactory = sessionFactory;
    20     }
    21 
    22     @Override
    23     public void insertStudent(Student student) {
    24         sessionFactory.getCurrentSession().save(student);
    25     }
    26 
    27     @Override
    28     public void deleteStudent(int id) {
    29         Student student = sessionFactory.getCurrentSession().get(Student.class, id);
    30         //Student student = this.selectStudentById(id);
    31         sessionFactory.getCurrentSession().delete(student);
    32     }
    33 
    34     @Override
    35     public void updateStudent(Student student) {
    36         sessionFactory.getCurrentSession().update(student);
    37     }
    38 
    39     @Override
    40     public String selectStudentNameById(int id) {
    41 //        Student student = this.selectStudentById(id);
    42 //        if (student != null) {
    43 //            return student.getName();
    44 //        }
    45 //        return null;
    46         
    47         String hql = "select name from Student where id= :id";
    48         String name = (String) sessionFactory.getCurrentSession().createQuery(hql).
    49                         setInteger("id", id).
    50                             uniqueResult();
    51         return name;
    52     }
    53 
    54     @Override
    55     public List<String> selectStudentNames() {
    56         String hql = "select name from Student";
    57         return sessionFactory.getCurrentSession().createQuery(hql).list();
    58     }
    59 
    60     @Override
    61     public Student selectStudentById(int id) {
    62         return sessionFactory.getCurrentSession().get(Student.class, id);
    63     }
    64 
    65     @Override
    66     public List<Student> selectStudents() {
    67         String hql = "from Student";
    68         return sessionFactory.getCurrentSession().createQuery(hql).list();
    69     }
    70     
    71 }

      (3) 在 Spring 配置文件中开启 Spring 事务注解驱动 <tx:annotation-driven transaction-manager="transactionManager"/>,使用 Spring 的事务注解管理事务

     1 package com.tongji.service;
     2 
     3 import java.util.List;
     4 
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.stereotype.Service;
     7 import org.springframework.transaction.annotation.Transactional;
     8 
     9 import com.tongji.beans.Student;
    10 import com.tongji.dao.IStudentDao;
    11 
    12 @Service("studentService")  //表示当前Service的Bean的id为studentService
    13 public class StudentServiceImpl implements IStudentService {
    14     
    15     @Autowired
    16     private IStudentDao dao;
    17     
    18     public void setDao(IStudentDao dao) {
    19         this.dao = dao;
    20     }
    21 
    22     @Override
    23     @Transactional
    24     public void addStudent(Student student) {
    25         dao.insertStudent(student);
    26     }
    27 
    28     @Override
    29     @Transactional
    30     public void removeStudent(int id) {
    31         dao.deleteStudent(id);
    32     }
    33 
    34     @Override
    35     @Transactional
    36     public void modifyStudent(Student student) {
    37         dao.updateStudent(student);
    38     }
    39 
    40     @Override
    41     @Transactional(readOnly=true)
    42     public String findStudentNameById(int id) {
    43         return dao.selectStudentNameById(id);
    44     }
    45 
    46     @Override
    47     @Transactional(readOnly=true)
    48     public List<String> findStudentNames() {
    49         return dao.selectStudentNames();
    50     }
    51 
    52     @Override
    53     @Transactional(readOnly=true)
    54     public Student findStudentById(int id) {
    55         return dao.selectStudentById(id);
    56     }
    57 
    58     @Override
    59     @Transactional(readOnly=true)
    60     public List<Student> findStudents() {
    61         return dao.selectStudents();
    62     }
    63 
    64 }

      (4) 删除Hibernate映射文件,在实体类中以注解的方式表明映射关系,并在 Spring 配置文件的 SessionFactory 定义中,删除映射文件的相关配置mappingResources,添加实体包扫描器packagesToScan。

     1 package com.tongji.beans;
     2 
     3 import javax.persistence.Entity;
     4 import javax.persistence.GeneratedValue;
     5 import javax.persistence.Id;
     6 import javax.persistence.Table;
     7 
     8 import org.hibernate.annotations.GenericGenerator;
     9 
    10 @Entity
    11 @Table
    12 public class Student {
    13     @Id
    14     @GenericGenerator(name="xxx", strategy="native")
    15     @GeneratedValue(generator="xxx")
    16     private Integer id;
    17     private String name;
    18     private int age;
    19     
    20     public Integer getId() {
    21         return id;
    22     }
    23 
    24     public void setId(Integer id) {
    25         this.id = id;
    26     }
    27 
    28     public String getName() {
    29         return name;
    30     }
    31 
    32     public void setName(String name) {
    33         this.name = name;
    34     }
    35 
    36     public int getAge() {
    37         return age;
    38     }
    39 
    40     public void setAge(int age) {
    41         this.age = age;
    42     }
    43 
    44     public Student() {
    45         super();
    46     }
    47 
    48     public Student(String name, int age) {
    49         super();
    50         this.name = name;
    51         this.age = age;
    52     }
    53 
    54     @Override
    55     public String toString() {
    56         return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
    57     }
    58     
    59 }

      Spring配置文件:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4         xmlns:context="http://www.springframework.org/schema/context"
     5         xmlns:aop="http://www.springframework.org/schema/aop"
     6         xmlns:tx="http://www.springframework.org/schema/tx" 
     7         xsi:schemaLocation="
     8         http://www.springframework.org/schema/beans 
     9         http://www.springframework.org/schema/beans/spring-beans.xsd
    10         http://www.springframework.org/schema/context 
    11         http://www.springframework.org/schema/context/spring-context.xsd
    12         http://www.springframework.org/schema/tx 
    13         http://www.springframework.org/schema/tx/spring-tx.xsd
    14         http://www.springframework.org/schema/aop 
    15         http://www.springframework.org/schema/aop/spring-aop.xsd">
    16     
    17     <!-- 注册数据源:C3P0数据源 -->
    18     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    19         <property name="driverClass" value="${jdbc.driverClass}" />
    20         <property name="jdbcUrl" value="${jdbc.url}" />
    21         <property name="user" value="${jdbc.user}" />
    22         <property name="password" value="${jdbc.password}" />
    23     </bean>
    24     
    25     <!-- 注册JDBC属性文件 -->
    26     <context:property-placeholder location="classpath:jdbc.properties"/>
    27     
    28     <!-- 参考hibernate的主配置文件来配置 -->
    29     <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    30         <property name="dataSource" ref="dataSource"/>
    31         <property name="hibernateProperties">
    32             <props>
    33                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
    34                 <prop key="hibernate.current_session_context_class"> org.springframework.orm.hibernate5.SpringSessionContext</prop>
    35                 <prop key="hibernate.hbm2ddl.auto">update</prop>
    36                 <prop key="hibernate.show_sql">true</prop>
    37                 <prop key="hibernate.format_sql">true</prop>
    38             </props>
    39         </property>
    40         <property name="packagesToScan" value="com.tongji.beans"/>
    41     </bean>
    42     
    43     <context:component-scan base-package="com.tongji"/>
    44     
    45     <!-- 注册事务管理器 -->
    46     <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    47         <property name="sessionFactory" ref="sessionFactory"/>    
    48     </bean>
    49     
    50     <!-- 事务注解驱动 -->
    51     <tx:annotation-driven transaction-manager="transactionManager"/>
    52 </beans>

      至此,全注解开发完成。

  • 相关阅读:
    Vue-CLI
    Vue生命周期函数
    构建之法阅读笔记之四
    大二下个人总结
    个人加分项
    对老师的建议
    学习进度条 第九十一-第一百零五天 vue+uniapp app开发学习笔记
    第15周作业
    二进制安装mysql 5.7.31 启动报错/etc/init.d/mysqld: line 239: my_print_defaults: command not found
    获取最小数字
  • 原文地址:https://www.cnblogs.com/qjjazry/p/6367533.html
Copyright © 2020-2023  润新知