目录
一、Hibernate概述
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
二、导入pom包
<dependencies>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- hibernate对jpa的支持包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${project.hibernate.version}</version>
</dependency>
<!-- c3p0 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${project.hibernate.version}</version>
</dependency>
<!-- log日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- Mysql and MariaDB -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
三、配置文件
<!-- 配置持久化单元
name:名称
事务类型
-->
<persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
<!-- 配置JPA规范的服务提供者-->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="xxxxxx"/>
<!-- jpa提供的配置-->
<!-- show_sql是否打印生成的sql语句:-->
<property name="hibernate.show_sql" value="true"/>
<!-- sql_format,格式化生成的sql语句:-->
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
四、实体类
@Entity //声明这是一个实体类
@Table(name="cst_customer") //和哪张表进行对应
public class Customer implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="cust_id")
private Long custId;
@Override
public String toString() {
return "Customer{" +
"custId=" + custId +
", custName='" + custName + '\'' +
", custSource='" + custSource + '\'' +
", custIndustry='" + custIndustry + '\'' +
", custLevel='" + custLevel + '\'' +
", custAddress='" + custAddress + '\'' +
", custPhone='" + custPhone + '\'' +
'}';
}
@Column(name="cust_name")
private String custName;
@Column(name="cust_source")
private String custSource;
@Column(name="cust_industry")
private String custIndustry;
@Column(name="cust_level")
private String custLevel;
@Column(name="cust_address")
private String custAddress;
@Column(name="cust_phone")
private String custPhone;
public Long getCustId() {
return custId;
}
public void setCustId(Long custId) {
this.custId = custId;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getCustSource() {
return custSource;
}
public void setCustSource(String custSource) {
this.custSource = custSource;
}
public String getCustIndustry() {
return custIndustry;
}
public void setCustIndustry(String custIndustry) {
this.custIndustry = custIndustry;
}
public String getCustLevel() {
return custLevel;
}
public void setCustLevel(String custLevel) {
this.custLevel = custLevel;
}
public String getCustAddress() {
return custAddress;
}
public void setCustAddress(String custAddress) {
this.custAddress = custAddress;
}
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
}
五、测试类
往上边生成的表中增添一个名字:
@Test
public void test(){
//创建一个管理类的工厂
EntityManagerFactory factory= Persistence.createEntityManagerFactory("myJpa");
//创建实体管理类
EntityManager em=factory.createEntityManager();
//获取事务对象
EntityTransaction tx=em.getTransaction();
//开启事务
tx.begin();
Customer c=new Customer();
c.setCustName("多宝鱼666");
//保存
em.persist(c);
tx.commit();
//释放资源
em.close();
factory.close();;
}
运行结果:
六、管理类工具类的抽取
将工具类抽取出来:
public final class JPAUtil {
private static EntityManagerFactory em;
static{
//管理类的工厂
em= Persistence.createEntityManagerFactory("myJpa");
}
public static EntityManager getEntityManager(){
//获取实体管理类
return em.createEntityManager();
}
}
七、使用工具类对表进行增删改查
7.1增添操作
向表中增添一条数据:
public void testAdd(){
Customer c=new Customer();
c.setCustName("多宝鱼777");
c.setCustLevel("VIP");
c.setCustSource("网络");
c.setCustIndustry("it");
c.setCustAddress("哈尔滨");
c.setCustPhone("188");
EntityManager em=null;
EntityTransaction tx=null;
try{
em= JPAUtil.getEntityManager();
tx=em.getTransaction();
tx.begin();
em.persist(c);
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}finally {
em.close();
}
}
结果:
7.2修改操作
将id为1的数据名字修改成:多宝鱼:
@Test
public void testEdit(){
EntityManager em=null;
EntityTransaction tx=null;
try{
em= JPAUtil.getEntityManager();
tx=em.getTransaction();
tx.begin();
Customer c1=em.find(Customer.class,1L);
c1.setCustName("多宝鱼");
em.clear();
em.merge(c1);
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}finally {
em.close();
}
}
7.3删除操作
@Test
public void testdelete(){
EntityManager em=null;
EntityTransaction tx=null;
try{
//获取实体管理对象
em= JPAUtil.getEntityManager();
//获取事务对象
tx=em.getTransaction();
//开启事务
tx.begin();
//执行操作
Customer c1=em.find(Customer.class,1L);
em.remove(c1); //移除
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}finally {
em.close();
}
}
7.4查询操作
@Test
public void testGetOne(){
EntityManager em=null;
EntityTransaction tx=null;
try{
em= JPAUtil.getEntityManager();
tx=em.getTransaction();
tx.begin();
Customer c1=em.find(Customer.class,2L);
Customer c2=em.find(Customer.class,2L);
tx.commit();
System.out.println(c1);
System.out.println(c1==c2);
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}finally {
em.close();
}
}
八、通过创建Query对象来进行查询操作
8.1查询所有
@Test
public void testSelect(){
EntityManager em=null;
EntityTransaction tx=null;
try{
em= JPAUtil.getEntityManager();
tx=em.getTransaction();
tx.begin();
String jpq1="from Customer";
//创建一个query对象
Query query=em.createQuery(jpq1);
//查询并得到结果返回
List list=query.getResultList();
for(Object object:list){
System.out.println(list);
}
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}finally {
em.close();
}
}
8.2分页查询
@Test
public void testSelect2(){
EntityManager em=null;
EntityTransaction tx=null;
try{
em= JPAUtil.getEntityManager();
tx=em.getTransaction();
tx.begin();
String jpq1="from Customer";
Query query=em.createQuery(jpq1);
query.setFirstResult(0); //起始索引
query.setMaxResults(1); //每页显示的条数
List list=query.getResultList(); //得到集合返回类型
for(Object object:list){
System.out.println(object);
}
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}finally {
em.close();
}
}
8.3条件查询
@Test
public void testSelectByLikeName(){
EntityManager em=null;
EntityTransaction tx=null;
try{
em= JPAUtil.getEntityManager();
tx=em.getTransaction();
tx.begin();
String jpq1="from Customer where custName like ?1";
Query query=em.createQuery(jpq1);
query.setParameter(1,"%鱼");
Object object=query.getSingleResult(); //得到唯一的结果集
System.out.println(object);
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}finally {
em.close();
}
}
8.4排序查询
@Test
public void testSort(){
EntityManager em=null;
EntityTransaction tx=null;
try{
em= JPAUtil.getEntityManager();
tx=em.getTransaction();
tx.begin();
String jpq1="from Customer order by cust_id desc";
Query query=em.createQuery(jpq1);
List list=query.getResultList(); //得到集合返回类型
for(Object object:list){
System.out.println(object);
}
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}finally {
em.close();
}
}
8.5统计(计数)查询
@Test
public void testCount(){
EntityManager em=null;
EntityTransaction tx=null;
try{
em= JPAUtil.getEntityManager();
tx=em.getTransaction();
tx.begin();
String jpq1="select count(custId) from Customer";
Query query=em.createQuery(jpq1);
Object count=query.getResultList();
System.out.println(count);
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}finally {
em.close();
}
}