JPA(hibernate)初步实践


前言

一、JPA是什么?

JPA是sun官方提出的java持久化规范.它为java开发人员提供了一种对象/关系映射工具来管理java应用中的关系数据.为了简化现有的持久化开发工作和整合orm技术,结束Hibernate丶TopLine丶JDO等ORM框架各自为营的局面.

二、快速上手

1.pom.xml

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

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.application.properties

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#mysql数据库连接

#JPA相关信息
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
spring.jpa.properties.hibernate.format_sql=true
#logging.level.root=DEBUG
spring.jpa.properties.hibernate.hbm2ddl.auto=update

3.实体类

import javax.persistence.*;

@Entity   //标注为实体
@Table(name="user")    //对应mysql表  
public class User{

    @Id  //标注为主键  唯一
    @GeneratedValue(strategy = GenerationType.IDENTITY) //ID自增
    @Column(name = "id")  //列名
    private Integer id;

    @Column(name = "user_name")
    private String userName;

    @Column(name = "user_password")
    private String userPassword;
}

4.编写Repository

public interface UserRepository extends JpaRepository<User, Integer> {
	//JpaRepository<User, Integer>  提供了一些普通通用的方法  (增丶删丶改,查)

	//自定义方法(增丶删丶改,查)需要按照一定命名规则
    public List<User> findByUserName(String userName);       //按照用户名查询

    public List<User> findByUserNameLike(String userName);   //按照用户名模糊查询

	
	//如果是删除和修改方法  需要添加 @Modifying   
    @Modifying   
    @Query("delete from User where id=?1")  //自定义HQL
    //User 代表实体类   
    @Query(value = "select * from demo",nativeQuery = true)   //原生sql 添加参数nativeQuery = true
    public void deleteById(Integer id);

    @Transactional(timeout = 10)  //事务(操作超时设置等)
    @Modifying
    @Query("update  User d set d.userName=?1 where d.id=?2")
    public int updateById(String userName, Integer id);

	@Query("select u from User u")  //分页
    public Page<User> findPageByMap(Pageable pageable);

	//除了@Query还可以在实体类上标明
	@NamedQueries(@NamedQuerie(name="User.findUserByName",query="select u from User u"))
    
}

5.编写测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo1ApplicationTests {

	//注入
    @Resource
    private DemoRepository demoRepository;
    
    @Test
    public void contextLoads() {
    }

    @Test
    public void testGet() {     //测试查找
        Demo user = demoRepository.findById(1).get();
        System.out.println(user.getUserName());
    }

    @Test
    public void testAdd() { //测试新增
        Demo user = new Demo();
        user.setUserName("33333");
        user.setUserPassword("33333");
        Demo num = demoRepository.save(user);
        System.out.println(num);
    }


	//自定义方法
    @Test   
    public void testFindByUserName() {   
        List<Demo> users = demoRepository.findByUserName("111");
        users.forEach(u -> System.out.println(u));     //java8版本循环
    }

    @Test
    public void testFindByUserNameLike() {   //模糊查询加%
        List<Demo> users = demoRepository.findByUserNameLike("%2%");
        users.forEach(u -> System.out.println(u));
    }


    @Test
    public void testDeleteById() {   //删除
        demoRepository.deleteById(1);
    }

    @Test
    public void testUpdateById() { //修改
        int um = demoRepository.updateById("222", 2);
        System.out.println(um);
    }

    @Test
    public void testFindPageByMap() {
        int page = 0, size = 1;  //分页要素,页数从0开始
        Sort sort = new Sort(Sort.Direction.DESC, "id");   //控制分页排序
        Pageable pageable = PageRequest.of(page, size, sort);  //控制分页辅助类
        Page<Demo> userPage = demoRepository.findPageByMap(pageable);  
        System.out.println("总记录数:" + userPage.getTotalElements());
    }
}

接下来就由小伙伴们多实践啦!!!


Spring Data JPA非常强大,且容易上手:在DAO层只需继承默认接口,无需手写SQL语句。测试类进行测试时,Spring Data JPA会根据DAO调用方法,自动生成SQL语句,进行表数据的增删改查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值