亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Spring MVC + Spring MongoDB + Querydsl 通過maven整合實例

2019-11-14 20:57:17
字體:
來源:轉載
供稿:網友
SPRing MVC + Spring MongoDB + Querydsl 通過maven整合實例效果圖

一共3個頁面:注冊頁,歡迎頁,用戶列表頁

很簡單的例子,主要是為了把流程走通,沒有各種驗證。

注冊頁:

  

歡迎頁:

  

用戶列表頁:

  

源碼地址

https://github.com/lemonbar/spring-framework-mongodb

參考文檔

Spring framework:http://docs.spring.io/spring/docs/4.0.6.RELEASE/spring-framework-reference/htmlsingle/#spring-web

Spring data mongodb:http://docs.spring.io/spring-data/data-mongo/docs/1.5.2.RELEASE/reference/html/

Querydsl:http://www.querydsl.com/static/querydsl/latest/reference/html/index.html

代碼實現(使用maven構建)Spring MVCmaven的依賴
<dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>${spring.framework.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-webmvc</artifactId>            <version>${spring.framework.version}</version>        </dependency>        <dependency>            <groupId>taglibs</groupId>            <artifactId>standard</artifactId>            <version>1.1.2</version>        </dependency>        <dependency>            <groupId>jstl</groupId>            <artifactId>jstl</artifactId>            <version>1.2</version>        </dependency>

taglibs和jstl是為jsp中的標簽服務的.

web.xml
<web-app xmlns="http://java.sun.com/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"         version="3.0">    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>WEB-INF/root-context.xml</param-value>    </context-param>    <servlet>        <servlet-name>dispatcher</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value></param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>dispatcher</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>    <!-- Set Character Encoding-->    <filter>        <filter-name>CharacterEncodingFilter</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>    </filter>    <filter-mapping>        <filter-name>CharacterEncodingFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <!-- Set Character Encoding-->    <filter>        <filter-name>hiddenHttpMethodFilter</filter-name>        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>hiddenHttpMethodFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener></web-app>

注意:關于filter的定義順序,CharacterEncodingFilter必須放在HiddenHttpMethodFilter之前,否則會有中文亂碼的問題。(filter的執行是按照定義順序執行的)。

CharacterEncodingFilter,是為了中文編碼

HiddenHttpMethodFilter,因為html中的form表單只支持GET與POST請求,spring為了支持DELETE, PUT等操作,會在生成頁面代碼時,會把我們希望的操作添加到一個hidden的_method中,在外層通過post傳過去,所以我們需要通過HiddenHttpMethodFilter把真實的操作解析出來。

我們定義的 vs. 真實傳輸的

<form:form action="xxx" method="put"></form:form>
<form id="xxx" action="xxx" method="post">    <input type="hidden" name="_method" value="put"/></form>
root-context.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:mongo="http://www.springframework.org/schema/data/mongo"       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/mongo        http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">    <context:component-scan base-package="com.lemon.spring"/>    <!-- 添加注解驅動 -->    <mvc:annotation-driven/>    <!-- 允許對靜態資源文件的訪問 -->    <mvc:default-servlet-handler/>    <bean id="viewResolver"          class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>        <property name="prefix" value="/WEB-INF/jsp/"/>        <property name="suffix" value=".jsp"/>    </bean>

這兒只貼了前半部分和spring mvc相關的,后面的會在mongodb那部分貼出來。

login.jsp
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %><html><head>    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>    <title></title></head><body><form:form commandName="user" action="signin">    <table>        <tr>            <td>First Name:</td>            <td><form:input path="firstName"/></td>        </tr>        <tr>            <td>Last Name:</td>            <td><form:input path="lastName"/></td>        </tr>        <tr>            <td>                <input type="submit" value="注冊"/>            </td>            <td>                <input type="button" value="用戶列表" onclick="javascruser_list.jsp
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %><%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %><html><head>    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>    <title>User List</title></head><body><form action="user_list">    <table>        <tr>            <td>查詢條件</td>            <td>                <input type="text" name="q"/>            </td>            <td>                <input type="submit" value="查詢"/>            </td>        </tr>    </table></form><hr><table border="1">    <tr>        <td>index</td>        <td><font>firstName</font></td>        <td><font>lastName</font></td>    </tr>    <c:set var="index" value="1"/>    <c:forEach var="u" items="${userList}">        <tr>            <td>${index}</td>            <td>${u.firstName}</td>            <td>${u.lastName}</td>        </tr>        <c:set var="index" value="${index+1}"/>    </c:forEach></table><hr><input type="button" value="首頁" onclick="Javascript:location.href='login'"></body></html>
greeting.jsp
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %><html><head>    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>    <title></title></head><body><form:form action="login">    <table>        <tr>            <td colspan="2">                恭喜您, 用戶${firstName}注冊成功!            </td>        </tr>        <tr>            <td>                <input type="submit" value="首頁"/>            </td>            <td>                <input type="button" value="用戶列表" onclick="javascript:location.href='user_list'">            </td>        </tr>    </table></form:form></body></html>
LoginController.java
package com.lemon.spring.controller;import com.lemon.spring.domain.User;import com.lemon.spring.service.IUserService;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import javax.annotation.Resource;import java.util.List;@Controllerpublic class LoginController {    @Resource    private IUserService userService;    @RequestMapping("/login")    public String login(Model model) {        User user = userService.initUser();        model.addAttribute(user);        return "login";    }    @RequestMapping("/signin")    public String signin(User user,                         Model model) {//        userService.saveUser(user);        userService.insertUser(user);//        User savedUser = userService.getUserByFirstName(user.getFirstName());        model.addAttribute("firstName", user.getFirstName());        return "greeting";    }    @RequestMapping("/user_list")    public String userList(Model model, @RequestParam(required = false, value = "q", defaultValue = "") String q) {        List<User> userList;        if (q == "") {            userList = userService.getUserList();        } else {            userList = userService.getUserListByFirstName(q);        }        model.addAttribute("userList", userList);        return "user_list";    }}
service和domainIUserService.java
package com.lemon.spring.service;import com.lemon.spring.domain.User;import java.util.List;public interface IUserService {    User initUser();    boolean saveUser(User user);    List<User> getUserList();    List<User> getUserListByFirstName(String firstName);    User getUserByFirstName(String firstName);    void insertUser(User user);}
UserService.java
package com.lemon.spring.service.impl;import com.lemon.spring.domain.QUser;import com.lemon.spring.domain.User;import com.lemon.spring.repository.IPersonRepository;import com.lemon.spring.repository.UserRepository;import com.lemon.spring.service.IUserService;import org.springframework.stereotype.Service;import javax.annotation.Resource;import java.util.List;@Servicepublic class UserService implements IUserService {    @Resource    private UserRepository userRepository;    @Resource    private IPersonRepository personRepository;    @Override    public User initUser() {        User user = new User();        return user;    }    @Override    public boolean saveUser(User user) {        User u = userRepository.save(user);        if (u != null) {            return true;        }        return false;    }    @Override    public List<User> getUserList() {        return userRepository.findAll();    }    @Override    public List<User> getUserListByFirstName(String firstName) {        QUser user = QUser.user;        return (List<User>)userRepository.findAll(user.firstName.contains(firstName));    }    @Override    public User getUserByFirstName(String firstName) {        return userRepository.findByFirstName(firstName).get(0);    }    @Override    public void insertUser(User user) {        personRepository.insert(user);    }}
User.java
@Data@Entitypublic class User {//    @Id//    private String id;    private String firstName;    private String lastName;}

maven的pom.xml要引入兩個dependency,lombok為自動生成get/set方法使用,hibernate-jpa-2.0-api是為了javax.presistence.Entity.

<dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <version>1.14.4</version>        </dependency><dependency><groupId>org.hibernate.javax.persistence</groupId><artifactId>hibernate-jpa-2.0-api</artifactId><version>1.0.0.Final</version></dependency>
Spring MongoDBroot-context.xml
    <mongo:mongo host="localhost" port="27017">        <mongo:options/>    </mongo:mongo>    <mongo:db-factory dbname="springdb" mongo-ref="mongo"/>    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>    </bean>    <mongo:repositories base-package="com.lemon.spring.repository"/>

其中關于mongodb的定義,按名稱應該可以猜的出來,也可以參考官方文檔。

maven依賴

        <dependency>            <groupId>org.springframework.data</groupId>            <artifactId>spring-data-mongodb</artifactId>            <version>1.5.2.RELEASE</version>        </dependency>
UserRepository.java
package com.lemon.spring.repository;import com.lemon.spring.domain.User;import org.springframework.data.mongodb.repository.MongoRepository;import org.springframework.data.querydsl.QueryDslPredicateExecutor;import java.util.List;public interface UserRepository extends MongoRepository<User, String>{    List<User> findByFirstName(String firstName);}

UserRepository直接繼承MongoRepository,默認已經提供了很多方法,比如save,不需要自己寫實現。

如果需要更多的查詢,可以按照方法的命名機制來進行定義。

當然除了直接繼承自MongoRepository外,還可以直接使用context中定義的mongotemplate,來自己定義接口和實現,參考下面兩個java文件

IPersonRepository.java
package com.lemon.spring.repository;import com.lemon.spring.domain.User;public interface IPersonRepository {    void insert(User user);}
PersonRepository.java
package com.lemon.spring.repository.impl;import com.lemon.spring.domain.User;import com.lemon.spring.repository.IPersonRepository;import org.springframework.data.mongodb.core.MongoOperations;import org.springframework.stereotype.Repository;import javax.annotation.Resource;@Repositorypublic class PersonRepository implements IPersonRepository {    @Resource    private MongoOperations mongoTemplate;    @Override    public void insert(User user) {        mongoTemplate.insert(user);    }}
Querydsl

Querydsl為我們提供了更多功能的查詢,詳細介紹請參考官網http://www.querydsl.com/static/querydsl/latest/reference/html/index.html

首先maven中添加依賴

<dependency>            <groupId>com.mysema.querydsl</groupId>            <artifactId>querydsl-apt</artifactId>            <version>${querydsl.version}</version>            <scope>provided</scope>        </dependency>        <dependency>            <groupId>com.mysema.querydsl</groupId>            <artifactId>querydsl-mongodb</artifactId>            <version>${querydsl.version}</version>        </dependency>        <dependency>            <groupId>com.mysema.querydsl</groupId>            <artifactId>querydsl-jpa</artifactId>            <version>${querydsl.version}</version>        </dependency>        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-log4j12</artifactId>            <version>1.6.1</version>        </dependency>

然后修改UserRepository

public interface UserRepository extends MongoRepository<User, String>, QueryDslPredicateExecutor<User> {    List<User> findByFirstName(String firstName);}

maven中添加plugin

 <plugin>                <groupId>com.mysema.maven</groupId>                <artifactId>apt-maven-plugin</artifactId>                <version>1.0.9</version>                <executions>                    <execution>                        <goals>                            <goal>process</goal>                        </goals>                        <configuration>                            <outputDirectory>target/generated-sources/java</outputDirectory>                            <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>                        </configuration>                    </execution>                </executions>            </plugin>

根據@Entity來生成類。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕一区二区精品| 欧美极品少妇xxxxⅹ喷水| 午夜精品在线观看| 91免费版网站入口| 日韩中文字幕国产| 欧美韩日一区二区| 亚洲电影免费观看高清完整版在线观看| 欧美日韩xxxxx| 欧美一级免费看| 国产成人av在线| 久久久久久这里只有精品| 国产一区二区日韩精品欧美精品| 欧美日韩国产在线| 91在线免费观看网站| 国产精品久久久久久中文字| 精品视频在线播放色网色视频| 欧美孕妇毛茸茸xxxx| 国外日韩电影在线观看| 国产成人免费91av在线| 日韩精品免费电影| 精品视频—区二区三区免费| 久久综合国产精品台湾中文娱乐网| 久久久亚洲国产天美传媒修理工| 国产一区二区在线播放| 成人免费xxxxx在线观看| 久久资源免费视频| 亚洲天堂一区二区三区| yw.139尤物在线精品视频| 欧美激情区在线播放| 韩国一区二区电影| 国产精品极品在线| 裸体女人亚洲精品一区| 欧美日本高清视频| 亚洲天堂影视av| 国产精品视频永久免费播放| 欧美在线一区二区三区四| 欧美亚洲一级片| 日韩综合视频在线观看| 欧美在线视频网| 国产精品精品久久久久久| 亚洲最大的av网站| 成人免费视频在线观看超级碰| 91精品国产91久久久久久最新| 国产成人在线视频| 91tv亚洲精品香蕉国产一区7ujn| 久久影院资源站| 亚洲人成绝费网站色www| 欧美成人网在线| 亚洲欧美色婷婷| 在线色欧美三级视频| 亚州精品天堂中文字幕| 欧美午夜精品久久久久久浪潮| 国产精品视频白浆免费视频| 日韩黄在线观看| 国产亚洲欧美日韩精品| 国产精品久在线观看| 亚洲精品理论电影| 欧美日韩人人澡狠狠躁视频| 中文字幕日韩精品在线观看| 日韩精品在线视频| 性色av一区二区三区在线观看| 国产一区二区丝袜| 久久影视电视剧免费网站清宫辞电视| 国产精品第3页| 国产精品丝袜久久久久久不卡| 国产中文字幕91| 91性高湖久久久久久久久_久久99| 国产www精品| 日本高清久久天堂| 欧美性xxxxxx| 亚洲精品日韩久久久| 国产成人精品在线| 亚洲久久久久久久久久久| 日韩视频免费中文字幕| 亚洲国产女人aaa毛片在线| 最近免费中文字幕视频2019| 久久久亚洲福利精品午夜| 亚洲性av在线| 日韩欧美综合在线视频| 国产精品一区二区三区毛片淫片| 中文字幕亚洲无线码在线一区| 亚洲国产日韩欧美综合久久| 91中文在线视频| 久久久久久香蕉网| 国产一区二区久久精品| 在线视频亚洲欧美| 日韩精品极品在线观看播放免费视频| 成人免费观看a| 亚洲精品福利在线| 日韩精品在线视频观看| 精品亚洲一区二区| 亚洲第一精品电影| 久久久免费观看| 欧洲s码亚洲m码精品一区| 国产亚洲美女精品久久久| 91高清视频免费| 久久久久久国产精品久久| 国产亚洲美女精品久久久| www.亚洲一区| 91精品久久久久久久久久另类| 亚洲精品91美女久久久久久久| 日韩免费黄色av| 91国产视频在线| 精品视频中文字幕| 亚洲成人在线网| 一本色道久久综合亚洲精品小说| 国产丝袜一区二区| 福利视频一区二区| 高清欧美性猛交xxxx| 在线播放国产一区二区三区| 日韩精品极品在线观看播放免费视频| 成人乱人伦精品视频在线观看| 亚洲欧美日韩爽爽影院| 国产色视频一区| 亚洲精品av在线| 国产免费一区二区三区香蕉精| 日本精品视频在线播放| 国产精品入口夜色视频大尺度| 国产成人免费av电影| 亚洲一区二区中文字幕| 国内揄拍国内精品| 久久在线免费观看视频| 国产精品主播视频| 日韩成人在线电影网| 久久69精品久久久久久久电影好| 亚洲天天在线日亚洲洲精| 欧美日韩第一页| 一本色道久久综合亚洲精品小说| 国产精品三级在线| 97超碰蝌蚪网人人做人人爽| 韩国美女主播一区| 国产精品自产拍在线观看中文| 日韩欧美视频一区二区三区| 亚洲精品久久久久中文字幕欢迎你| 国产日产欧美精品| 欧洲永久精品大片ww免费漫画| 欧美日韩在线观看视频小说| 这里精品视频免费| 日韩高清有码在线| 国产欧美精品在线| 精品福利视频导航| 久久露脸国产精品| 欧美亚洲国产日本| 国产精品久久99久久| 黄色成人av网| 亚洲精品成人久久久| 欧美午夜激情在线| 国产精品久久久久久一区二区| 91在线直播亚洲| 欧美日韩成人黄色| 亚洲男人7777| 亚洲成人激情小说| 91精品国产九九九久久久亚洲| 97香蕉久久夜色精品国产| 亚洲奶大毛多的老太婆| 日韩欧美aⅴ综合网站发布| 北条麻妃久久精品| 亚洲成人av中文字幕| 国产精品视频自拍| 国产精品96久久久久久| 国产激情久久久| 亚洲国产古装精品网站| 亚洲18私人小影院| 2019亚洲日韩新视频|