[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/google/sqlcommenter/master/java/sqlcommenter-java/README.md [Back]  [Original]

## sqlcommenter-java

- [Introduction](#introduction)
- [Integrations](#integrations)
    - [ORMs](#orms)
    - [Frameworks](#frameworks)
- [Using them](#using-them)
    - [Spring](#spring)
        - [In XML Configuration](#in-xml-configuration)
        - [In your Java source code](#in-your-java-source-code)
    - [Hibernate](#hibernate)
    - [Spring Hibernate](#spring-hibernate)

### Introduction
Provides integrations to correlate user source code from various
web frameworks with SQL comments from various ORMs.

When results are examined in SQL database logs, they'll look like this:

```shell
SELECT * from USERS /*action='run+this+%26+that',
controller='foo%3BDROP+TABLE+BAR',framework='spring,
traceparent='00-9a4589fe88dd0fc911ff2233ffee7899-11fa8b00dd11eeff-01',
tracestate='rojo%253D00f067aa0ba902b7%2Ccongo%253Dt61rcWkgMzE''*/
```

### Integrations

#### ORMs

- [X] Hibernate
- [ ] JDBC

#### Frameworks

- [X] Spring
- [ ] Jetty
- [ ] Netty
- [ ] Apache Tomcat
- [ ] gRPC

### Using it

#### Spring

##### Java-based configuration

If your're using Spring 5, then you can add the `SpringSQLCommenterInterceptor` as follows:

```java
import com.google.cloud.sqlcommenter.interceptors.SpringSQLCommenterInterceptor;

@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public SpringSQLCommenterInterceptor sqlInterceptor() {
         return new SpringSQLCommenterInterceptor();
    }
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(sqlInterceptor());
    }
}
```

If you're using an older version of Spring, then your `WebConfig` class needs to extend the `WebMvcConfigureAdapter`
class instead:

```java
import com.google.cloud.sqlcommenter.interceptors.SpringSQLCommenterInterceptor;

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigureAdapter {

    @Bean
    public SpringSQLCommenterInterceptor sqlInterceptor() {
         return new SpringSQLCommenterInterceptor();
    }
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(sqlInterceptor());
    }
}
```

##### XML-based configuration

You can also add the interceptor as a bean in your XML configuration:

```xml


```

or alternatively just for a specific method
```xml


```

#### Hibernate

##### Hibernate via JPA

If you're using Hibernate via JPA, then you can simply set the `hibernate.session_factory.statement_inspector` configuration property in the `persistence.xml` configuration file:

```xml

```

##### Hibernate via Spring Application Properties
If you're using Hibernate via Spring application properties(i.e. you have `application.yml` or `application.properties` in your resources folder)
- `application.properties`

```properties
spring.jpa.properties.hibernate.session_factory.statement_inspector=com.google.cloud.sqlcommenter.schibernate.SCHibernate
```

- `application.yml`

```yml 
spring:
  jpa:
    properties:
      hibernate:
        session_factory:
          statement_inspector: com.google.cloud.sqlcommenter.schibernate.SCHibernate
```

##### Hibernate via Spring

If you're using Hibernate via Spring, then you might not use a `persistence.xml` configuration file, in which case,
you can set up the `hibernate.session_factory.statement_inspector` configuration property as follows:

```java
@Configuration
@EnableTransactionManagement
public class JPAConfig {
 
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean em 
        = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());
        em.setPackagesToScan(new String[] { "you.application.domain.model" });

        em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
        em.setJpaProperties(additionalProperties());

        return em;
    }
    
    private Properties additionalProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.session_factory.statement_inspector", SCHibernate.class.getName());

        return properties;
    }
}
```

#### Spring Hibernate

1. Please follow the instructions to add the [Spring interceptor](#spring)
2. Please follow the instructions to add the [Hibernate StatementInspector](#hibernate)

Web Proxy Viewer  |  New URL  |  Original Page