栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringDataJpa的单表查询

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringDataJpa的单表查询

【1】之前已经进行了Jpa的作用和利用hibernate进行操作对象来操作数据库,而SpringDataJPA更加的简单,方便,帮助我们进行面向对象的数据库操作。

【2】jar包代码

        



    4.0.0

    cn.itcast
    japday02
    1.0-SNAPSHOT

    
    
        4.2.4.RELEASE
        5.0.7.Final
        1.6.6
        1.2.12
        0.9.1.2
        5.1.6
    

    
        
        
            junit
            junit
            4.9
            test
        

        
        
            org.aspectj
            aspectjweaver
            1.6.8
        

        
            org.springframework
            spring-aop
            ${spring.version}
        

        
            org.springframework
            spring-context
            ${spring.version}
        

        
            org.springframework
            spring-context-support
            ${spring.version}
        

        
            org.springframework
            spring-orm
            ${spring.version}
        

        
            org.springframework
            spring-beans
            ${spring.version}
        

        
            org.springframework
            spring-core
            ${spring.version}
        

        

        
        
            org.hibernate
            hibernate-core
            ${hibernate.version}
        
        
            org.hibernate
            hibernate-entitymanager
            ${hibernate.version}
        
        
            org.hibernate
            hibernate-validator
            5.2.1.Final
        
        

        
        
            c3p0
            c3p0
            ${c3p0.version}
        
        

        
        
            log4j
            log4j
            ${log4j.version}
        

        
            org.slf4j
            slf4j-api
            ${slf4j.version}
        

        
            org.slf4j
            slf4j-log4j12
            ${slf4j.version}
        
        


        
            mysql
            mysql-connector-java
            ${mysql.version}
        

        
            org.springframework.data
            spring-data-jpa
            1.9.0.RELEASE
        

        
            org.springframework
            spring-test
            ${spring.version}
        

        
        
            javax.el
            javax.el-api
            2.2.4
        

        
            org.glassfish.web
            javax.el
            2.2.4
        
        

        
        
            javax.xml.bind
            jaxb-api
            2.3.0
        
    

【2】环境配置

        



        
    
    
        
        
        
        
        
            
        
        
        
            
                
                
                
                
                
                
                
                
            
        
        
        
            
        
    
    
    
        
        
        
        
    
    
    

    
    
        
    
    
    
    
    
    
        
            
            
            
            
            
            
            
        
    
    
    
        
        
    

    
    

         我们的SpringData的配置文件是基于Spring 的,可以看到EntityManager已经被添加到了XML配置文件中,而且通过之前的学习,应该知道事务也是由EntityManager得到的,所以我们的事务管理器配置的是EntityManagerFactory工厂,而不是DataSource,如果想在service使用事务,再添加一个事务声明,或者注解事务即可。

        最后我们需要整合SpringDataJpa,就是把dao层接口,事务和EntityManager结合起来。

        当然别忘记我们的Context:component-scan标签,开启IOC扫描

【3】实体类

         加上getter/setter和toString

@Repository
@Entity
@Table(name = "cst_customer")
public class Customer {
//    CREATE TABLE `cst_customer` (
//            `cust_id` bigint(32) NOT NULL AUTO_INCREMENT,
//  `cust_address` varchar(255) DEFAULT NULL,
//  `cust_industry` varchar(255) DEFAULT NULL,
//  `cust_level` varchar(255) DEFAULT NULL,
//  `cust_name` varchar(255) DEFAULT NULL,
//  `cust_source` varchar(255) DEFAULT NULL,
//  `cust_phone` varchar(255) DEFAULT NULL,
//    PRIMARY KEY (`cust_id`)
//) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "cust_id")
    private Long custId;
    @Column(name = "cust_address")
    private String custAddress;
    @Column(name = "cust_industry")
    private String custIndustry;
    @Column(name = "cust_level")
    private String custLevel;
    @Column(name = "cust_name")
    private String custName;
    @Column(name = "cust_source")
    private String custSource;
    @Column(name = "cust_phone")
    private String cusrPhone;

【4】dao层接口

         这里dao层只需要继承JpaRespository和JpaSpecificationExcutor这两个接口即可使用我们的SpringDateJpa了

public interface CustmoerDao extends JpaRepository,JpaSpecificationExecutor{
   

* JpaRepository<操作实体类类型,实体类中主键属性类型> 封装了基本的crud操作
* JpaSpecificationExecutor<操作的实体类类型>装了复杂查询,分页操作等

 可以看到JpaRespository下面有一个实现类,SimpleJpaRepository。

SimpleJpaRepository下面就有我们能直接用的方法,例如save保存。findAll查询全部,count统计数量,delete删除,exist是否存在等

【5】用SimpleJpaRepository中的方法进行测试

@RunWith(SpringJUnit4ClassRunner.class)//声明spring提供的单元测试环境
@ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息,xml文件用location配置
public class CustomerDaoTest {
    @Autowired
    private CustmoerDao custmoerDao;
    @Autowired
    private Customer customer;
    @Test
    public void findOne(){
        Customer one = custmoerDao.findOne(1l);
        System.out.println(one);
    }
    
    @Test
    public void testSave(){
        customer.setCustName("高**");
        customer.setCusrPhone("1233232322");
        customer.setCustAddress("松原");
        customer.setCustLevel("3");
        customer.setCustIndustry("造船厂");
        customer.setCustSource("高富帅");
        custmoerDao.save(customer);
    }
    @Test
    public void testDelete(){
        custmoerDao.delete(4l);
    }
    @Test
    public void testFindAll(){
        List all = custmoerDao.findAll();
        for (Customer customer1 : all) {
            System.out.println(customer1);
        }
    }
    
    @Test
    public void testCount(){
        long count = custmoerDao.count();//查询所有客户的数量
        System.out.println(count);
    }
    @Test
    public void testExist(){
        boolean exists = custmoerDao.exists(1l);
        System.out.println(exists);
    }

【6】如果想进行条件查询还是需要用到我们的Jpql语句,当然我们也可以用sql语句

         如果使用jpql查询,就需要在我们的Dao层接口下添加方法。

         方法都是用@Query注解写入语句,参数占位符是有顺序的。

public interface CustmoerDao extends JpaRepository,JpaSpecificationExecutor{
    
    @Query(value = "from Customer where custName=?")
    public Customer findByNameJpql(String name);

    
    //占位符默认情况下是按照顺序来的
    //当然我们也可以改,例如,在问号后面加索引,就代表了取第几个参数
    //@Query("from Customer where custName=?2 and custId=?1")
    @Query("from Customer where custName=? and custId=?")
    public Customer findByNameAndId(String name,Long id);

    
    @Query(value="update Customer set custName=? where custId=?")
    @Modifying
    public void upDate(String name,Long id);

        如果想用sql语句就需要在Query中添加一个nativeQuery,就是是否本地查询的意思,默认为Flase,就是通过jpql查询,如果设置为True,就是本地的sql查询

        例如:

 
    @Query(value = "select * from cst_customer where cust_Name like ?" ,nativeQuery = true)
    public List findByLike(String name);

【7】最后提示以下,使用SpringDataJpa进行jpql的删除增加更改的时候,都需要加入事务的支持

  
    @Test
    @Transactional(propagation = Propagation.REQUIRED)//jpql的增删改都需要添加事务的支持
    @Rollback(value = false)
    public void testUpdate(){
        custmoerDao.upDate("he***",3l);
    }

【8】根据方法名的约定,SpringDataJpa是支持通过方法名,后台自动帮我们搞定sql语句的

         什么意思呢?就是我们写的方法名只要符合规范,就不需要再写任何代码

        例如FindBy,后面只需要+我们想要根据实体类中的哪一个属性进行查询,而且支持拼接,如And,Or。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/672921.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号