Hibernate学习笔记

目录

一、Hibernate概述

二、导入pom包 

三、配置文件

四、实体类

五、测试类

六、管理类工具类的抽取

七、使用工具类对表进行增删改查

        7.1增添操作

        7.2修改操作

        7.3删除操作

        7.4查询操作 

八、通过创建Query对象来进行查询操作

8.1查询所有

8.2分页查询

8.3条件查询

8.4排序查询

         8.5统计(计数)查询


一、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();
                }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值