zoukankan      html  css  js  c++  java
  • 一点点总结Spring整合Hibernate Day1

    一点点总结Spring整合Hibernate   Day1

    IDE: IntelliJ IDEA 2017

    数据库:MySql

    另外加入的的jar

    1.用于Spring AOP需要的jar:aspectjrt.jar, aspectjweaver.jar (此项可以省略!)

    2.用于spring-config.xml配置数据源需要的jar:mysql-connector-java-5.0.8-bin.jar,commons-pool-1.6.jar, commons-dbcp-1.4.jar

    3.用于Hibernate调试信息需要的jar:log4j-1.2.17.jar,slf4j-api-1.7.25.jar,slf4j-log4j12-1.7.25.jar(另外需要文件log4j.properties)

    新建项目勾选SpringHibernate  jar包由IDEA自动下载(笔者用:Spring-4.3.12.RELEASEHibernate 5.2.11-5.2.11

     

    各部分源码:

    LogInterceptor.java(用于AOP织入的类)

     1 package com.pp.aop;
     2 
     3 import org.aspectj.lang.annotation.Aspect;
     4 import org.aspectj.lang.annotation.Before;
     5 import org.springframework.stereotype.Component;
     6 
     7 @Aspect
     8 @Component
     9 public class LogInterceptor {
    10     @Before("execution(public void com.pp.model.Chinese.useAxe())")
    11     public void before(){
    12         System.out.println("LogInterceptor, Test AOP!");
    13     }
    14 }

     

    AxePerson接口

    1 package com.pp.impl;
    2 
    3 public interface Axe {
    4     public String chop();
    5 }
    1 package com.pp.impl;
    2 
    3 public interface Person {
    4     public void useAxe();
    5 }

    Chinese.java

     1 package com.pp.model;
     2 
     3 import com.pp.impl.Axe;
     4 import com.pp.impl.Person;
     5 import org.hibernate.Session;
     6 import org.hibernate.SessionFactory;
     7 import javax.annotation.Resource;
     8 
     9 public class Chinese implements Person {
    10     private Axe axe;
    11     private SessionFactory sessionFactory;
    12 
    13     public SessionFactory getSessionFactory() {
    14         return sessionFactory;
    15     }
    16 
    17 
    18     @Resource
    19     public void setSessionFactory(SessionFactory sessionFactory) {
    20         this.sessionFactory = sessionFactory;
    21     }
    22 
    23 
    24     @Resource //(name = "stoneAxe")
    25     public void setAxe( Axe axe){
    26         this.axe = axe;
    27     }
    28     @Override
    29     public void useAxe() {
    30         System.out.println("sessionFactory.Class:"+sessionFactory.getClass());
    31         Session session = sessionFactory.openSession();
    32         session.beginTransaction();               //开始Transaction
    33         session.save(new peopleInfo());     //数据存入数据库
    34         session.getTransaction().commit();        //得到Transaction并提交
    35         session.close();                          //关闭连接
    36 
    37         System.out.println("我打算去看点柴火!");
    38         System.out.println(axe.chop());
    39     }
    40 }

    peopleInfo.java(与数据库有相对应的表peopleInfo)

     1 package com.pp.model;
     2 
     3 import javax.persistence.*;
     4 
     5 @Entity
     6 @Table(name = "peopleInfo")
     7 public class peopleInfo {
     8     private int id;
     9     private String name;
    10 
    11     /**
    12      * @Id 映射主键属性,这里采用uuid的主键生成策略
    13      * @GeneratedValue —— 注解声明了主键的生成策略。该注解有如下属性
    14      * strategy 指定生成的策略,默认是GenerationType. AUTO
    15      * GenerationType.AUTO 主键由程序控制
    16      * GenerationType.TABLE 使用一个特定的数据库表格来保存主键
    17      * GenerationType.IDENTITY 主键由数据库自动生成,主要是自动增长类型
    18      * GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列
    19      * generator 指定生成主键使用的生成器
    20      */
    21     @Id
    22     @GeneratedValue
    23     @Column(name = "id")
    24     public int getId() {
    25         return id;
    26     }
    27 
    28     public void setId(int id) {
    29         this.id = id;
    30     }
    31 
    32     public String getName() {
    33         return name;
    34     }
    35 
    36     public void setName(String name) {
    37         this.name = name;
    38     }
    39 }

    StoneAxe.java

     1 package com.pp.model;
     2 
     3 import com.pp.impl.Axe;
     4 import org.springframework.stereotype.Component;
     5 
     6 @Component
     7 public class StoneAxe implements Axe {
     8     @Override
     9     public String chop() {
    10         return "石斧砍柴好慢!";
    11     }
    12 }

    测试类:BeanTest.java

     1 package com.pp.test;
     2 
     3 import com.pp.impl.Person;
     4 import org.springframework.context.ApplicationContext;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 
     7 public class BeanTest {
     8     public static void main(String args[]){
     9         ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml");
    10         Person p = ctx.getBean("chinese", Person.class);
    11         p.useAxe();
    12     }
    13 }

    log4j.properties(自行百度copy即可)

    # Root logger option
    log4j.rootLogger=INFO, console
    log4j.logger.com.ch.demo=INFO, console
    
    # Direct log messages to console
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.Target=System.out
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%d{HH:mm}| %p | %F %L | %m%n
    
    # direct messages to file hibernate.log
    # log4j.logger.org.hibernate=DEBUG, hibernate
    log4j.appender.hibernate=org.apache.log4j.RollingFileAppender
    log4j.appender.hibernate.File=hibernate.log
    log4j.appender.hibernate.layout=org.apache.log4j.PatternLayout
    log4j.appender.hibernate.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
    
    # Hibernate主要的类别如下:
    
    # 1)org.hibernate.SQL
    # 日志输出所有Hibernate执行的SQL DML语句
    log4j.logger.org.hibernate.SQL=debug 
    
    # 2)org.hibernate.type
    # 日志输出所有的JDBC参数
    
    # 3)org.hibernate.transaction
    # 日志输出所有活动相关的事务
    
    # 4)org.hibernate.jdbc
    # 日志输出所有的JDBC资源采集
    
    # 5)org.hibernate.tool.hbm2ddl
    # 日志输出所有Hibernate执行的SQL DDL语句
    log4j.logger.org.hibernate.tool.hbm2ddl = Debug
    
    # 6)org.hibernate
    # 日志输出所有的Hibernate信息
    
    # 如果指定日志输出类别为org.hibernate.SQL,那么将会输出SQL语句。但是,还有一种更简单的查看SQL语句的方法,只需简单地设置show_sql参数为true。

    spring-config.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:context="http://www.springframework.org/schema/context"
     5        xmlns:aop="http://www.springframework.org/schema/aop"
     6        xsi:schemaLocation="http://www.springframework.org/schema/beans
     7         http://www.springframework.org/schema/beans/spring-beans.xsd
     8         http://www.springframework.org/schema/context
     9         http://www.springframework.org/schema/context/spring-context.xsd
    10         http://www.springframework.org/schema/aop
    11         http://www.springframework.org/schema/aop/spring-aop.xsd">
    12     <context:annotation-config />
    13     <context:component-scan base-package="com.pp" />
    14     <aop:aspectj-autoproxy />
    15 
    16     <!--数据源的配置-->
    17     <!--外加包:commons-pool, commons-dbcp, mysql-connector-java-->
    18     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    19         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    20         <property name="url" value="jdbc:mysql://ip地址:端口号/ppsql" ></property>
    21         <property name="username" value="root"></property>
    22         <property name="password" value="root"></property>
    23     </bean>
    24 
    25     <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    26         <!-- 注入datasource,给sessionfactoryBean内setdatasource提供数据源 -->
    27         <property name="dataSource" ref="dataSource" />
    28         <property name="annotatedClasses">                    <!--Hibernate关系映射的类集合-->
    29             <list>
    30                 <value>com.pp.model.peopleInfo</value>        <!-- 关系映射的类 -->
    31             </list>
    32         </property>
    33         <property name="hibernateProperties">                 <!--Hibernate配置文件中的设置参数-->
    34             <props>
    35                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>    <!--需要根据数据库版本来选择对于的Dialect-->
    36                 <prop key="hibernate.show_sql">true</prop>
    37                 <prop key="hibernate.format_sql">true</prop>
    38                 <prop key="hibernate.hbm2ddl.auto">update</prop>
    39             </props>
    40         </property>
    41     </bean>
    42 
    43     <bean id="chinese" class="com.pp.model.Chinese" scope="singleton" />
    44 
    45 </beans>

    配置过程中遇到的问题点:

    1.Error executing DDL via JDBC Statement  解:org.hibernate.dialect.*Dialect (*:要选择相对应的数据库版本)

    2.通过JDBC初始化dataSource连接MySql需要引入包commons-pool-1.6(建议用pool而不是pool2),commons-dbcp-1.4,mysql-connector-java三个包

    感觉自己还是没有总结的很好,以后继续努力加油!!!!!!!

  • 相关阅读:
    常用语句
    html引入ECharts的两种方式
    最新版Navicate破解激活
    买路由器篇
    关于java8(Stream)的一些用法
    Mybatis联合查询记录,左连接参数操作
    海淘转运事宜记录
    mysql where语句多条件查询是and和or联合使用bug
    关于mysql中GROUP_CONCAT函数的使用
    关于MySQL存入的时间和取出时间不一致的解决
  • 原文地址:https://www.cnblogs.com/seven1314pp/p/7728731.html
Copyright © 2011-2022 走看看