JPA入门(二)



 

基础测试:

 

第一步:配置依赖:

 

               <dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.9</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>4.3.7.Final</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.33</version>
		</dependency>

第二步:在classpath路径下,添加META-INF文件夹,添加peristence.xml文件.

 



 

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	version="2.0">
	<!-- 持久化单元.一个持久化单元可以创建一个EntityManagerFactory -->
	<persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">
		<properties>
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
			<property name="hibernate.connection.url" value="jdbc:mysql://127.0.0.1:3306/tests" />
			<property name="hibernate.connection.username" value="root" />
			<property name="hibernate.connection.password" value="root" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
			<property name="hibernate.use_sql_comments" value="false" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
			<!-- 设置外连接抓取树的最大深度 -->
			<property name="hibernate.max_fetch_depth" value="3"/>
		</properties>
	</persistence-unit>
</persistence>

 

 

 

@Entity
@Table(name="t_person")
public class Person {
	//主键
	@Id
	//主键策略
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Long id;
	
	//名字
	@Column(name="name",length=10,nullable=false)
	private String name;
	
	//生日  日期
	@Temporal(TemporalType.DATE)
	private Date birthday;//日期:date 日期时间:	timestamp ,时间:time
	
	//枚举 EnumType.ORDINAL 保存索引
	@Enumerated(EnumType.STRING)//保存字符串
	@Column(length=5,nullable=false)
	private Gender gender=Gender.MAN;
	
	//大文本>>>字符
	@Lob 
	private String info;
	
	//大文本>>>字节
	@Lob
	//抓取策略 FetchType.EAGER :立即加载,FetchType.LAZY:延迟加载
	@Basic(fetch=FetchType.LAZY)
	private Byte[] file;
	
	//不让这个属性跟数据库进行映射.不进行注解,默认进行映射
	@Transient
	private String imagePath;
        //省略get/set方法...
}
	

 枚举类:

 

 

public enum Gender {

	MAN,WOMEN
}

 使用Junit进行测试:

 

 

public class TestJPA {

	EntityManagerFactory emf = null;

	@Before
	public void before() {
		emf = Persistence.createEntityManagerFactory("myJPA");
	}

	/**
	 * </pre> 添加一个用户 </pre>
	 */
	@Test
	public void addPerson() {
		Person user = new Person();
		user.setName("哈哈");
		user.setBirthday(new Date());

		// 创建实体管理器对象
		EntityManager em = emf.createEntityManager();
		// 开启事务
		em.getTransaction().begin();
		// 持久化对象
		em.persist(user);
		// 提交事务
		em.getTransaction().commit();
		// 关闭entityManager
		em.close();
	}

	/**
	 * 查询用户 find相当于hibernate的get.立即加载 没有记录,返回null
	 */
	@Test
	public void getPerson() {
		// 创建实体管理器对象
		EntityManager em = emf.createEntityManager();
		Person person = em.find(Person.class, 2L);
		System.out.println(person);
		// 关闭entityManager
		em.close();
	}

	/**
	 * getReference:相当于heibernate的load方法 ,延迟加载,返回代理对象 没有记录,抛出异常
	 * javax.persistence.EntityNotFoundException: Unable to find
	 * com.zt.entity.Person with id 2
	 */
	@Test
	public void getPerson2() {
		// 创建实体管理器对象
		EntityManager em = emf.createEntityManager();
		Person person = em.getReference(Person.class, 2L);
		System.out.println(person);
		// 关闭entityManager
		em.close();
	}

	/**
	 * 修改用户. jpa实体的状态: 1,new. 2,托管. 3,游离状态. 4.删除状态
	 */
	@Test
	public void modifyPerson() {
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		// 查找ID为1的user,进行修改
		Person person = em.find(Person.class, 3L);// 托管状态
		person.setName("我被修改了");
		em.getTransaction().commit();
		em.close();
	}

	@Test
	public void modifyPerson2() {
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		// 查找ID为1的user,进行修改
		Person person = em.find(Person.class, 1L);// 托管状态
		em.clear();// 把实体管理器中的所有实体变成游离状态
		person.setName("我被修改了");
		em.merge(person);// 把在游离状态的实体更新同步至数据库
		em.getTransaction().commit();
		em.close();
	}

	/**
	 * 删除用户
	 */

	@Test
	public void deletePerson() {
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		// 查找id为1的用户删除掉
		Person person = em.find(Person.class, 2L);
		em.remove(person);
		em.getTransaction().commit();
		em.close();
	}

	// ----------------------查询语句----------------------------------
	/**
	 * </pre> JPQL: JPA规范需要写上select 别名. 如果使用hibernate实现jpa,可以省略 </pre>
	 */
	@Test
	public void query() {
		EntityManager em = emf.createEntityManager();
		Query query = em.createQuery("select o from Person o where o.id=?1");
		query.setParameter(1, 1L);
		// query.getResultList();//集合 相当于hibernate list()
		Person person = (Person) query.getSingleResult();// 唯一结果
															// 相当于hibernate的uniqueResult()
		System.out.println(person);
		em.close();
	}

	@Test
	public void delete() {
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		Query query = em.createQuery("delete from Person o where o.id=?1");
		query.setParameter(1, 1L).executeUpdate();
		em.getTransaction().commit();
		em.close();
	}

	@Test
	public void update() {
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		em.createQuery("update from Person o set o.name=:name where o.id=?1")//
				.setParameter(1, 2L)//
				.setParameter("name", "嘻嘻")//
				.executeUpdate();
		em.getTransaction().commit();
		em.close();
	}

	/**
	 * 关闭EntityManagerFactory
	 */
	@After
	public void after() {
		if (null != emf) {
			emf.close();
		}
	}
}

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
spring-boot-starter-data-jpa 是 Spring Boot 提供的一个快速开发 JPA 应用的起步依赖。它提供了一系列默认的配置和依赖,方便我们快速地使用 JPA 进行开发。 以下是入门步骤: 1. 添加依赖:在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` 2. 配置数据源:在 application.properties 或 application.yml 文件中配置数据库连接信息,例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 3. 创建实体类:创建一个用于映射数据库表的实体类,例如: ```java @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; // 省略 getter 和 setter 方法 } ``` 4. 创建 Repository 接口:创建一个继承 JpaRepository 接口的 Repository 接口,例如: ```java public interface UserRepository extends JpaRepository<User, Long> { } ``` 5. 使用 Repository:在业务逻辑中使用 UserRepository 进行增删改查操作,例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public User save(User user) { return userRepository.save(user); } public User findById(Long id) { return userRepository.findById(id).orElse(null); } public List<User> findAll() { return userRepository.findAll(); } public void deleteById(Long id) { userRepository.deleteById(id); } } ``` 以上就是使用 spring-boot-starter-data-jpa 开发 JPA 应用的基本步骤。需要注意的是,该起步依赖默认使用 Hibernate 作为 JPA 的实现,因此需要添加 Hibernate 的相关依赖。同时,也可以根据需要进行自定义配置,例如配置 JPA 的缓存、事务管理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值