maven jpa mysql_基于Spring & Maven 搭建JPA的项目

创建Maven项目的原因: 方便管理jar包依赖,项目中需要使用的jar包只需要在pom.xml文件中配置即可。不要再把jar包复制到项目中,然后右键项目 config build path。

基于Spring创建项目的原因:可以使用Spring的容器管理和java配置 这里全部使用Java配置,只需要创建一个Java配置类即可,创建一个类 加上 @Configuration 等注解即可。

具体操作

1.创建一个maven项目  选择 maven-archetype-quickstart即可。

2.在Spring应用上下文中(Spring的配置类)配置实体管理器工厂

2.1 配置DataSource数据源 ---oracle数据库

import javax.sql.DataSource;

import org.springframework.jdbc.datasource.DriverManagerDataSource;

@Bean

public DataSource dataSource() {

DriverManagerDataSource dataSource = new DriverManagerDataSource();

dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");

dataSource.setUrl("jdbc:oracle:thin:@172.1.0.0:1521:orcl");

dataSource.setUsername("admin");

dataSource.setPassword("123");

return dataSource;

}

2.1 配置DataSource数据源 ----mysql数据库

这里setUrl方法里需要指定数据库的名字,否则会报错 java.sql.SQLException: No database selected

@Bean

public DataSource dataSource() {

DriverManagerDataSource dataSource = new DriverManagerDataSource();

dataSource.setDriverClassName("com.mysql.jdbc.Driver");

dataSource.setUrl("jdbc:mysql://localhost:3306/databasename");

dataSource.setUsername("root");

dataSource.setPassword("123456");

return dataSource;

}

2.2 配置JpaVendorAdapter:Spring提供了多个JPA厂商适配器:EclipseLinkJpaVendorAdapter;HibernateJpaVendorAdapter;OpenJpaVendorAdapter等,如果选用Hibernate作为JPA的实现,需要配置HibernateJpaVendorAdapter。

import org.springframework.context.annotation.Bean;

import org.springframework.orm.jpa.JpaVendorAdapter;

import org.springframework.orm.jpa.vendor.Database;

import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;

@Bean

public JpaVendorAdapter jpaVendorAdapter() {

HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();

// 设置数据库类型

jpaVendorAdapter.setDatabase(Database.ORACLE);

jpaVendorAdapter.setShowSql(true);

jpaVendorAdapter.setGenerateDdl(false);

// 设置数据库方言

jpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.Oracle10gDialect");

return jpaVendorAdapter;

}

这里要注意 使用哪种数据库,就设置哪种数据库方言

如果是用mysql数据库,却设置了oracle数据库方言,就会报错

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'portal.hibernate_sequence' doesn't exist,

mysql数据库应该设置方言

jpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL57InnoDBDialect");

2.3配置EntityManagerFactory需要两个参数 DataSource 和 JpaVendorAdapter

import javax.sql.DataSource;

import org.springframework.orm.jpa.JpaVendorAdapter;

import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;

@Bean

public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource,

JpaVendorAdapter jpaVendorAdapter) {

LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();

//设置数据源

entityManagerFactory.setDataSource(dataSource);

//设置JPA厂商适配器

entityManagerFactory.setJpaVendorAdapter(jpaVendorAdapter);

//设置扫描的基础包查找 带有@Entity注解的类

//这个包下带有@Entity @Table注解的类会在数据库里自动建表

entityManagerFactory.setPackagesToScan("com.xxx.entity");

return entityManagerFactory;

}

这里要非常注意的是       entityManagerFactory.setPackagesToScan("com.xxx.entity"); 这句要改成自己项目中希望扫描的包,这个包及其子包下的带有@Entity 和 @Table注解的类  在jpa启动事,会在数据库自动建表。

这个和Spring 配置类上的@ComponentScan不一样,Spring 配置类上的@ComponentScan 注解事扫描包,发现@Entity,@Service @Controller @Component注解的类,并把这些类配置为Spring容器管理的Bean.

所以这两个是完全不同。 别搞混了!!!!

如果  entityManagerFactory.setPackagesToScan("com.xxx.entity"); 设置不正确,在em.persist() 操作时,会一直报错

java.lang.IllegalArgumentException: Unknown entity: com.mx.JpaDemo.entity.Student

at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1149)

3.在测试类中 使用JPA来实现增删改查等

以上配置完成后,就可以在项目中使用 @PersistenceContext 来注入 实体管理器   EntityManager em;

import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;

import javax.persistence.Query;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.jpaDemo.config.JpaConfig;

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes = JpaConfig.class)

public class JpaDemoTest {

@PersistenceContext

private EntityManager em;

@Test

public void testaddSolrListIndex() {

String sql = "select * from t_student t where t.id = 22";

Query query = em.createNativeQuery(sql);

List objecArraytList = query.getResultList();

//continue

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值