【SpringDataJPA】——SpringDataJPA入门实例

简介:   Spring经常喜欢做的事情就是封装,经过spring的封装结出的一大果实——SpringDataJPA可以很大程度上提高我们持久层的开发效率。

 Spring经常喜欢做的事情就是封装,经过spring的封装结出的一大果实——SpringDataJPA可以很大程度上提高我们持久层的开发效率。

 在SpringDataJPA下,只需要关注业务实现,无需关注持久层的逻辑,需要做的工作只是声明持久层的接口,并不需要亲自实现,实现接口这些工作SpringDataJPA都会帮你做好。它有个比较智能的特点,可以根据接口名称来判断你想进行的操作。比如针对UserDO定义如下一个Dao层接口:


public class UserDO{
    private Long id;
    private String name;
}
public interface UserDAO extends PagingAndSortingRepository<UserDO,Long>{
    public UserDO findUserById(Long id);
    public UserDO findUserByIdAndName(Long id,String name)
}


 仅仅需要定义上面的接口,不需要任何实现,调用的时候SpringDataJPA会自动根据findUserById方法的名字判断出来是根据id查询用户,根据findUserByIdAndName判断出是根据id和name查询用户,前提是接口名称需要遵守规范,SpringDataJPA就规定了方法命名的规范,规定方法前缀(find、read、get)、字段命名格式(字段首字母大写)、关键字(And、Or……),详细规范可参考《Spring Data JPA方法定义规范》、《SpringDataJPA方法命名与操作对照》。

 下面主要分享个入门时的小例子:

 实体类UserDO.java


@Entity
@Table(name="t_user")
public class UserDO extends BaseEntity{
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private Long id;
    @Column(name = "name")
    private String name;
    public Long getId() {
        return id;
    }
    public UserDO setId(Long id) {
        this.id = id;
        return this;
    }
    public String getName() {
        return name;
    }
    public UserDO setName(String name) {
        this.name = name;
        return this;
    }
}


  对应接口UserDAO.java

public interface UserDAO extends PagingAndSortingRepository<UserDO,Long> {
    public UserDO findById(Long id);
    public UserDO findByIdAndName(Long id,String name);
}


  SpringDataJPA配置文件applicationContext-persistence.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:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       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.2.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.2.xsd
      http://www.springframework.org/schema/data/jpa
      http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd">
    <context:component-scan base-package="com.danny.springdata.dao"/>
    <bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan" value="com.danny.springdata.entities"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <!-- 自动建表 -->
                <prop key="hibernate.ddl-auto">update</prop>
            </props>
        </property>
    </bean>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/springdatajpa"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="myEmf"/>
    </bean>
    <tx:annotation-driven/>
    <bean id="persistenceExceptionTranslationPostProcessor"
          class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
    <jpa:repositories base-package="com.danny.springdata.dao"
                      entity-manager-factory-ref="myEmf"
                      transaction-manager-ref="transactionManager"/>
</beans>


   测试UserDAOTest.java


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:applicationContext-*.xml"})
public class UserDAOTest{
    @Autowired
    private UserDAO userDAO;
    @Test
    public void findByIdTest() {
        UserDO userDO=userDAO.findById(1L);
        Assert.assertNotNull(userDO);
    }
    @Test
    public void findByIdAndNameTest() {
        UserDO userDO=userDAO.findByIdAndName(1L,"danny");
        Assert.assertNotNull(userDO);
    }
}

仅仅如此,so easy!

  源码地址:git@github.com:DannyHoo/SpringDataJPADemo.git


相关文章
|
9月前
|
PyTorch API 算法框架/工具
AscendC从入门到精通系列(四)使用Pybind调用AscendC算子
本文介绍了如何通过Pybind11在PyTorch框架中调用自定义的Ascend C算子。首先,通过编写算子的C++实现和pybind11封装,将算子功能暴露给Python。接着,构建Python调用脚本,利用torch接口生成数据并调用封装好的算子模块。最后,通过CMake配置文件编译整个项目,实现从算子开发到测试的完整流程。
|
9月前
|
自然语言处理 搜索推荐 前端开发
语镜VocaMirror——基于sensevoice、cosyvoice和qwen模型实现与“自身声音”对话
语镜 VocaMirror 是一个创新的对话系统,灵感来源于汤姆猫游戏和亲人语音克隆项目,旨在让用户与自己的声音进行对话。系统融合了语音识别、自然语言处理及个性化语音合成技术,提供趣味互动、心理治疗辅助及多功能扩展等应用。用户可通过 Gradio 界面轻松使用,实现语音转文本、对话生成及个性化语音回复等功能。
715 4
语镜VocaMirror——基于sensevoice、cosyvoice和qwen模型实现与“自身声音”对话
|
9月前
|
机器学习/深度学习 人工智能 达摩院
ClearerVoice-Studio:阿里通义开源的语音处理框架,提供语音增强、分离和说话人提取等功能
ClearerVoice-Studio 是阿里巴巴达摩院通义实验室开源的语音处理框架,集成了语音增强、分离和音视频说话人提取等功能。该框架基于复数域深度学习算法,能够有效消除背景噪声,保留语音清晰度,并提供先进的预训练模型和训练脚本,支持研究人员和开发者进行语音处理任务。
1687 3
ClearerVoice-Studio:阿里通义开源的语音处理框架,提供语音增强、分离和说话人提取等功能
|
消息中间件 存储 Kafka
Kafka 如何保证消息顺序及其实现示例
Kafka 如何保证消息顺序及其实现示例
510 0
|
9月前
|
机器学习/深度学习 算法 网络协议
开源上新|通义语音处理技术ClearerVoice-Studio
开源上新|通义语音处理技术ClearerVoice-Studio
|
druid Java 关系型数据库
Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源
Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源
1213 0
|
SQL 数据库 Python
SqlAlchemy 2.0 中文文档(十)(3)
SqlAlchemy 2.0 中文文档(十)
157 1
Element UI【实战范例】下拉选择 el-select 的 change 事件传入选中值+自定义参数
Element UI【实战范例】下拉选择 el-select 的 change 事件传入选中值+自定义参数
2646 1
|
存储 Linux
Linux文件的上和下,FinalShell文件右键可下文件,先选择root文件夹,然后把他文件往里面拖动,就可以下载了,命令下载,ls -l可以看当前文件目录,sz 文件名可下载,tab补,rz出上
Linux文件的上和下,FinalShell文件右键可下文件,先选择root文件夹,然后把他文件往里面拖动,就可以下载了,命令下载,ls -l可以看当前文件目录,sz 文件名可下载,tab补,rz出上
|
安全 API 开发工具
微信开发:API接口与ipad协议的深度比较及最佳选择
微信开发:API接口与ipad协议的深度比较及最佳选择
1638 0