IntelliJ 开发SpringMVC 入门
2016-03-18 11:49
621 查看
IntelliJ 下的SpringMVC + Maven +Jpa 项目开发
目录
IntelliJ 下的SpringMVC Maven Jpa 项目开发目录
IntelliJ功能介绍
SpringMVCMavenJpa配置
Controller创建
Entity创建
JpaRepository创建
从MyEclipse转IDEA后发现它功能真的很强大啊,首先列举一下目前发现的比较好用的功能吧,刚刚使用一周,其他强大功能有待发现。
1. IntelliJ功能介绍
界面简洁,漂亮,功能一目了然,界面风格跟Android Studio,PHPStrom差不多主题风格较多,更加绚丽多彩
强大的插件功能,各种插件啊,有强大的插件库支持
Maven支持很方便,感觉比Eclipse好用
Spring,hibernate,Jpa,数据库支持强大
JRebel热部署功能很实用
2. SpringMVC、Maven、Jpa配置
项目创建创建成功后右上角会提示:Maven projects need to be imported
Import Changes Enable Auto-Import。点击Enable Auto-Import,以后更改pom文件后就会自动下载依赖包了
添加pom文件的依赖库
<properties> <spring.version>4.2.0.RELEASE</spring.version> <spring-data.version>1.2.0.RELEASE</spring-data.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>${spring-data.version}</version> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> <version>1.0.0.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.6.10.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20080701</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.2</version> <!--Jackson版本2.7.0会报错 找不到一个方法。--> </dependency> </dependencies>
这里面需要注意:
如果你实用的jdk版本是1.8,那么就用4.2.0.RELEASE的Spring版本包,我试过实用3.2的,就出现很多问题,很多类、方法找不到。
配置Jackson依赖包时如果Spring版本是4.x,Jackson版本2.7.0会报错 找不到一个方法。我这里使用的是2.7.2。
3.配置SpringMvc的web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>SpringMVCDemo Web Application</display-name> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
4.添加jpa配置
使用IntelliJ工具创建jpa支持
右键点击项目
使用数据库表添加对应的jpa实体类
添加数据库连接,以及表之间的关联关系
完整的persistence.xml文件
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <persistence-unit name="NewPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>com.palmlink.model.UserEntity</class> <properties> <!-- 使用MySQL方言 --> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <!-- 数据库连接的URL地址 --> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/springdemo"/> <!-- 数据库连接的驱动 --> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <!-- 数据库连接的用户名 --> <property name="hibernate.connection.username" value="root"/> <!-- 数据库连接的密码 --> <property name="hibernate.connection.password" value=""/> <!-- 显示SQL语句 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.connection.useUnicode" value="true"/> <property name="hibernate.connection.characterEncoding" value="UTF-8"/> <!-- 在显示SQL语句时格式化语句 --> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="false"/> <!-- 自动输出schema创建DDL语句 --> <property name="hibernate.hbm2ddl.auto" value="update"/> <!-- 数据库连接超时后自动重连 --> <property name="hibernate.connection.autoReconnect" value="true"/> <property name="connection.autoReconnectForPools" value="true"/> <property name="connection.is-connection-validation-required" value="true"/> </properties> </persistence-unit> </persistence>
5.配置dispatch- servlet.xml文件
在web的同级目录下新建一个servlet-name对应的xml文件,这里为mvc-dispatch- servlet.xml文件。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--指明 controller 所在包,并扫描其中的注解--> <context:component-scan base-package="com.palmlink.controller"/> <!--定义 使用@ResponseBody 后直接返回对象就能输出一个json字符串--> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJackson2HttpMessageConverter" /> </list> </property> </bean> <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>text/json;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <!-- 静态资源(js、image等)的访问 --> <mvc:default-servlet-handler/> <!-- 开启注解 --> <mvc:annotation-driven/> <!--ViewResolver 视图解析器--> <!--用于支持Servlet、JSP视图解析--> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 表示JPA Repository所在的包 --> <jpa:repositories base-package="com.palmlink.repository"/> <!-- 链接到persistence.xml value要对应persistence的name值--> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> <property name="persistenceUnitName" value="NewPersistenceUnit"/> </bean> <!-- Jpa事务管理 --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <!-- 开启事务管理注解 --> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
3. Controller创建
在配置servlet文件的时候需要添加Controller, Repository文件的映射。先在src/main目录下建一个java目录,Mark as root directory。之后添加package,再分别创建controller、repository、model目录。controller - Controller文件目录
repository - JPA的仓库文件,数据库操作
model - jpa的实体文件
创建一个Control Class文件,添加@Controller注解,告诉框架这是一个控制器文件。
下面是一个简单的http Get请求操作,对应的url为localhost:8080/admin/user,http访问方式为Get。这个method,默认为GET、Post两种
@RequestMapping(value = "/admin/user",method = RequestMethod.GET) public String userlist(){ return "admin/user"; }
下面是一个保存网页表单内容到数据库的一个操作,使用@ModelAttribute(“user”)可以将表单提交上来的各个字段封装为一个指定的实体类。是不是很方便
@RequestMapping(value = "/admin/user/addAction",method = RequestMethod.POST) public String userAddAction(@ModelAttribute("user")UserEntity userEntity){ userEntity.setPassword(Tool.md5(userEntity.getPassword())); userRepository.save(userEntity); return "admin/userAdd"; }
下面是通过id删除数据库表中对应数据的一个操作,使用@PathVariable(“id”) 可以获取从前台http传过来的字段名为id的值。然后直接使用。spring配置文件中配置过json返回后,使用@ResponseBody可以返回一个json字符串,内部自动将一个实体实例直接转换为对应的json字符串。这点真的很强大,很方便。
@RequestMapping(value = "/admin/users/delete/{id}") @ResponseBody public MessageJson deleteUserPost(@PathVariable("id") Integer id){ MessageJson messageJson = new MessageJson(); userRepository.delete(id); userRepository.flush(); messageJson.setSuccess(true); messageJson.setMsg("删除成功"); return messageJson; }
4. Entity创建
通过面板工具直接创建,需要选择表,字段,添加对应的关联关系,然后自动生成。5. JpaRepository创建
在repository目录下创建一个类,继承JpaRepositorypublic interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>
Repository里面包含了增删查改对应的函数以及分页函数
从数据库中获取分页数据
@RequestMapping(value = "/admin/user",method = RequestMethod.GET) public String userlist(){ return "admin/user"; } @RequestMapping(value = "/admin/user/data") @ResponseBody public DataTable userPageData(HttpServletRequest request){ int size =Integer.parseInt(request.getParameter("limit")); int page = Integer.parseInt(request.getParameter("page")); int offset = (page-1)*size; System.out.println("offset="+offset+",size="+size+",page="+page); PageRequest pageRequest = new PageRequest(page-1,size); Page<UserEntity> pageData = userRepository.findAll(pageRequest); List<UserEntity> list = pageData.getContent(); DataTable dataTableJson = new DataTable(); dataTableJson.setTotalCount(pageData.getTotalElements()); dataTableJson.setItems(list); return dataTableJson; }
使用HttpServletRequest request对象也可以获取服务器传来的参数。使用jpa的find(Page)函数可以直接返回一个分页数据。
这是我写的第一个CSDN博客,可能文章排版、文字表述、条例上有点混乱,写的不好的地方提出了改进,不喜勿喷。
相关文章推荐
- 一个很好的java论坛
- EclEmma Java Code Coverage for Eclipse
- 设计模式之建造者模式
- java.io.FileNotFoundException: D:\xxx\yyy (拒绝访问。)问题
- Java技术_Java千百问(0008)_不使用IDE如何打jar包
- 关于spring 注入中循环 ,环形依赖问题的明确
- java-io-inputStream
- EM算法的一个实例(java)
- struts token
- springmvc中的@Responsebody与@RequestBody
- JAVA软件工程师应该具备的基本素质(技能)
- Java 回顾笔记_Sting类2
- java研发常见问题总结 1
- java深拷贝和浅拷贝
- Java中什么是接口回调?
- spring基于注解实现定时任务
- java 回调机制分为:异步回调 同步回调
- ClassLoader小记录
- JAVA 中的基础
- 【leetcode】【234】Palindrome Linked List