最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot+hibernate實(shí)現(xiàn)簡(jiǎn)單的增刪改查示例

 更新時(shí)間:2018年08月19日 10:55:41   作者:*眉間緣*  
今天小編就為大家分享一篇Springboot+hibernate實(shí)現(xiàn)簡(jiǎn)單的增刪改查示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

1、創(chuàng)建好項(xiàng)目之后在配置端口號(hào)(也可以不用配置,默認(rèn)端口8080)

#server
server.port=8080
server.tomcat.uri-encoding=utf-8

2、配置mysql

#MySQL
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
spring.datasource.username=*****
spring.datasource.password=*****

3、配置jpa以及視圖層

#Spring Data JPA
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

#視圖層控制
spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html
spring.mvc.static-path-pattern=/static/**

4、在pom中加入springboot需要的依賴

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.39</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
      <version>1.4.0.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
<!--    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
      <version>1.4.3.RELEASE</version>
    </dependency>-->
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
      <version>1.5.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.46</version>
    </dependency>


  </dependencies>

整個(gè)包結(jié)構(gòu)

Controller

package com.song.configuration.controller;

import com.alibaba.fastjson.JSONObject;
import com.song.configuration.entity.User;
import com.song.configuration.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;


/**
 * 
 * User控制層
 */
@Controller
@RequestMapping(value = "/user")
public class UserController {
  @Autowired
  private UserService userService;

  @RequestMapping(value = "/index")
  public String index(){
    return "user/index";
  }

  @RequestMapping(value = "/show",method = RequestMethod.GET)
  @ResponseBody
  public String show(@RequestParam(value = "name")String name){
    User user = userService.findUserByName(name);
    if(null != user)
      return user.getId()+"/"+user.getName()+"/"+user.getPassword();
    else return "null";
  }

  @RequestMapping("/showlist")
  @ResponseBody
  public JSONObject showList(){
    List<User> list = userService.find();
    JSONObject jo = new JSONObject();
    if(list!=null){

      jo.put("code",0);
      jo.put("msg",true);
      jo.put("count",list.size());
      jo.put("data",list);
    }
    return jo;
  }

  @RequestMapping("/delete")
  @ResponseBody
  public String deleteUserById(@RequestParam(value = "id")Integer id){
    return userService.deleteUserById(id);
  }

  @RequestMapping("/update")
  @ResponseBody
  public String queryUserById(@RequestParam(value = "id")Integer id,@RequestParam(value = "name")String name){

    return userService.queryUserById(id,name);
  }

  @RequestMapping("/add")
  @ResponseBody
  public String countUserBy(@RequestParam(value = "id")Integer id,@RequestParam(value = "name")String name,@RequestParam(value = "password")String password){
    return userService.countUserBy(id,name,password);
  }
}

service

package com.song.configuration.service;

import com.song.configuration.entity.User;
import com.song.configuration.repository.UserRepositoty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 
 * User業(yè)務(wù)邏輯
 */
@Service
public class UserService {
  @Autowired
  private UserRepositoty userRepositoty;

  public User findUserByName(String name) {
    User user = null;
    try {
      user = userRepositoty.findByUserName(name);
    } catch (Exception e) {
    }
    return user;
  }

  public List<User> find() {
    List<User> list = null;
    try {
      list = userRepositoty.find();
    } catch (Exception e) {
    }
    return list;
  }

  public String deleteUserById(Integer id){
    int a = userRepositoty.deleteUserById(id);
    return "chenggong";
  }

  public String queryUserById(Integer id ,String name){
    int a = userRepositoty.queryUserById(id,name);
    return "成功";
  }

  public String countUserBy(Integer id ,String name ,String password){
    int a = userRepositoty.countUserBy(id,name,password);
    return "成功";
  }
}

Repository

package com.song.configuration.repository;

import com.song.configuration.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created by Song on 2017/2/15.
 * User表操作接口
 */
@Repository
public interface UserRepositoty extends JpaRepository<User,Long>{
  /*
  * 根據(jù)用戶名查詢
  * */
  @Query("select t from User t where t.name = :name")
  User findByUserName(@Param("name") String name);

  /*
  * 查詢?nèi)?
  * */
  @Query("select t from User t")
  List<User> find();

  /*
  * 刪除 必須加入@Modifying和@Transactional
  * */
  @Modifying
  @Transactional
  @Query("delete from User u where u.id=:id")
  public int deleteUserById(@Param("id") Integer id);


  @Modifying
  @Transactional
  @Query("update User u set u.name = :name where u.id=:id")
  public int queryUserById(@Param("id") Integer id,@Param("name") String name);
    
  @Query(value = "insert into User value(?,?,?)", nativeQuery = true)
  @Transactional
  @Modifying
  public int countUserBy(@Param("id")Integer id,@Param("name") String name,@Param("password") String password);
}

@modifying:

(1)可以通過(guò)自定義的 JPQL 完成 UPDATE 和 DELETE 操作。注意: JPQL 不支持使用 INSERT;

(2)在 @Query 注解中編寫(xiě) JPQL 語(yǔ)句, 但必須使用 @Modifying 進(jìn)行修飾. 以通知   SpringData, 這是一個(gè) UPDATE 或 DELETE 操作

(3)UPDATE 或 DELETE 操作需要使用事務(wù),此時(shí)需要定義 Service 層,在 Service 層的方法上添加事務(wù)操作;

(4)默認(rèn)情況下, SpringData 的每個(gè)方法上有事務(wù), 但都是一個(gè)只讀事務(wù)。

@Transactional:

A. 一個(gè)功能是否要事務(wù),必須納入設(shè)計(jì)、編碼考慮。不能僅僅完成了基本功能就ok。

B. 如果加了事務(wù),必須做好開(kāi)發(fā)環(huán)境測(cè)試(測(cè)試環(huán)境也盡量觸發(fā)異常、測(cè)試回滾),確保事務(wù)生效。

C. 以下列了事務(wù)使用過(guò)程的注意事項(xiàng),請(qǐng)大家留意。

1. 不要在接口上聲明@Transactional ,而要在具體類的方法上使用 @Transactional 注解,否則注解可能無(wú)效。

2.不要圖省事,將@Transactional放置在類級(jí)的聲明中,放在類聲明,會(huì)使得所有方法都有事務(wù)。故@Transactional應(yīng)該放在方法級(jí)別,不需要使用事務(wù)的方法,就不要放置事務(wù),比如查詢方法。否則對(duì)性能是有影響的。

3.使用了@Transactional的方法,對(duì)同一個(gè)類里面的方法調(diào)用,

@Transactional無(wú)效。比如有一個(gè)類Test,它的一個(gè)方法A,A再調(diào)用Test本類的方法B(不管B是否public還是private),但A沒(méi)有聲明注解事務(wù),而B(niǎo)有。則外部調(diào)用A之后,B的事務(wù)是不會(huì)起作用的。(經(jīng)常在這里出錯(cuò))

4.使用了@Transactional的方法,只能是public,@Transactional注解的方法都是被外部其他類調(diào)用才有效,故只能是public。道理和上面的有關(guān)聯(lián)。故在

protected、private 或者 package-visible 的方法上使用 @Transactional

注解,它也不會(huì)報(bào)錯(cuò),但事務(wù)無(wú)效。

5.經(jīng)過(guò)在ICORE-CLAIM中測(cè)試,效果如下:

A.拋出受查異常XXXException,事務(wù)會(huì)回滾。

B.拋出運(yùn)行時(shí)異常NullPointerException,事務(wù)會(huì)回滾。

C.Quartz中,execute直接調(diào)用加了@Transactional方法,可以回滾;間接調(diào)用,不會(huì)回滾。(即上文3點(diǎn)提到的)

D.異步任務(wù)中,execute直接調(diào)用加了@Transactional方法,可以回滾;間接調(diào)用,不會(huì)回滾。(即上文3點(diǎn)提到的)

E.在action中加上@Transactional,不會(huì)回滾。切記不要在action中加上事務(wù)。

F.在service中加上@Transactional,如果是action直接調(diào)該方法,會(huì)回滾,如果是間接調(diào),不會(huì)回滾。(即上文3提到的)

G.在service中的private加上@Transactional,事務(wù)不會(huì)回滾。

application:

package com.song.configuration;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

/**
 * 
 * 項(xiàng)目啟動(dòng)入口,配置包根路徑
 */
@SpringBootApplication
@ComponentScan(basePackages = "com.song.configuration")
public class Entry {
  public static void main(String[] args) throws Exception {
    SpringApplication.run(Entry.class, args);
  }
}

Jpaconfiguration:

package com.song.configuration;

import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;


@Order(Ordered.HIGHEST_PRECEDENCE)
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@EnableJpaRepositories(basePackages = "com.song.configuration.repository")
@EntityScan(basePackages = "com.song.configuration.entity")
public class JpaConfiguration {
  @Bean
  PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor(){
    return new PersistenceExceptionTranslationPostProcessor();
  }
}

其他包要在jpaconfiguration所在包下面,不然找不到路徑

以上這篇Springboot+hibernate實(shí)現(xiàn)簡(jiǎn)單的增刪改查示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • maven搭建spring項(xiàng)目(圖文教程)

    maven搭建spring項(xiàng)目(圖文教程)

    下面小編就為大家?guī)?lái)一篇maven搭建spring項(xiàng)目(圖文教程)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 一看就懂 詳解JAVA泛型通配符T,E,K,V區(qū)別

    一看就懂 詳解JAVA泛型通配符T,E,K,V區(qū)別

    泛型從字面上理解,是指一個(gè)類、接口或方法支持多種類型,使之廣泛化、一般化和更加通用。通配符只有在修飾一個(gè)變量時(shí)會(huì)用到,使用它可方便地引用包含了多種類型的泛型;下面我們來(lái)深入了解一下吧
    2019-06-06
  • Spring AOP注解實(shí)戰(zhàn)指南

    Spring AOP注解實(shí)戰(zhàn)指南

    在現(xiàn)代軟件開(kāi)發(fā)中,面向切面編程(AOP)是一種強(qiáng)大的編程范式,本文將介紹如何在Spring框架中通過(guò)AspectJ注解以及對(duì)應(yīng)的XML配置來(lái)實(shí)現(xiàn)AOP,在不改變主業(yè)務(wù)邏輯的情況下增強(qiáng)應(yīng)用程序的功能,需要的朋友可以參考下
    2024-06-06
  • SpringBoot日志打印實(shí)踐過(guò)程

    SpringBoot日志打印實(shí)踐過(guò)程

    文章介紹了如何在SpringBoot項(xiàng)目中使用Logback實(shí)現(xiàn)日志打印,并通過(guò)自定義日志打印工具類和日志分文件打印來(lái)提高日志排查和監(jiān)控的效率
    2024-12-12
  • 詳解Spring boot Admin 使用eureka監(jiān)控服務(wù)

    詳解Spring boot Admin 使用eureka監(jiān)控服務(wù)

    本篇文章主要介紹了詳解Spring boot Admin 使用eureka監(jiān)控服務(wù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • SpringBoot整合minio服務(wù)的示例代碼

    SpringBoot整合minio服務(wù)的示例代碼

    本文主要介紹了SpringBoot整合minio服務(wù)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • java中@JsonValue和@JsonCreator使用

    java中@JsonValue和@JsonCreator使用

    本文主要介紹了java中@JsonValue和@JsonCreator使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Java設(shè)計(jì)模式之橋梁(Bridge)模式

    Java設(shè)計(jì)模式之橋梁(Bridge)模式

    這篇文章主要介紹了Java設(shè)計(jì)模式之橋梁(Bridge)模式,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java設(shè)計(jì)模式的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 詳解spring security四種實(shí)現(xiàn)方式

    詳解spring security四種實(shí)現(xiàn)方式

    這篇文章主要介紹了詳解spring security四種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java并發(fā)編程之對(duì)象的組合

    Java并發(fā)編程之對(duì)象的組合

    這篇文章主要介紹了Java并發(fā)編程之對(duì)象的組合,文章基于Java的相關(guān)資料展開(kāi)主題內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04

最新評(píng)論

井冈山市| 九寨沟县| 绿春县| 定陶县| 长兴县| 彭山县| 静宁县| 历史| 彭泽县| 清水县| 扎鲁特旗| 同心县| 聂拉木县| 海安县| 郓城县| 蚌埠市| 汉寿县| 新乡市| 抚顺县| 乐都县| 宁晋县| 堆龙德庆县| 怀来县| 保山市| 射洪县| 临安市| 贵定县| 如皋市| 安西县| 仙游县| 夏河县| 崇阳县| 前郭尔| 溧水县| 山西省| 莎车县| 鹤山市| 乌兰察布市| 吉隆县| 无棣县| 九寨沟县|