自动建表 2

/*
declare @Name varchar(20)
set @Name = ''
exec dbo.p_CreateYXRZTable @s_tablename='WWdcctrl12',@int=30,@dec=5,@strSm=0,@strMi=0,@strBig=0,@text=0,@message = @Name out
select @Name

*/

CREATE proc dbo.p_CreateYXRZTable
@s_tablename varchar(100),
@int int = null,
@dec int = null,
@strSm int = null,
@strMi int = null,
@strBig int = null,
@text int = null,
@Message int=null Output
as
/*---------------------------------------------------------------------------------------------------------------
----------过程传入的是一种数据类型的个数,@s_用来存储新增列的信息
---------------------------------------------------------------------------------------------------------------*/
declare @s_int varchar(8000),@s_Decimal varchar(8000),@s_StrSm varchar(8000),@s_StrMi varchar(8000),@s_StrBig varchar(8000),@s_Text varchar(8000),@s_defultB varchar(1000),@s_defultE varchar(1000)
declare @i int,@iFlag int
select @s_Decimal = '',@s_int = '',@s_StrSm = '',@s_StrMi = '',@s_StrBig = '',@s_Text = '',@s_defultB = '',@s_defultE = ''
select @int = isnull(@int,0),@dec = isnull(@dec,0),@strSm = isnull(@strSm,0),@strMi = isnull(@strMi,0),@Text = isnull(@Text,0),@strBig = isnull(@strBig,0)

--生成数据表名称
set @s_tablename='tbYXRZ' + @s_tablename
--判断目标数据库是否已经存在要生成的数据表,在没有重名的情况下进行新加表处理
if not exists(select 1 from sysobjects where id=object_id(@s_tablename) and type='u')
begin 
--表头表尾字段处理
set @s_defultB = 'CREATE TABLE ['+ @s_tablename +'] (
 [yxID] [int] IDENTITY (1, 1) NOT NULL ,
 [reportDate] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 [jz] [int] NULL ,
 [bz] [int] NULL ,
 [bc] [int] NULL ,
 [tq] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
 [zbry] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
 [jjman1] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 [jjtime1] [datetime] NULL ,
 [jjman2] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 [jjtime2] [datetime] NULL ,
 [CreateTime] [datetime] NULL ,
 [modifyman] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 [modifyTime] [datetime] NULL , 
        [Data] [image] NULL ,
 [yxjs] [text] COLLATE Chinese_PRC_CI_AS NULL ,
 [jdsx] [text] COLLATE Chinese_PRC_CI_AS NULL ,'

set @s_defultE = 'CONSTRAINT [PK_'+@s_tablename+'] PRIMARY KEY  CLUSTERED
 (
  [yxID] DESC
 )  ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]'
--------------------
--数据表字段语句生成
--------------------
set @i=1
while @int >= @i begin
  set @s_int = @s_int + '[Int' + right(1000 + @i,3) + '] [int] NULL ,'
  set @i = @i + 1
end

set @i=1
while @dec >= @i begin
  set @s_Decimal = @s_Decimal + '[Dec' + right(1000 + @i,3) + '] [decimal](18, 4) NULL ,'
  set @i = @i + 1
end

set @i=1
while @strSm >= @i begin
  --set @s_StrSm = @s_StrSm + '[StrSm' + right(1000 + @i,3) + '] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,'
  set @s_StrSm = @s_StrSm + '[StrSm' + right(1000 + @i,3) + '] [varchar] (10) ,'
  set @i = @i + 1
end

set @i=1
while @strMi >= @i begin
  --set @s_StrMi = @s_StrMi + '[StrMi' + right(1000 + @i,3) + '] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,'
  set @s_StrMi = @s_StrMi + '[StrMi' + right(1000 + @i,3) + '] [varchar] (50) ,'
  set @i = @i + 1
end

set @i=1
while @strBig >= @i begin
  --set @s_StrBig = @s_StrBig + '[StrBig' + right(1000 + @i,3) + '] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,'
  set @s_StrBig = @s_StrBig + '[StrBig' + right(1000 + @i,3) + '] [varchar] (500) ,'
  set @i = @i + 1
end


set @i=1
while @text >= @i begin
  set @s_Text = @s_Text + '[Text' + right(1000 + @i,3) + '] [text] COLLATE Chinese_PRC_CI_AS NULL ,'
  set @i = @i + 1
end
--------------------
--数据表创建
--------------------
exec(@s_defultB + @s_int + @s_Decimal + @s_StrSm + @s_StrMi + @s_StrBig + @s_Text + @s_defultE)
end
else
--@message=1表示数据库中已经存在同名数据表
  set @message=1

 

GO
 

<think>根据用户需求,需要在SpringBoot3.4中使用JPA和H2数据库实现自动。我们将参考引用内容,并结合SpringBoot3.4的实践进行说明。关键点:1.添加依赖:需要添加SpringDataJPA和H2数据库的依赖。2.配置数据源:在application.properties或application.yml中配置H2数据库连接。3.配置JPA属性:特别是`spring.jpa.hibernate.ddl-auto`属性,用于控制结构的自动。4.实体类:使用JPA注解定义实体和结构。步骤:###1.添加依赖在`pom.xml`中添加以下依赖:```xml<dependencies><!--SpringDataJPA--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!--H2Database--><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency></dependencies>```注意:SpringBoot3.4管理这些依赖的版本,因此无需指定版本号。###2.配置数据源和JPA属性在`application.properties`文件中配置H2数据库和JPA属性:```properties#配置H2数据库spring.datasource.url=jdbc:h2:mem:testdbspring.datasource.driver-class-name=org.h2.Driverspring.datasource.username=saspring.datasource.password=#配置JPA#自动结构,可选值:none,validate,update,create,create-dropspring.jpa.hibernate.ddl-auto=create-drop#在控制台显示SQL语句(可选)spring.jpa.show-sql=true#配置H2控制台(可选,方便调试)spring.h2.console.enabled=true```说明:-`spring.jpa.hibernate.ddl-auto=create-drop`:示在应用启动时创,在应用关闭时删除。也可以设置为`create`(只创,不删除)或`update`(更新结构,如果存在的话)。-启用H2控制台后,可以通过`http://localhost:8080/h2-console`访问H2的Web控制台。###3.实体类定义一个简单的实体类,例如`User`:```javaimportjakarta.persistence.Entity;importjakarta.persistence.GeneratedValue;importjakarta.persistence.GenerationType;importjakarta.persistence.Id;@EntitypublicclassUser{@Id@GeneratedValue(strategy=GenerationType.AUTO)privateLongid;privateStringname;privateStringemail;//省略构造方法、getter和setter}```###4.Repository接口创一个继承自`JpaRepository`的接口:```javaimportorg.springframework.data.jpa.repository.JpaRepository;publicinterfaceUserRepositoryextendsJpaRepository<User,Long>{}```###5.测试启动应用后,JPA会根据实体类自动在H2内存数据库中创。可以通过H2控制台查看结构,或者编写一个简单的测试用例验证。###注意事项-如果使用`create`或`create-drop`模式,每次启动应用都会重新创,之前的数据会丢失。在生产环境中,通常使用`validate`或`none`,并通过数据库迁移工具(如Flyway或Liquibase)管理结构。-H2是内存数据库,数据默认不会持久化。如果需要持久化,可以配置为文件数据库,例如:```propertiesspring.datasource.url=jdbc:h2:file:./data/testdb```参考引用内容:-引用[^1]和[^4]提到了`spring.jpa.hibernate.ddl-auto`的配置,我们同样需要配置这个属性。-引用[^3]说明了SpringBoot对JPA依赖的统一管理。§§相关问题§§1.在SpringBoot中如何配置H2数据库的持久化存储?2.除了`ddl-auto`,还有哪些方式可以初始化数据库结构?3.如何在SpringBoot中集成H2控制台并进行安全配置?4.SpringBoot3.4中JPA的配置与旧版本有何不同?</think>### 在Spring Boot 3.4中使用JPA和H2实现自动 #### 1. 添加必要依赖 在`pom.xml`中添加JPA和H2依赖: ```xml <dependencies> <!-- Spring Data JPA --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- H2内存数据库 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies> ``` Spring Boot 3.4会自动管理依赖版本[^3]。 #### 2. 配置数据源和JPA属性 在`application.properties`中配置: ```properties # 配置H2数据库 spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password= # JPA自动配置 (关键配置) spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.defer-datasource-initialization=true # 启用H2控制台(可选) spring.h2.console.enabled=true ``` **关键配置说明**: - `spring.jpa.hibernate.ddl-auto=update`:自动或更新结构[^1][^4] - 可选值:`none`(禁用)、`validate`(验证)、`update`(更新)、`create`(创)、`create-drop`(启动创/关闭删除) - `spring.jpa.defer-datasource-initialization=true`:确保在Hibernate初始化前加载数据源 #### 3.实体类 使用JPA注解定义实体: ```java import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Double price; // 省略构造方法、getter/setter } ``` #### 4.Repository接口 ```java import org.springframework.data.jpa.repository.JpaRepository; public interface ProductRepository extends JpaRepository<Product, Long> { } ``` #### 5. 初始化数据(可选) 在`src/main/resources`创`import.sql`文件: ```sql INSERT INTO product(name, price) VALUES ('Laptop', 1299.99); INSERT INTO product(name, price) VALUES ('Smartphone', 699.99); ``` 应用启动时会自动执行SQL脚本[^5]。 #### 6. 验证结果 启动应用后: 1. 访问H2控制台:`http://localhost:8080/h2-console` 2. 连接URL填:`jdbc:h2:mem:testdb` 3. 用户名:`sa`,密码留空 4. 查看`PRODUCT`结构和初始化数据 #### 配置选项说明 | 配置项 | 说明 | 示例值 | |--------|------|--------| | `spring.jpa.hibernate.ddl-auto` | 结构管理策略 | `update`, `create` | | `spring.jpa.show-sql` | 控制台显示SQL语句 | `true` | | `spring.jpa.defer-datasource-initialization` | 延迟数据源初始化 | `true` | | `spring.h2.console.enabled` | 启用H2控制台 | `true` | > **注意**:生产环境应禁用`ddl-auto=create/update`,推荐使用数据库迁移工具(如Flyway或Liquibase)管理结构变更[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值