idea软件spring boot+jpa问题总结

24 篇文章 0 订阅
17 篇文章 0 订阅

yml配置文件:

#配置jpa
jpa:
    database: MySQL
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    show-sql: true
    hibernate:
      ddl-auto: update  

ddl-auto:主要存在四种属性:create,create-drop,update和validate

ddl-auto:create ----每次运行该程序,没有表格会新建表格,表内有数据会清空;
ddl-auto:create-drop ----每次程序结束的时候会清空表
ddl-auto:update ---- 每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新
ddl-auto: validate ---- 运行程序会校验数据与数据库的字段类型是否相同,不同会报错。

注意1:如果实体存在关联,同时创建临时表,外键关联,启动时可能会出现一下错误:

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "alter table userInfo_role_temp drop foreign key FKtf9gq5udods72cbwhv7b94vpm" via JDBC Statement

删除外键错误,原因是没有外键,jpa自动创建的时候执行了删除外键操作,就报错了。

解决方法:在yml配置里面,去掉database-platform: org.hibernate.dialect.MySQL5InnoDBDialect即可。仅供参考

注意2:自动创建的表与实体顺序不一致的问题。

原因:是因为hibernate源码中用的是TreeMap存储实体类字段,TreeMap属性是无序的。

解决方法:在项目E:\IDEA_project\shiro\src\main\java目录下创建org.hibernate.cfg.PropertyContainer.java

我们将源码复制到自己创建的PropertyContainer类里面

将private final TreeMap<String, XProperty> persistentAttributeMap;

改成private final LinkedHashMap<String, XProperty> persistentAttributeMap;

重新启动即可

-------------------

1、实体类添加@Entity @Table

@Table(name="userinfo")// 这个名字会在你的数据库自动生成,所以只需要自己创建好数据库,然后jpa会自动生成。

如下:

 @Id
 @GeneratedValue
 @Column(name = "Id")
 private int Id;
 @Column(name = "Name")
 private String Name;
 @Column(name = "Age")
 private int Age;

然后添加get ,set 方法及其构造方法

注意:默认的@GeneratedValue注解会在jpa自动创建表的时候多生成一张hibernate_sequence的表,如果不需要就添加上

@GeneratedValue(strategy = GenerationType.IDENTITY)即可。关于更多请自行百度@GeneratedValue注解

---------------------------

package com.springboot_jpa.demo.Repository;

import com.springboot_jpa.demo.entity.UserInfo;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import javax.transaction.Transactional;

@Configuration 
@Repository
@Transactional  //事务
public interface uersRepository extends JpaRepository<UserInfo,Long> {
    @Override
    <S extends UserInfo> S saveAndFlush(S s);

    /**
     * 查询全部
    * */
//        @Query("from userInfo")
//        public UserInfo getUerInfo(@Param("Id") Integer id,@Param("Name") String Name,@Param("Age") Integer Age);
    /**
     * 模糊查询
     * */
    /**
     * 添加用户
     * */
    //可以自己手动写sql
   // public UserInfo AddUerInfo(@Param("Id") Integer id, @Param("Name") String Name, @Param("Age") Integer Age);
    //@Modifying
    @Query(value = "Insert into  userInfo(Name,Age) value(?,?)",nativeQuery = true)
    void AddUerInfo(String name, int age);

    /**
     * 用户修改
     * */
   
    /**
     * 删除用户
     * */
 @Modifying
    @Query(value = "delete from userInfo where Id=? ",nativeQuery = true)
    void deleteById(int Id);
}

-------------------------

service层:

  //添加用户
    @Override
    @Transactional
    public void addUserInfo(UserInfo user) {   
      String string=uersRepository.saveAndFlush(user).toString();
       System.out.println("结果:"+string);
    }

---------------------------

controller层:

 @ResponseBody
    @GetMapping("/save")
    public JSONObject save(@RequestParam("name") String Name, @RequestParam("age") Integer Age) {
        UserInfo user = new UserInfo();
        user.setName(Name);
        user.setAge(Age);
        UserInfoServiceImpl.addUserInfo(user);

        JSONObject jsonObject = UserInfoServiceImpl.getAllUserInfo();
        System.out.println("查询全部:" + jsonObject.toString());
        return jsonObject;

    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值