0.jar包依赖 maven  pom.xml

  1. <properties>
  2. <spring_version>4.3.25.RELEASE</spring_version>
  3. </properties>
  4.  
  5. <dependencies>
  6. <dependency>
  7. <groupId>org.springframework</groupId>
  8. <artifactId>spring-webmvc</artifactId>
  9. <version>${spring_version}</version>
  10. </dependency>
  11.  
  12. <dependency>
  13. <groupId>javax.servlet</groupId>
  14. <artifactId>javax.servlet-api</artifactId>
  15. <version>3.1.0</version>
  16. <scope>provided</scope>
  17. </dependency>
  18.  
  19. <dependency>
  20. <groupId>com.fasterxml.jackson.core</groupId>
  21. <artifactId>jackson-databind</artifactId>
  22. <version>2.9.10</version>
  23. </dependency>
  24.  
  25. <dependency>
  26. <groupId>org.springframework.data</groupId>
  27. <artifactId>spring-data-jpa</artifactId>
  28. <version>1.11.23.RELEASE</version>
  29. </dependency>
  30.  
  31. <dependency>
  32. <groupId>org.hibernate</groupId>
  33. <artifactId>hibernate-entitymanager</artifactId>
  34. <version>3.6.10.Final</version>
  35. </dependency>
  36.  
  37. <dependency>
  38. <groupId>org.hibernate</groupId>
  39. <artifactId>hibernate-validator</artifactId>
  40. <version>4.1.0.Final</version>
  41. </dependency>
  42.  
  43. <dependency>
  44. <groupId>mysql</groupId>
  45. <artifactId>mysql-connector-java</artifactId>
  46. <version>6.0.6</version>
  47. </dependency>
  48.  
  49. <dependency>
  50. <groupId>org.springframework</groupId>
  51. <artifactId>spring-test</artifactId>
  52. <version>${spring_version}</version>
  53. </dependency>
  54.  
  55. <dependency>
  56. <groupId>junit</groupId>
  57. <artifactId>junit</artifactId>
  58. <version>RELEASE</version>
  59. <scope>test</scope>
  60. </dependency>
  61. </dependencies>

1.可被 servlet3.0 容器自动扫描加载的配置文件,位置不限,作用同 web.xml

  1. package com.sw946.spring_demo.config;
  2.  
  3. import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
  4.  
  5. public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  6. protected Class<?>[] getRootConfigClasses() { // spring容器的配置文件
  7. return new Class[]{SpringConfig.class};
  8. }
  9.  
  10. protected Class<?>[] getServletConfigClasses() { // springMVC容器的配置文件
  11. return new Class[]{MvcConfig.class};
  12. }
  13.  
  14. protected String[] getServletMappings() { // 被DisatcjerServlet接管的请求路径
  15. return new String[]{"/"};
  16. }
  17. }

2.spring容器的配置文件,管理 除被springMvc容器管理(如控制器) 以外的所有对象,可防止织入事务切面时不生效的情况发生

  1. package com.sw946.spring_demo.config;
  2.  
  3. import org.springframework.context.annotation.ComponentScan;
  4. import org.springframework.context.annotation.Configuration;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  7.  
  8. //申明为spring配置文件,spring若开启注解扫描,将会将此类作为spring容器配置的一部分
  9. @Configuration
  10. //开启注解扫描功能,并设置扫描范围,排除springMvc的配置文件和Controller组件
  11. @ComponentScan(basePackages = {"com.sw946.spring_demo"},excludeFilters = @ComponentScan.Filter({EnableWebMvc.class, Controller.class}))
  12. public class SpringConfig {
  13. }

3.springMvc容器的配置文件,仅管理自定义的控制器,与spring容器为互补

  1. package com.sw946.spring_demo.config;
  2.  
  3. import org.springframework.context.annotation.ComponentScan;
  4. import org.springframework.context.annotation.ComponentScan.Filter;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
  8. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  9. import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
  10. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  11.  
  12. @Configuration
  13. //开启springMvc注解扫描功能
  14. @EnableWebMvc
  15. //仅扫描有@Controller注解的类纳入容器管理
  16. @ComponentScan(basePackages = "com.sw946.spring_demo",includeFilters = @Filter(Controller.class),useDefaultFilters = false)
  17. public class MvcConfig extends WebMvcConfigurerAdapter {
  18. @Override
  19. public void configureViewResolvers(ViewResolverRegistry registry) { //配置视图解析器(可选)
  20. registry.jsp("/", ".jsp");
  21. }
  22.  
  23. //配置静态资源处理器,将对 / 路径下的静态资源请求映射为 对文件夹 classpath:/static/的请求,相比于默认静态资源处理器可指定映射到WEB-INFO的文件夹中(servlet默认规则下此目录不可访问)
  24.   @Override
  25. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  26. registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
  27. }
  28. }

4.JPA(数据持久化层)的配置文件,本例使用hibernate + mysql, 持久化框架和数据均可替换,配置思路相同

  1. package com.sw946.spring_demo.config;
  2.  
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5. import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  6. import org.springframework.jdbc.datasource.DriverManagerDataSource;
  7. import org.springframework.orm.jpa.JpaTransactionManager;
  8. import org.springframework.orm.jpa.JpaVendorAdapter;
  9. import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
  10. import org.springframework.orm.jpa.vendor.Database;
  11. import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
  12. import org.springframework.transaction.PlatformTransactionManager;
  13. import org.springframework.transaction.annotation.EnableTransactionManagement;
  14.  
  15. import javax.sql.DataSource;
  16.  
  17. @Configuration
  18. //开启jpa注解扫描,并给定范围,jpa会为继承了JpaRepository接口的接口生成实现类
  19. @EnableJpaRepositories(basePackages = "com.sw946.spring_demo.repository")
  20. //开启事务管理功能
  21. @EnableTransactionManagement
  22. public class JpaConfig {
  23. @Bean
  24. public DataSource productDB() { //配置数据源,按实际要连接的数据库配置
  25. DriverManagerDataSource ds = new DriverManagerDataSource();
  26. ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
  27. ds.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC");
  28. ds.setUsername("admin");
  29. ds.setPassword("admin");
  30. return ds;
  31. }
  32.  
  33. @Bean
  34. public JpaVendorAdapter jpaVendorAdapter() { //配置ORM框架,这里为hibernate
  35. HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
  36. adapter.setDatabase(Database.MYSQL);
  37. adapter.setShowSql(true);
  38. adapter.setGenerateDdl(false);
  39. adapter.setDatabasePlatform("org.hibernate.dialect.MySQLDialect");
  40. return adapter;
  41. }
  42.  
  43. @Bean
  44. public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter){ //配置实体管理器工厂
  45. LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
  46. emf.setDataSource(dataSource);
  47. emf.setJpaVendorAdapter(jpaVendorAdapter);
  48. emf.setPackagesToScan("com.sw946.spring_demo.entity"); //给定实体类的扫描范围,会扫描@Entity注解的类
  49. return emf;
  50. }
  51.  
  52. @Bean
  53. public PlatformTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean factoryBean) {
  54. //配置事务管理器,依赖于实体管理器
  55. return new JpaTransactionManager(factoryBean.getObject());
  56. }
  57. }

框架配置完成,下面为使用示例:

a.控制器(注意包的位置,根据扫描范围配置建立)

  1. package com.sw946.spring_demo.controller;
  2.  
  3. import com.sw946.spring_demo.repository.GradeRepository;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8.  
  9. @Controller
  10. public class HomeController {
  11. @Autowired
  12. private GradeRepository gradeRepository;
  13.  
  14. @RequestMapping("/home")
  15. @ResponseBody
  16. public String home() {
  17. return gradeRepository.findLaster().toString();
  18. }
  19. }

b.持久层(因示例简单,忽略服务层)

  1. package com.sw946.spring_demo.repository;
  2.  
  3. import com.sw946.spring_demo.entity.Grade;
  4. import org.springframework.data.jpa.repository.JpaRepository;
  5. import org.springframework.data.jpa.repository.Query;
  6. import org.springframework.stereotype.Repository;
  7.  
  8. import java.util.List;
  9.  
  10. @Repository
  11. public interface GradeRepository extends JpaRepository<Grade,String>{
  12. List<Grade> findByIdLessThan(String id); //方法名查询,jpa提供
  13.  
  14. //JPql、原生sql查询
  15. @Query(nativeQuery=true, value = "select * from grade order by id desc limit 0,1")
  16. Grade findLaster();
  17. }
  1. package com.sw946.spring_demo.entity;
  2.  
  3. import javax.persistence.Column;
  4. import javax.persistence.Entity;
  5. import javax.persistence.Id;
  6. import java.util.Date;
  7.  
  8. @Entity
  9. public class Grade {
  10. @Id
  11. private String id;
  12. private String name;
  13.  
  14. @Column(name = "create_time")
  15. private Date createTime;
  16.  
  17. public String getId() {
  18. return id;
  19. }
  20.  
  21. public void setId(String id) {
  22. this.id = id;
  23. }
  24.  
  25. public String getName() {
  26. return name;
  27. }
  28.  
  29. public void setName(String name) {
  30. this.name = name;
  31. }
  32.  
  33. public Date getCreateTime() {
  34. return createTime;
  35. }
  36.  
  37. public void setCreateTime(Date createTime) {
  38. this.createTime = createTime;
  39. }
  40.  
  41. @Override
  42. public String toString() {
  43. return "Grade{" +
  44. "id='" + id + '\'' +
  45. ", name='" + name + '\'' +
  46. ", createTime=" + createTime +
  47. '}';
  48. }
  49. }

c.数据库表

  1. CREATE TABLE `grade` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(50) DEFAULT NULL,
  4. `create_time` datetime DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
  7. INSERT INTO `grade` (`id`, `name`, `create_time`) VALUES ('', '', '2019-11-18 15:50:41');
  8. INSERT INTO `grade` (`id`, `name`, `create_time`) VALUES ('', '', '2019-11-18 17:32:56');

tomcat运行,访问 127.0.0.1:端口号/home ,即可看到数据库返回的json字符串,框架搭建完成!

web框架 Spring+SpringMvc+Jpa 纯注解搭建的更多相关文章

  1. spring+springMVC+JPA配置详解(使用缓存框架ehcache)

    SpringMVC是越来越火,自己也弄一个Spring+SpringMVC+JPA的简单框架. 1.搭建环境. 1)下载Spring3.1.2的发布包:Hibernate4.1.7的发布包(没有使用h ...

  2. Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World(转发)

    [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World 来源:http://blog.csdn.net/zhshulin/article/de ...

  3. Spring SpringMVC SpringBoot SpringCloud 注解整理大全

    Spring SpringMVC SpringBoot SpringCloud 注解整理 才开的博客所以放了一篇以前整理的文档,如果有需要添加修改的地方欢迎指正,我会修改的φ(๑˃∀˂๑)♪ Spri ...

  4. 【Spring Data 系列学习】Spring Data JPA @Query 注解查询

    [Spring Data 系列学习]Spring Data JPA @Query 注解查询 前面的章节讲述了 Spring Data Jpa 通过声明式对数据库进行操作,上手速度快简单易操作.但同时 ...

  5. SSM框架——Spring+SpringMVC+Mybatis的搭建教程

    一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛. Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP. S ...

  6. Maven 搭建 SSM框架——Spring+SpringMVC+Mybatis的搭建教程

    一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛. Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP.Sp ...

  7. [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World

    来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral ...

  8. SSM框架—Spring+SpringMVC+MyBatis

    1.环境搭建 1.1概念 Spring是一个Java应用的开源框架,Bean/Context/Core/IOC/AOP/MVC等是其重要组件,IOC控制反转,AOP面向切面编程,各种注入方式,实现方式 ...

  9. spring+springmvc+ibatis整合注解方式实例【转】

    源自-----> http://shaohan126448.iteye.com/blog/2033563 (1)web.xml文件(Tomcat使用) 服务器根据配置内容初始化spring框架, ...

随机推荐

  1. TTTTTTTTTTTTTTTTTTTTT POJ 3690 0与* 二维哈希 模板 +multiset

    Constellations Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5923   Accepted: 1164 De ...

  2. Vue中computed(计算属性)、methods、watch的区别

    实现效果:字符串的动态拼接 methods方法 html: <div id="app"> <!-- 监听到文本框数据的改变 --> <input ty ...

  3. Wordpress可以用来做什么?

    WordPress本身只是一款开源的.基于PHP的博客软件,但是由于WordPress的源码开源.结构优良.插件丰富.主题繁多,以至于是 WordPress成为世界上最流行的博客程序.<Word ...

  4. python3笔记十八:python列表元组字典集合文件操作

    一:学习内容 列表元组字典集合文件操作 二:列表元组字典集合文件操作 代码: import pickle  #数据持久性模块 #封装的方法def OptionData(data,path):    # ...

  5. SELECT list is not in GROUP BY clause and contains nonaggregated

    安装了mysql5.7,用group by 查询时抛出如下异常 SQLSTATE[42000]: Syntax error or access violation: 1055 Expression # ...

  6. Removing jQuery from GitHub.com frontend

    Removing jQuery from GitHub.com frontend Web standards in the later years Over the years, GitHub gre ...

  7. spark MLlib 概念 5: 余弦相似度(Cosine similarity)

    概述: 余弦相似度 是对两个向量相似度的描述,表现为两个向量的夹角的余弦值.当方向相同时(调度为0),余弦值为1,标识强相关:当相互垂直时(在线性代数里,两个维度垂直意味着他们相互独立),余弦值为0, ...

  8. 解决:linux eclipse 对‘dlopen’未定义的引用, 对‘xxx’未定义的引用

    如果是终端窗口执行的话直接: 在g++编译选项后面,加入dl的库,选项为-ldl,即可. 如果是在eclipse里的话: 在工程属性中->c/c++ build->gcc complier ...

  9. 请描述一下 BroadcastReceiver?

    BroadCastReceiver 是 Android 四大组件之一,主要用于接收系统或者 app 发送的广播事件. 广播分两种:有序广播和无序广播. 内部通信实现机制:通过 Android 系统的 ...

  10. KNN距离函数的简单拓展

    KNN--k-NearestNeighbor可以是是分类法中最简单的算法了. 大致的idea为:找出k各跟新数据点最像的点,看这些点主要属于哪类,那么新数据点也就属于哪类的了. 其伪代码如下: 1. ...