千家信息网

spring boot DAO之Hibernate

发表于:2024-10-22 作者:千家信息网编辑
千家信息网最后更新 2024年10月22日,依赖 org.springframework.boot spring-boot-starter-data-jpa
千家信息网最后更新 2024年10月22日spring boot DAO之Hibernate

依赖

                    org.springframework.boot            spring-boot-starter-data-jpa                            mysql            mysql-connector-java        

application-database.properties

#初始化数据库的时候,如果错误,是否继续启动。spring.datasource.continue-on-error=false#jdbc driver.默认通过uri来自动检测。spring.datasource.driver-class-name=com.mysql.jdbc.Driver#jdbc url.连接数据库的urispring.datasource.url=jdbc:mysql://172.28.1.227:3310/fc?useUnicode=true&autoReconnect=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useServerPrepStmts=false#数据库连接用户名spring.datasource.username=fcdev#数据连接密码spring.datasource.password=123456#全限定名,连接池。默认自动检测classpathspring.datasource.type=com.zaxxer.hikari.HikariDataSource#sql脚本字符spring.datasource.sql-script-encoding=UTF-8#hibernate配置参数spring.jpa.hibernate.ddl-auto=nonespring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyspring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategyspring.jpa.hibernate.use-new-id-generator-mappings=true

源码-JpaProperties

@ConfigurationProperties(prefix = "spring.jpa")public class JpaProperties {    /**     * Additional native properties to set on the JPA provider.     */    private Map properties = new HashMap<>();    /**     * Mapping resources (equivalent to "mapping-file" entries in persistence.xml).     */    private final List mappingResources = new ArrayList<>();    /**     * Name of the target database to operate on, auto-detected by default. Can be     * alternatively set using the "Database" enum.     */    private String databasePlatform;    /**     * Target database to operate on, auto-detected by default. Can be alternatively set     * using the "databasePlatform" property.     */    private Database database;    /**     * Whether to initialize the schema on startup.     */    private boolean generateDdl = false;    /**     * Whether to enable logging of SQL statements.     */    private boolean showSql = false;    /**     * Register OpenEntityManagerInViewInterceptor. Binds a JPA EntityManager to the     * thread for the entire processing of the request.     */    private Boolean openInView;    private Hibernate hibernate = new Hibernate();}

源码-HibernateJpaAutoConfiguration

@Configuration@ConditionalOnClass({ LocalContainerEntityManagerFactoryBean.class, EntityManager.class })@Conditional(HibernateEntityManagerCondition.class)@EnableConfigurationProperties(JpaProperties.class)@AutoConfigureAfter({ DataSourceAutoConfiguration.class })@Import(HibernateJpaConfiguration.class)public class HibernateJpaAutoConfiguration {    @Order(Ordered.HIGHEST_PRECEDENCE + 20)    static class HibernateEntityManagerCondition extends SpringBootCondition {        private static final String[] CLASS_NAMES = {                "org.hibernate.ejb.HibernateEntityManager",                "org.hibernate.jpa.HibernateEntityManager" };        @Override        public ConditionOutcome getMatchOutcome(ConditionContext context,                AnnotatedTypeMetadata metadata) {            ConditionMessage.Builder message = ConditionMessage                    .forCondition("HibernateEntityManager");            for (String className : CLASS_NAMES) {                if (ClassUtils.isPresent(className, context.getClassLoader())) {                    return ConditionOutcome                            .match(message.found("class").items(Style.QUOTE, className));                }            }            return ConditionOutcome.noMatch(message.didNotFind("class", "classes")                    .items(Style.QUOTE, Arrays.asList(CLASS_NAMES)));        }    }}

SysMenu实体

@Entity@Table(name = "t_sys_menu")public class SysMenu {    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    private Integer id;    @Column    private String name;    @Override    public String toString() {        return "id=" + id + ";name=" + name;    }}

TestHibernateDao

@org.springframework.stereotype.Repositorypublic interface TestHibernateDao extends JpaRepository {    SysMenu getSysMenuById(Integer id);}

AppContextTest

@RunWith(SpringRunner.class)@SpringBootTestpublic class AppContextTest {    @Autowired    private TestHibernateDao testHibernateDao;    @Test    public void hibernateTest(){        SysMenu sysMenu = testHibernateDao.getSysMenuById(1);        System.out.println("menuName = " + sysMenu.getName());    }
0