• 【Spring Data JPA】06 全注解配置(非SpringBoot整合)


    总依赖组件坐标:

        <properties>
            <spring.version>5.2.8.RELEASE</spring.version>
            <hibernate.version>5.0.7.Final</hibernate.version>
            <slf4j.version>1.6.6</slf4j.version>
            <log4j.version>1.2.12</log4j.version>
        </properties>
    
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.6.8</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>5.2.1.Final</version>
            </dependency>
    
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.5.5</version>
            </dependency>
    
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.20</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-jpa</artifactId>
                <version>2.3.2.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>5.2.8.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>javax.el</groupId>
                <artifactId>javax.el-api</artifactId>
                <version>2.2.4</version>
            </dependency>
    
            <dependency>
                <groupId>org.glassfish.web</groupId>
                <artifactId>javax.el</artifactId>
                <version>2.2.4</version>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.12</version>
            </dependency>
    
        </dependencies>

    设置一个配置类的包

    cn.xxx.config

    设置总配置加载类

    package cn.echo42.config;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Import;
    
    /**
     * @author DaiZhiZhou
     * @file SpringDataJpa
     * @create 2020-07-31 10:20
     */
    
    @Configuration
    @Import({SpringDataJpaConfiguration.class,DataSourceConfiguration.class})
    @ComponentScan("cn.echo42")
    public class ApplicationConfiguration {
    }

    其中导入了数据源和SpringDataJpa的配置类

    数据源配置:

    太懒,没写配置文件了

    package cn.echo42.config;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.sql.DataSource;
    import java.beans.PropertyVetoException;
    
    /**
     * @author DaiZhiZhou
     * @file SpringDataJpa
     * @create 2020-07-31 10:22
     */
    
    @Configuration
    public class DataSourceConfiguration {
    
        @Bean("dataSource")
        public DataSource getDataSource(
                @Value("com.mysql.cj.jdbc.Driver") String driverClass,
                @Value("jdbc:mysql:///oa?serverTimezone=Asia/Shanghai") String url,
                @Value("root") String user,
                @Value("123456") String password) throws PropertyVetoException {
            ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
            comboPooledDataSource.setDriverClass(driverClass);
            comboPooledDataSource.setJdbcUrl(url);
            comboPooledDataSource.setUser(user);
            comboPooledDataSource.setPassword(password);
            return comboPooledDataSource;
        }
    
    }

    SpringDataJpa配置:

    package cn.echo42.config;
    
    import org.hibernate.jpa.HibernatePersistenceProvider;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    import org.springframework.orm.jpa.JpaTransactionManager;
    import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
    import org.springframework.orm.jpa.vendor.Database;
    import org.springframework.orm.jpa.vendor.HibernateJpaDialect;
    import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
    
    import javax.persistence.EntityManagerFactory;
    import javax.sql.DataSource;
    
    /**
     * @author DaiZhiZhou
     * @file SpringDataJpa
     * @create 2020-07-31 11:06
     */
    
    @Configuration
    //@Import(DataSourceConfiguration.class)
    @EnableJpaRepositories(
            basePackages = "cn.echo42.dao",
            transactionManagerRef = "jpaTransactionManager",
            entityManagerFactoryRef = "entityManagerFactory"
    )
    public class SpringDataJpaConfiguration {
    
    
        @Bean("persistenceProvider") /* Jpa实现者 即规范供应商 */
        public HibernatePersistenceProvider getProvider(){
            return new HibernatePersistenceProvider();
        }
    
        @Bean("jpaDialect") /* Jpa方言对象 */
        public HibernateJpaDialect getHibernateJpaDialect(){
            return new HibernateJpaDialect();
        }
    
        @Bean("adapter") /* 实现者适配器 */
        public HibernateJpaVendorAdapter getHibernateJpaVendorAdapter(){
            HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
            adapter.setDatabase(Database.MYSQL);
            adapter.setGenerateDdl(false);
            adapter.setShowSql(true);
            adapter.setDatabasePlatform("org.hibernate.dialect.MySQLDialect");
            return adapter;
        }
    
        @Bean("entityManagerFactory")
        public LocalContainerEntityManagerFactoryBean getEntityManagerFactoryBean (
                DataSource dataSource,
                @Value("cn.echo42.entity") String scanPath,
                HibernatePersistenceProvider hibernatePersistenceProvider,
                HibernateJpaDialect hibernateJpaDialect) {
            LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
            factoryBean.setDataSource(dataSource);
            factoryBean.setPackagesToScan(scanPath);
            factoryBean.setPersistenceProvider(hibernatePersistenceProvider);
            factoryBean.setJpaDialect(hibernateJpaDialect);
            return factoryBean;
        }
    
        @Bean("jpaTransactionManager") /* Jpa事务管理器 */
        public JpaTransactionManager getJpaTransactionManager(EntityManagerFactory factoryBean) {
            JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
            jpaTransactionManager.setEntityManagerFactory(factoryBean);
            return jpaTransactionManager;
        }
    
    }

    用户实体类:

    package cn.echo42.entity;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import javax.persistence.*;
    
    /**
     * @author DaiZhiZhou
     * @file SpringDataJpa
     * @create 2020-07-31 10:54
     */
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Entity
    @Table(name = "sys_user")
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer user_id; // @Column(name = "user_id")
        private String user_name; // @Column(name = "user_name")
        private String user_password; // @Column(name = "user_password")
        private Integer user_status; // @Column(name = "user_status")
        private Integer user_is_del; // @Column(name = "user_is_del")
    }

    用户持久化接口:

    package cn.echo42.dao;
    
    import cn.echo42.entity.User;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
    
    /**
     * @author DaiZhiZhou
     * @file SpringDataJpa
     * @create 2020-07-31 10:58
     */
    public interface UserDao extends JpaRepository<User,Integer> , JpaSpecificationExecutor<User> {
    
    }

    最后的测试类:

    import cn.echo42.config.ApplicationConfiguration;
    import cn.echo42.dao.UserDao;
    import cn.echo42.entity.User;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import java.util.List;
    
    /**
     * @author DaiZhiZhou
     * @file SpringDataJpa
     * @create 2020-07-31 10:52
     */
    
    @RunWith(SpringJUnit4ClassRunner.class)
    // @ContextConfiguration(locations = "classpath:Bean-Context.xml") // XML加载
    @ContextConfiguration(classes = ApplicationConfiguration.class) // JavaConfig
    public class SpringDataJpaTest {
    
        @Autowired
        private UserDao userDao;
    
        @Test
        public void quickStart(){
            List<User> userList = userDao.findAll();
            for (User user : userList) {
                System.out.println(user);
            }
        }
    }

    测试结果:

    User(user_id=1, user_name=admin, user_password=admin, user_status=1, user_is_del=0)
    User(user_id=2, user_name=user01, user_password=123456, user_status=1, user_is_del=0)
    User(user_id=3, user_name=user02, user_password=123456, user_status=1, user_is_del=0)
    User(user_id=4, user_name=user03, user_password=123456, user_status=1, user_is_del=0)
    User(user_id=5, user_name=admin02, user_password=admin02, user_status=1, user_is_del=0)

    如果需要日志打印:

    在Resource目录种配置日志【log4j.properties】

    log4j.rootLogger=DEBUG,console,file
    # Settings About ConsoleOutput
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.Target=System.out
    log4j.appender.console.Threshold=DEBUG
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
    # Settings About FileOutput
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=./resources/log/logging.log
    log4j.appender.file.MaxFileSize=10mb
    log4j.appender.file.Threshold=DEBUG
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
    # LogOutput Level
    log4j.logger.org.mybatis=DEBUG
    log4j.logger.java.sql=DEBUG
    log4j.logger.java.sql.Statement=DEBUG
    log4j.logger.java.sql.ResultSet=DEBUG
    log4j.logger.java.sql.PreparedStatement=DEBUG
  • 相关阅读:
    OC UITextField只允许输入两位小数
    UIBezierPath使用
    2020-11-25:go中,map的底层数据结构是什么?
    2020-11-24:n个物品每个物品都有一定价值,分给2个人,怎么分两个人的价值差最小?
    2020-11-23:go中,s是一个字符串,s[0]代表什么?是否等于固定字节数?
    2020-11-22:mysql中,什么是filesort?
    2020-11-21:java中,什么是跨代引用?
    2020-11-20:java中,听说过CMS的并发预处理和并发可中断预处理吗?
    2020-11-19:go中,defer原理是什么?
    2020-11-18:java中,到底多大的对象会被直接扔到老年代?
  • 原文地址:https://www.cnblogs.com/mindzone/p/13408901.html
Copyright © 2020-2023  润新知