Spring-datatable-Jpa實(shí)現(xiàn)增刪改查及分頁

廢話不多說庐船,先上圖筐钟,如果是你想要的或者能有所學(xué)習(xí)就可以接著往下看了篓冲。

show.png
前端使用的是插件datatable壹将,外加了一些bootstroop的樣式诽俯。完成的功能為對數(shù)據(jù)庫的增刪改查惊畏,頁面的模糊查詢和分頁颜启。源碼呈上

1缰盏、創(chuàng)建project

在idea中new project-->maven-->右側(cè)選中maven-archetype-webapp口猜,然后一路next济炎,新建的好的項(xiàng)目目錄如下
a.png

成型的項(xiàng)目目錄如下
b.png

因此需要在main文件夾下新家java须尚,test耐床,testResources三個(gè)文件夾撩轰,后兩個(gè)用于測試偎箫,并不必需溉苛。新建后在file->Project Structure->Modiles頁面將新建的文件夾賦予相應(yīng)的屬性愚战,如將java文件夾mark as Sources寂玲,這樣才能被spring識(shí)別拓哟。至此断序,總體結(jié)構(gòu)上便完整了违诗。

2、資源文件配置

1茸炒、pom.xml依賴設(shè)置
簡單而言就是添加項(xiàng)目所需要的jar包壁公,但是maven大大簡化了這個(gè)過程紊册,只需要將依賴包名按標(biāo)準(zhǔn)加入囊陡,剩下的maven自動(dòng)搞定,推薦一個(gè)查詢依賴包的網(wǎng)站铺浇,http://mvnrepository.com/鳍侣,只要記得包名就能找到。在該項(xiàng)目下添加的依賴如下线衫,直接copy放入

<dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.1.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.1.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.1.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>4.1.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.1.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.1.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-jpa</artifactId>
      <version>1.7.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.8</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>4.3.7.Final</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.3</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.7</version>
    </dependency>
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.21</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>6.11</version>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.2</version>
    </dependency>
    <dependency>
      <groupId>javax.persistence</groupId>
      <artifactId>persistence-api</artifactId>
      <version>1.0.2</version>
    </dependency>
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5-pre9</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.38</version>
    </dependency>
</dependencies>

2惨驶、配置文件.xml設(shè)置
在文件夾下新建一個(gè)application.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:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:jpa="http://www.springframework.org/schema/data/jpa"
        xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                                            http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd
                                            http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                                            http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
                                            http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
                                            http://www.springframework.org/schema/data/jpa  http://www.springframework.org/schema/data/jpa/spring-jpa-1.8.xsd  ">

        <!--自動(dòng)掃描(自動(dòng)注入)-->
        <context:component-scan base-package="com.zhang.Demo" />

        <!--第一步刨啸,配置數(shù)據(jù)源-->
        <bean  id="dataSource"  class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <property  name="driverClass"  value="com.mysql.jdbc.Driver"/>
                <property  name="jdbcUrl"  value="jdbc:mysql:///demo"/><!--jdbc:mysqsl://localhost:3306/xxx-->
                <property  name="user"  value="root"/>
                <property  name="password"  value="wangzhang"/>
                <!--連接池中保留的最大連接數(shù)呜投。默認(rèn)值:  15  -->
                <property  name="maxPoolSize"  value="1000"/>
                <!--  連接池中保留的最小連接數(shù)仑荐,默認(rèn)為:3-->
                <property  name="minPoolSize"  value="800"/>
                <!--  初始化連接池中的連接數(shù)粘招,取值應(yīng)在minPoolSize與maxPoolSize之間洒扎,默認(rèn)為3-->
                <property  name="initialPoolSize"  value="500"/>
        </bean>

        <bean  id="entityManagerFactory"
               class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
                <property  name="dataSource"  ref="dataSource"  />
                <property  name="jpaVendorAdapter"  ref="hibernateJpaVendorAdapter"  />
                <property  name="packagesToScan"  value="com.zhang.Demo.entity"  />
                <property  name="jpaProperties">
                        <props>
                                <prop  key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
                                <prop  key="hibernate.show_sql">true</prop>
                                <prop  key="hibernate.hbm2ddl.auto">update</prop>
                        </props>
                </property>
        </bean>

        <bean  id="hibernateJpaVendorAdapter"
               class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property  name="databasePlatform"  value="org.hibernate.dialect.MySQLDialect"  />
        </bean>

        <bean  id="transactionManager"  class="org.springframework.orm.jpa.JpaTransactionManager">
                <property  name="entityManagerFactory"  ref="entityManagerFactory"  />
        </bean>

        <jpa:repositories base-package="com.zhang.Demo.repository"
                          entity-manager-factory-ref="entityManagerFactory"
                          transaction-manager-ref="transactionManager">
        </jpa:repositories>

        <tx:annotation-driven transaction-manager="transactionManager"
                              proxy-target-class="true" />

        <mvc:default-servlet-handler/>
        <mvc:annotation-driven/>
        <mvc:resources mapping="/static/**" location="/WEB-INF/static/"/>
        <mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/page/"/>
                <property name="suffix" value=".jsp"/>
        </bean>

</beans>

3、web.xml配置
在web.xml中加入過濾器與服務(wù)器映射

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <servlet>
    <servlet-name>Demo</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>   <!-- 指明數(shù)據(jù)庫等配置文件的位置 -->
      <param-value>classpath:application.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>Demo</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

至此胡诗,項(xiàng)目已經(jīng)完成一小半了煌恢,所有的要用到的配置文件都已經(jīng)配置好了瑰抵,剩下的只剩下代碼的編寫了二汛。

3、后臺(tái)代碼的編寫

1逛球、如目錄結(jié)構(gòu)颤绕,在java下新建一個(gè)package奥务,在該package下新建4個(gè)package以對應(yīng)springMVC結(jié)構(gòu)袜硫,分別為controller控制層婉陷,entity實(shí)體層秽澳,repository持久層(控制數(shù)據(jù)庫),service服務(wù)層楼吃。
<1>entity層
該層主要定義實(shí)體的字段孩锡,@Id定義主鍵躬窜,@GeneratedValue設(shè)置自增屬性荣挨,不必須,但一般有,@Table屬性為Jpa的自動(dòng)建表仍劈,設(shè)置后會(huì)在數(shù)據(jù)庫中自動(dòng)建立一個(gè)名為user的表(數(shù)據(jù)庫還是要自己建的)贩疙,字段上也可以加各種屬性,諸如非空组民,長度等臭胜。

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue
    private Integer id;

    private String name;

    private String job;

    private String phone;
    //以下加字段的set 與get方法癞尚,alt+insert鍵彈出快捷窗
}

<2>controller層
加@Controller以注明其為控制層浇揩,@RequestMapping注解表示其訪問路徑。該層主要負(fù)責(zé)控制积锅,將前端來的訪問請求轉(zhuǎn)發(fā)到對應(yīng)的處理service層养盗。第一步,注入service層

    private MyService myService;
    @Autowired
    public void setMyService(MyService myService) {
        this.myService = myService;
    }

這樣就可以直接調(diào)用seivice層接口蹬跃,將處理過程交給service層蝶缀,大幅縮減controller層代碼翁都,邏輯更加簡明谅猾。自動(dòng)注入之后編寫的增刪改查代碼如下

    @RequestMapping(value="/addOne",method= RequestMethod.GET)
    @ResponseBody
    public User inSave(@ModelAttribute User user)
    {
        myService.save(user);
        return user;
    }

    @RequestMapping(value="/findOne",method= RequestMethod.GET)
    @ResponseBody
    public JSONObject findOne(int id)
    {
        User user = myService.findOne(id);
        JSONObject json = new JSONObject();
        json.put("data",user);
        return json;
    }

    @RequestMapping(value="/deleteById",method= RequestMethod.GET)
    @ResponseBody
    public void deleteById(int id)
    {
        myService.delete(id);
        return ;
    }

    @RequestMapping(value="/modifyOne",method= RequestMethod.GET)
    @ResponseBody
    //WebRequest request, ModelMap model,@RequestBody User user
    public JSONObject modifyOne(@ModelAttribute User user){

        User user1=myService.saveAndFlush(user);
        JSONObject json = new JSONObject();
        json.put("data",user1);
        return json;
    }

看起來是不是很簡潔,因?yàn)樗阉械臉I(yè)務(wù)處理都交給service層了藏研,由于Jpa的相當(dāng)給力概行,你會(huì)發(fā)現(xiàn)service層也相當(dāng)簡潔凳忙,如果你沒有自定義的一些方法。如果不結(jié)合datatable插件勤家,那么查詢所有的信息的代碼也是很簡潔的

    @RequestMapping(value="/findAll",method= RequestMethod.GET)
    @ResponseBody
    public JSONObject findAll()
    {
        List<User> userList = myService.findAll();
        JSONObject json = new JSONObject();
        json.put("data",userList);

        return json;
    }

補(bǔ)充一點(diǎn)伐脖,如果不加@ResponseBody注解晓殊,那么上圖返回的內(nèi)容為“json.jsp”或者其他網(wǎng)頁格式伤提,而不是json格式的字段肿男。
<3>service層
在該層下,一般建立一個(gè)service接口與一個(gè)serviceImpl實(shí)現(xiàn)類嘹承,以符合分層思想與層之間以接口鏈接叹卷。

    public interface MyService {

    User save(User user);

    List<User> findAll();

    User findById(int id);

    List<User> findByName(String name);

    User findOne(int id);

    void delete(int id);

    User saveAndFlush(User user);
}

接口的實(shí)現(xiàn)類

@Service
@Transactional    //事務(wù)標(biāo)記
public class MyServiceImpl implements MyService{

    private MyRepository myRepository;

    @Autowired
    public void setMyRepository(MyRepository myRepository) {
        this.myRepository = myRepository;
    }

    public User save(User user)
    {
        myRepository.save(user);
        return user;
    }
    
    public List<User> findAll() {
        List<User> all = myRepository.findAll();
        return all;
    }

    public User findById(int id) {
        User user = myRepository.findById(id);
        return user;
    }

    public List<User> findByName(String name) {
        List<User> names = myRepository.findByName(name);
        return names;
    }

    public User findOne(int id) {
        User user=myRepository.findOne(id);
        return user;
    }

    public void delete(int id) {
        myRepository.delete(id);
    }

    public User saveAndFlush(User user) {
        User user1=myRepository.saveAndFlush(user);
        return user1;
    }

<4>reposiory層
也被稱為Dao層骤竹,主要負(fù)責(zé)對數(shù)據(jù)庫的操縱蒙揣,當(dāng)繼承了JpaRepository后懒震,便含有findAll,save,delete等各種自帶方法,如果沒有也可以使用findByxxx復(fù)寫方法瓷炮,程序會(huì)自動(dòng)進(jìn)行識(shí)別查找相應(yīng)的列崭别,當(dāng)然也可以加@Query注解完全自寫數(shù)據(jù)庫語句恐锣。

import com.zhang.Demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface MyRepository extends JpaRepository<User,Integer>{
    User findById(int id);
    List<User> findByName(String name);
}

至此土榴,后臺(tái)的業(yè)務(wù)邏輯處理就基本完成了玷禽,源碼中還有其他的一些代碼,那個(gè)是處理前臺(tái)傳輸過來的dataTable封裝好的json格式數(shù)據(jù)的矢赁,想看完整的功能還是建議參照源碼一起看撩银。注:每層的類都需要注明屬性额获,諸如實(shí)體層@Entity抄邀。

4昼榛、與datatable相關(guān)的部分前端與后臺(tái)處理

<1>前端datatable的固定定義代碼

    <script>
        $(document).ready( function () {
            var table = $('#myTable').DataTable({
                language: {
                    url: "scripts/zh_CN.txt"
                },
                info: true,
                paging: true,
                bServerSide: true, //是否啟動(dòng)服務(wù)器端數(shù)據(jù)導(dǎo)入
                sAjaxSource: "/demo/tableDemoAjax",         //請求的地址
                fnServerData: retrieveData,           // 獲取數(shù)據(jù)的處理函數(shù)
                autoWidth: false,  //禁用自動(dòng)調(diào)整列寬
                stripeClasses: ["odd", "even"],  //為奇偶行加上樣式胆屿,兼容不支持CSS偽類的場合
                processing: true,  //隱藏加載提示,自行處理
                serverSide: true,  //啟用服務(wù)器端分頁
                searching: false,  //禁用原生搜索
//                orderMulti: true,  //啟用多列排序
                order: [],  //取消默認(rèn)排序查詢,否則復(fù)選框一列會(huì)出現(xiàn)小箭頭
                renderer: "bootstrap",  //渲染樣式:Bootstrap和jquery-ui
                pagingType: "simple_numbers",  //分頁樣式:simple,simple_numbers,full,full_numbers
                columnDefs: [{
                    "targets": 'nosort',  //列的樣式名
                    "orderable": false    //包含上樣式名‘nosort’的禁止排序
                }],

                columns: [
                    {data: 'id'},
                    {data: 'name'},
                    {data: 'job'},
                    {data: 'phone'},
                    {data: function (obj) {
                        op = "<div id='toolbar' class='btn-group'>";
                        op1 = "<button id='btn_edit' type='button' class='btn btn-default' onclick='show_detail(" + obj.id + ");'><span class='glyphicon glyphicon-list' aria-hidden='true'></span>詳情</button>";
                        op2 = "<button id='btn_edit' type='button' class='btn btn-default' onclick='show_modify(" + obj.id + ");'><span class='glyphicon glyphicon-pencil' aria-hidden='true'></span>修改</button>";
                        op3 = "<button id='btn_edit' type='button' class='btn btn-default' onclick='show_delete(" + obj.id + ");'><span class='glyphicon glyphicon-remove' aria-hidden='true'></span>刪除</button>";
                        op_ = "</div>";
                        return op + op1  + op2  + op3 +op_;
                        }
                    }
                ]
            });

            function retrieveData(sSource, aoData, fnCallback) {
                $.ajax({
                    url: sSource,                              //這個(gè)就是請求地址對應(yīng)sAjaxSource
                    data: {"aoData": JSON.stringify(aoData)},   //這個(gè)是把datatable的一些基本數(shù)據(jù)傳給后臺(tái),比如起始位置,每頁顯示的行數(shù) ,分頁,排序,查詢等的值
                    type: 'GET',
                    dataType: 'json',
                    async: false,
                    success: function (result) {
                        fnCallback(result);                     //把返回的數(shù)據(jù)傳給這個(gè)方法就可以了,datatable會(huì)自動(dòng)綁定數(shù)據(jù)的
                    },
                    error: function (msg) {
                    }
                });
            }
        });
    </script>

sAjaxSource為訪問的路徑,retrieveData為數(shù)據(jù)傳輸定義彻秆,一定得是三個(gè)參數(shù),上圖的sSource就是sAjaxSource里得內(nèi)容桦锄,傳輸?shù)胶笈_(tái)的是一個(gè)json字符串蔫耽,封裝的內(nèi)容有很多,包括分頁匙铡、排序等參數(shù),詳情可以自行百度黑毅。
<2>后臺(tái)處理

 @RequestMapping(value="/tableDemoAjax",method= RequestMethod.GET)
    @ResponseBody
    public String tableDemoAjax(@RequestParam String aoData) {

        DataTableParameter dataTableParam = myService.getDataTableParameterByJsonParam(aoData);

        List<User> userList = myService.findAll();

        int iDisplayEnd=dataTableParam.getiDisplayStart()+dataTableParam.getiDisplayLength();
        if(userList.size()<iDisplayEnd)
            iDisplayEnd=userList.size();

        com.alibaba.fastjson.JSONObject getObj = new com.alibaba.fastjson.JSONObject();
        getObj.put("sEcho", dataTableParam.getsEcho());// 記錄訪問的次數(shù)
        getObj.put("iTotalRecords", userList.size());//實(shí)際的行數(shù)
        getObj.put("iTotalDisplayRecords", userList.size());//顯示的行數(shù),這個(gè)要和上面寫的一樣

        getObj.put("aaData", userList.subList(dataTableParam.getiDisplayStart(),iDisplayEnd));//要以JSON格式返回
        return getObj.toString();
    }

上述的getDataTableParameterByJsonParam(aoData)方法是自寫方法,定義在service層的接口愿卒,在實(shí)現(xiàn)類中實(shí)現(xiàn)方法琼开,詳情自看源碼。

5衬衬、結(jié)語

一定要參照源碼看滋尉,這樣更容易理解飞主。掛上去的源碼只要建個(gè)數(shù)據(jù)庫,庫名與配置文件中一致就可以直接運(yùn)行了碾篡,向時(shí)筆者學(xué)習(xí)的時(shí)候基本上找不到直接能跑的开泽,有的還有各種問題的穆律,給學(xué)習(xí)增加了不少麻煩。源碼
文中如有錯(cuò)誤或者更好的建議剔蹋,請不吝賜教泣崩。不理解的也非常歡迎留言交流矫付。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末买优,一起剝皮案震驚了整個(gè)濱河市樟遣,隨后出現(xiàn)的幾起案子身笤,更是在濱河造成了極大的恐慌豹悬,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件液荸,死亡現(xiàn)場離奇詭異瞻佛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)娇钱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門伤柄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人文搂,你說我怎么就攤上這事适刀∶翰洌” “怎么了常挚?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵吼过,是天一觀的道長那先。 經(jīng)常有香客問我斤葱,道長,這世上最難降的妖魔是什么衩茸? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任啃擦,我火速辦了婚禮聚霜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姥芥。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著豺总,像睡著了一般。 火紅的嫁衣襯著肌膚如雪表伦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音局劲,去河邊找鬼。 笑死剔氏,一個(gè)胖子當(dāng)著我的面吹牛羊苟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兼都,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慎王,長吁一口氣:“原來是場噩夢啊……” “哼蜀漆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后基公,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年宿刮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了僵缺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屋谭,到底是詐尸還是另有隱情我擂,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布坤塞,位于F島的核電站惜浅,受9級特大地震影響承绸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晤锹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦祖搓、人聲如沸镐作。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽户侥。三九已至刃泌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工到忽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留华烟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓吧慢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,822評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • Android 性能優(yōu)化 Android性能優(yōu)化主要有 布局優(yōu)化捆姜、繪制優(yōu)化、內(nèi)存泄漏優(yōu)化、響應(yīng)速度優(yōu)化、ListV...
    jiaming_閱讀 287評論 0 1
  • 不知道,最近為什么?很喜歡嘆氣贰您。 不知道令境,最近為什么?每個(gè)人喜歡討論畢業(yè)后的工作。 不知道,最近為什么?總是有下不...
    禾必閱讀 230評論 18 2