博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring data jpa 入门
阅读量:6840 次
发布时间:2019-06-26

本文共 9552 字,大约阅读时间需要 31 分钟。

hot3.png

初衷

项目中有用到spring data jpa,简单看了一下,在基础的数据库操作上,要比mybatis好用,简化了持久层的操作,使coder可以专注于业务逻辑的实现。网上参考了一些文章,实际coding的时候还是出好多错误。这里通过CRUD,记录摸索填坑的过程。详细的概念可以参考文末的文章。


创建工程

创建一个maven工程。

这里写图片描述


配置

web.xml

spring-jpa-web
appServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring.xml
1
appServlet
/

pom.xml

特别说明,spring-data-jpa要用版本1.9.0.RELEASE。

4.0.0
org.wxs.spring
spring-jpa-web
war
0.1.0
4.3.0.RELEASE
1.9.0.RELEASE
1.12.6.RELEASE
4.2.5.Final
org.springframework.data
spring-data-jpa
${spring_jpa_version}
org.hibernate
hibernate-core
${hibernate.version}
org.hibernate
hibernate-entitymanager
${hibernate.version}
org.hibernate
hibernate-ehcache
${hibernate.version}
org.apache.tomcat
tomcat-jdbc
7.0.54
mysql
mysql-connector-java
5.1.35
org.springframework
spring-core
${spring_version}
org.springframework
spring-beans
${spring_version}
org.springframework
spring-web
${spring_version}
org.springframework
spring-webmvc
${spring_version}
org.springframework
spring-context
${spring_version}
org.springframework
spring-orm
${spring_version}
org.springframework
spring-tx
${spring_version}
org.springframework
spring-jdbc
${spring_version}
org.springframework
spring-context-support
${spring_version}
org.springframework
spring-test
${spring_version}
junit
junit
4.12
test
org.apache.tomcat
tomcat-servlet-api
8.0.3
provided
org.apache.tomcat
jsp-api
6.0.39
provided
jstl
jstl
1.2
javax.servlet.jsp
jsp-api
2.1
provided

spring.xml

Spring公共配置
org.hibernate.cfg.ImprovedNamingStrategy

属性文件

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/seckill?useUnicode=true&characterEncoding=utf8jdbc.username=rootjdbc.password=adminjdbc.pool.maxIdle=5jdbc.pool.maxActive=10

Entity

新建表

新建表 user

这里写图片描述

实体类

新建实体类User

@Entity@Table(name = "user")public class User {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "name") private String name; @Column(name = "password") private String password; @Column(name = "birthday") private Date birthday; /** * The default constructor only exists for the sake of JPA. You won’t use it directly, so it is designated as protected. */ protected User() { } public User(String name, String password, Date birthday) { this.name = name; this.password = password; this.birthday = birthday; }getter、setter省略

DAO层

创建接口UserRepository

public interface UserRepository extends JpaRepository
{
}

测试

新增

@Test    public void test1(){        User user=new User("SL1","123",new Date());        userRepository.save(user);        System.out.println("save success");    }

这里写图片描述

查询

查询全部

@Test    public void test2(){        for (User user:userRepository.findAll()) {            System.out.println(user);        }        System.out.println("search all success");    }

查询结果

User{id=9, name='SL1', password='123', birthday=2017-01-12 00:00:00.0}User{id=10, name='SL1', password='123', birthday=2017-01-12 00:00:00.0}User{id=11, name='SL1', password='123', birthday=2017-01-13 00:00:00.0}search all success

根据ID查询

@Test    public void test3(){        System.out.println(userRepository.findOne(9));        System.out.println("search one success");    }

查询结果

User{id=9, name='SL1', password='123', birthday=2017-01-12 00:00:00.0}search one success

更新

如果有Id,jpa会认为是更新,没有则是新增。

@Test    public void test4(){        User user=new User("SL99","123",new Date());        user.setId(9);        userRepository.save(user);        test3();        System.out.println("update success");    }

更新成功

User{id=9, name='SL99', password='123', birthday=2017-01-13 00:00:00.0}search one successupdate success

删除

@Test    public void test5(){        userRepository.delete(9);        test3();        System.out.println("delete success");    }

删除成功

nullsearch one successdelete success

踩过的坑

坑1

java.lang.AbstractMethodError: org.springframework.data.repository.core.support.RepositoryFactorySupport.getTargetRepository(Lorg/springframework/data/repository/core/RepositoryInformation;)Ljava/lang/Object;

Deleting the spring-data-commons and changing the spring-data-jpa version to 1.9.0.RELEASE like @peeskillet said now works fine!

这也是为什么pom文件中spring-data-jpa要配置1.9.0.RELEASE的版本。

坑2

java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object

Dao层的接口继承JpaRepository的时候加上泛型。添加域对象类型和主键类型。

public interface UserRepository extends JpaRepository<User,Integer>

坑3

org.hibernate.InstantiationException: No default constructor for entity: com.wx.jpa.entities.User

新增、根据ID查询这2个方法不会报这个异常。

Hibernate在创建Bean的时候需要User的默认构造方法。中也有讲到。

You also have two constructors. The default constructor only exists
for the sake of JPA. You won’t use it directly, so it is designated
as protected. The other constructor is the one you’ll use to create
instances of Customer to be saved to the database.


欢迎感兴趣的同学指正。。。


参考:

转载于:https://my.oschina.net/wuxinshui/blog/847568

你可能感兴趣的文章
Mint17 FireFox重装英文版问题
查看>>
linux下C++ 插件(plugin)实现技术
查看>>
GCD基础知识
查看>>
file invalid or corrupt". -vs2010
查看>>
各种yum源
查看>>
Centos6安装Zabbix3.4
查看>>
我的友情链接
查看>>
solr7.6 安装配置
查看>>
Android菜单详解(一)——理解android中的Menu
查看>>
Android四大组件
查看>>
谁是前生埋你的人?
查看>>
Java Magic. Part 5: SecurityManager
查看>>
一个好的网站,应该用什么样的空间or服务器?建站基础知识普及
查看>>
Webservice开发流程
查看>>
shell:oracle安装前环境设置
查看>>
java 读取配置文件中的列表
查看>>
Tomcat关闭日志catalina.out
查看>>
常用查看文件命令
查看>>
ApplicationContext对象的获取方式
查看>>
MySQL多实例学习笔记
查看>>