• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Springboot+hibernate实现简单的增删改查示例

springboot 搞代码 4年前 (2022-01-05) 24次浏览 已收录 0个评论

今天小编就为大家分享一篇Springboot+hibernate实现简单的增删改查示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

1、创建好项目之后在配置端口号(也可以不用配置,默认端口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需要的依赖

   org.springframework.bootspring-boot-starter-web<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> mysqlmysql-connector-java5.1.39<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf --> org.springframework.bootspring-boot-starter-thymeleaf1.4.0.RELEASE<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc --><!--     org.springframework.boot spring-boot-starter-jdbc 1.4.3.RELEASE --><!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa --> org.springframework.bootspring-boot-starter-data-jpa1.5.1.RELEASE com.alibabafastjson1.2.46

整个包结构

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(){ retu<strong style="color:transparent">来源gao@daima#com搞(%代@#码网</strong>rn "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 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业务逻辑 */ @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 find() { List 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{ /* * 根据用户名查询 * */ @Query("select t from User t where t.name = :name") User findByUserName(@Param("name") String name); /* * 查询全部 * */ @Query("select t from User t") List 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)可以通过自定义的 JPQL 完成 UPDATE 和 DELETE 操作。注意: JPQL 不支持使用 INSERT;

(2)在 @Query 注解中编写 JPQL 语句, 但必须使用 @Modifying 进行修饰. 以通知   SpringData, 这是一个 UPDATE 或 DELETE 操作

(3)UPDATE 或 DELETE 操作需要使用事务,此时需要定义 Service 层,在 Service 层的方法上添加事务操作;

(4)默认情况下, SpringData 的每个方法上有事务, 但都是一个只读事务。

@Transactional:

A. 一个功能是否要事务,必须纳入设计、编码考虑。不能仅仅完成了基本功能就ok。

B. 如果加了事务,必须做好开发环境测试(测试环境也尽量触发异常、测试回滚),确保事务生效。

C. 以下列了事务使用过程的注意事项,请大家留意。

1. 不要在接口上声明@Transactional ,而要在具体类的方法上使用 @Transactional 注解,否则注解可能无效。

2.不要图省事,将@Transactional放置在类级的声明中,放在类声明,会使得所有方法都有事务。故@Transactional应该放在方法级别,不需要使用事务的方法,就不要放置事务,比如查询方法。否则对性能是有影响的。

3.使用了@Transactional的方法,对同一个类里面的方法调用,

@Transactional无效。比如有一个类Test,它的一个方法A,A再调用Test本类的方法B(不管B是否public还是private),但A没有声明注解事务,而B有。则外部调用A之后,B的事务是不会起作用的。(经常在这里出错)

4.使用了@Transactional的方法,只能是public,@Transactional注解的方法都是被外部其他类调用才有效,故只能是public。道理和上面的有关联。故在

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

注解,它也不会报错,但事务无效。

5.经过在ICORE-CLAIM中测试,效果如下:

A.抛出受查异常XXXException,事务会回滚。

B.抛出运行时异常NullPointerException,事务会回滚。

C.Quartz中,execute直接调用加了@Transactional方法,可以回滚;间接调用,不会回滚。(即上文3点提到的)

D.异步任务中,execute直接调用加了@Transactional方法,可以回滚;间接调用,不会回滚。(即上文3点提到的)

E.在action中加上@Transactional,不会回滚。切记不要在action中加上事务。

F.在service中加上@Transactional,如果是action直接调该方法,会回滚,如果是间接调,不会回滚。(即上文3提到的)

G.在service中的private加上@Transactional,事务不会回滚。

application:

 package com.song.configuration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; /** * * 项目启动入口,配置包根路径 */ @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实现简单的增删改查示例的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Springboot+hibernate实现简单的增删改查示例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址