精华内容
下载资源
问答
  • 实体类映射
    千次阅读
    2020-01-10 17:37:30

    通用Mapper实体类映射数据库字段问题

    最近再做项目时遇到了一个小坑, 删除某个表格行时报错了, Unknown column ‘kind_id’ in ‘where clause’. 显示我的sql语句DELETE FROM tb_app_leave WHERE kind_id = 4, 当时实体类属性名时kindId, 数据库字段名时kindId, 本来想按外键删除的, 结果就报了上面这么个错.
    查了不少资料, 最后发现时通用mapper的默认映射关系的原因:

    通用 Mapper 中, 默认情况下是将实体类字段按照驼峰转下划线形式的表名列名进行转换. 如果想要修改默认的转换方式, 可以在后续的配置中 ,修改 style 全局配置.

    查看资料后我用了 @NameStyle 注解, 该注解的值支持下面的选项

    Style.normal,                     //原值
    Style.camelhump,                  //驼峰转下划线
    Style.uppercase,                  //转换为大写
    Style.lowercase,                  //转换为小写
    Style.camelhumpAndUppercase,      //驼峰转下划线大写形式
    Style.camelhumpAndLowercase,      //驼峰转下划线小写形式
    

    然后通用mapper自动生成的sql就是自己想要的结果了:DELETE FROM tb_app_leave WHERE kindId=4

    当然通用mapper还有更多的注解, 可以参考下面的博客地址:
    https://blog.csdn.net/lyf_ldh/article/details/81041253

    更多相关内容
  • 开发过程中经常会遇到实体类保存到数据库的需求。通常就是建好数据库,映射到项目中。这个代码是从代码实体类到数据库(C#+sqlite),其他语言和数据库可用来参考
  • 实体类映射

    千次阅读 2020-03-09 16:57:59
    1、实体类映射配置 1.1、 @注解配置 所有的注解都是在javax.persistence.*; @Entity 实体注解 @Table指定对应的表 @Id 配置主键 @Column 配置普通属性 @OneToMany、@ManyToOne、@ManyToMany、@OneToOne 配置关系 ...

    回到首页☞

    XML配置文件是最基础的配置,而@注解是Java的官方JPA提供的。

    1、实体类映射配置

    1.1、 @注解配置

    所有的注解都是在javax.persistence.*;

    • @Entity 实体注解
    • @Table指定对应的表
    • @Id 配置主键
    • @Column 配置普通属性
    • @OneToMany、@ManyToOne、@ManyToMany、@OneToOne 配置关系
    package com.wht.vo;
    
    import javax.persistence.*;
    import java.util.List;
    
    /**
     * 部门实体
     *
     * @author JDIT
     */
    @Entity
    @Table(name = "t_dept")
    public class DeptVO {
      @Column(name = "dept_name")
      private String deptName;
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      @Column(name = "dept_no")
      private Integer deptNo;
    
      @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
      @JoinColumn(name = "dept_no")
      private List<EmployeeVO> employeeVOS;
    
      public String getDeptName() {
        return deptName;
      }
    
      public void setDeptName(String deptName) {
        this.deptName = deptName;
      }
    
      public Integer getDeptNo() {
        return deptNo;
      }
    
      public void setDeptNo(Integer deptNo) {
        this.deptNo = deptNo;
      }
    
      public List<EmployeeVO> getEmployeeVOS() {
        return employeeVOS;
      }
    
      public void setEmployeeVOS(List<EmployeeVO> employeeVOS) {
        this.employeeVOS = employeeVOS;
      }
    }
    
    
    

    运行一下创建,可以父子表一起写入,这种配置很容易出问题,如果十几个表关联的时候,更复杂。

    2.1、XML 配置

    了解下即可。

    3.1、配置到Hibernate.cfg.xml中

    XML配置和@配置引入方式有点不同

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
    
    <hibernate-configuration>
        <session-factory>
    
            <mapping class="com.wht.vo.EmployeeVO"/>
            <mapping class="com.wht.vo.DeptVO"/>
            <mapping resource="Dept.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>
    
    

    2、主键映射

    一个实体最好有主键,并且不要使用基本类型而是包装类,因为级联生成没有主键前可以为null,string的当然不需要这么考虑。

    2.1配置主键

    • 注解方式配置
      不是自增的,就手工设置。
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      @Column(name = "dept_no")
    
    • XML配置
      忽略,因为JPA是通用方式。

    2.2、主键生成规则

    • GenerationType.AUTO:自动方式,根据底层数据库自动选择。
    • GenerationType.TABLE 一般结合@TableGenerator使用
    • GenerationType.SEQUENCE:又seq确定取值,适配Oracle,db2等
    • GenerationType.IDENTITY:支持DB2、MYSQL等IDENTITY类型主键。

    XML类的生成规则这里忽略。

    3、 普通属性映射

    3.1 @配置普通属性

    @Column和@Basic都可以用于配置非主键的普通属性。

    @Column

    • nullable :是否可以为空
    • unique :是否唯一
    • insertable:是否允许插入
    • updatable:是否允许更新
    • length:列长度
    • columnDefinition:列类型
    • scale:整数长度
    • percision:小数点长度

    @Basic 配置加载方式的,对大文本字段有意义,默认即时加载

    • fetch:加载类型,默认即使加载
    • optional : 是否可以为空
      @Column(name = "salary",scale = 5,precision = 2,columnDefinition = "int")
      private Double salary;
    
      @Column(name = "remark")
      @Basic(fetch = FetchType.LAZY,optional = true)
      private String remark;
    

    3.2、XML配置普通属性

    忽略

    4、日期属性配置

      @Temporal(TemporalType.TIMESTAMP)
      @Column(name = "hire_date")
      private Date hireDate;
    

    5、临时属性映射

    @Transient JPA标准,这个配置是表明这个字段知识POJO用于运算,不参与和DB字段映射。
    可以配置在属性上,也可以配置在getter或setter方法上。

    6、版本属性配置

    Version一种乐观锁,为了确保不同线程对该数据进行操作。

    • 悲观锁,for update,传统的一种方式,我对一行数据DML,先锁住这一行。其它线程不能进行DML。
    • 乐观锁加一个版本号,每次操作前检查版本号是否有变化,变化了重新读取数据记性操作。

    回到首页☞

    展开全文
  • 在项目开发中我们经常会遇到表中的字段名和表对应实体类的属性名称不一定都是完全相同的。下面小编给大家介绍下这种情况下如何解决字段名...下面小编给大家带来了Mybatis实体类和表映射的解决方法,小伙伴们一起学习吧
  • Mybatis与实体类映射

    千次阅读 2020-12-17 14:16:09
    数据库为MySQL,表是全部英文大写且以下划线分割,映射为驼峰命名 1、数据库表 CREATE TABLE `t_user` ( `USER_ID` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `USER_NAME` varchar(32) ...

    数据库为MySQL,表是全部英文大写且以下划线分割,映射为驼峰命名

    1、数据库表

    CREATE TABLE `t_user`  (
      `USER_ID` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
      `USER_NAME` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
      `USER_PASSWORD` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
      `USER_EMAIL` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
      PRIMARY KEY (`USER_ID`) USING BTREE,
      INDEX `IDX_NAME`(`USER_NAME`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
    

    2、实体类

    public class User {
    
        private String userId;
        private String userName;
        private String userPassword;
        private String userEmail;
    
        public String getUserId() {
            return userId;
        }
    
        public void setUserId(String userId) {
            this.userId = userId;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getUserPassword() {
            return userPassword;
        }
    
        public void setUserPassword(String userPassword) {
            this.userPassword = userPassword;
        }
    
        public String getUserEmail() {
            return userEmail;
        }
    
        public void setUserEmail(String userEmail) {
            this.userEmail = userEmail;
        }
    
        public User(String userId, String userName, String userPassword, String userEmail){
            this.userId=userId;
            this.userName=userName;
            this.userPassword=userPassword;
            this.userEmail=userEmail;
        }
        public User(){
    
        }
    }
    

    3、MyBatis

    <resultMap id="BaseResultMap" type="com.weirdo.model.User">
        <id column="USER_ID" jdbcType="VARCHAR" property="userId"/>
        <result column="USER_NAME" jdbcType="VARCHAR" property="userName"/>
        <result column="USER_PASSWORD" jdbcType="VARCHAR" property="userPassword"/>
        <result column="USER_EMAIL" jdbcType="VARCHAR" property="userEmail"/>
    </resultMap>
    

    4、查询结果

    [
        {"userId":"1","userName":"大明","userPassword":"1","userEmail":"daming@qq.com"},
        {"userId":"2","userName":"二明","userPassword":"2","userEmail":"erming@qq.com"}
    ]
    
    展开全文
  • 为了做查询,做了一个pojo为UserDemo,且继承了User。 public class UserDemo extends User{ private String loginName; private String password; private Date updatetime; } User里多了一些字段,例如...

    为了做查询,做了一个pojo为UserDemo,且继承了User类。

    public class UserDemo extends User{
            private String loginName;
            private String password;
            private Date updatetime;
    }
    

    User类里多了一些字段,例如createtime、createtime等。

    public class User implements Serializable {
            @Id
            private Integer id;
            private String loginName;
            private String userName;
            private String password;
            private String email;
            private String address;
            private String platform;
            private Date createtime;
    }
    

    Mapper接口定义为:

    UserDemo findOneByLoginNameAndPassword(String loginName, String password);
    

    xml中的查询如下:

    <select id="findOneByLoginNameAndPassword" resultType="com.demojava.entity.UserDemo" parameterType="String">
                select login_name,password,createtime,updatetime,platform from user where login_name = #{loginName} and  password = #{password}
    </select>
    

    业务代码为:

    UserDemo userDemo = userMapper.findOneByLoginNameAndPassword(loginName,password);
    logger.info("校验loginName和password得到的userDemo信息:" + userDemo);
    

    此时的打印为:

    校验loginName和password得到的userDemo信息:UserDemo(loginName=xunlian, password=123456, updatetime=Thu May 16 15:30:43 CST 2019)
    

    当我在业务代码中打印其他信息时:

    String platForm = userDemo.getPlatform();
    Date createtime = userDemo.getCreatetime();
    Date updatetime = userDemo.getUpdatetime();
    logger.info("platForm:{},createtime:{},updatetime:{}",platForm,createtime,updatetime);
    

    神奇的是,控制台中居然有对应的输出:

    platForm:dev,createtime:Thu May 16 15:31:02 CST 2019,updatetime:Thu May 16 15:30:43 CST 2019
    

    而且,方法最后返回了userDemo,居然把UserDemo加User里所有的属性都包含了,而且都有值。
    这是为什么?sql里我只查了几个字段呀。

    展开全文
  • mybatis自动生成实体类及实体类映射文件,mybatis自动生成实体类及实体类映射文件
  • 将数据库表映射成和表名相同的实体类
  • 自动生成MyBatis的实体类、实体映射XML文件、Mapper、Service、ServiceImpl、Controller,可以生成全套文件,并且抽了模板。。
  • 输入文件和输出文件名分别为为:humpName.txt(注意,格式为:每行一个字符,空格换行),humpTool.txt,默认在E盘根目录,humpTool.jar也默认E盘根目录, 然后在windows命令提示符中输入(快捷键:windows键 + R,...
  • java实体映射

    2018-08-19 22:24:43
    将数据库mysql中的表,映射到pojo,数据库中的字段和pojo属性一致
  • 写hibernate大作业过程中,出现了一个实体类中的数据要写到多个数据库表中的问题,以前MVC下解决问题方法是使用sql语句进行直接写入,但是在Hibernate大环境下,以前不太会,查找资料后: <?xml version="1.0" ...
  • 在自己配置的config中 添加: Configuration configuration = new Configuration(); configuration.setMapUnderscoreToCamelCase(true);  factoryBean.setConfiguration(configuration); 由于在此方法中 加了注解...
  • 【Hibernate】——实体类映射到数据库表

    千次阅读 热门讨论 2016-12-30 12:31:11
    上回说到, Hibernate是一个开放源代码的对象关系映射框架,其核心应该也就是映射了,所以,今天我们了解一下Hibernate是如何将实体和数据库映射的。--即Hibernate根据实体自动建立表和字段。 为了让大家更明了,...
  • 今天写一个Spring boot集成Spring data jpa实现一些简单功能的技术验证项目,其中一个ModelWel映射了“T_PM_WELL”表,但有一个属性"sname"需要映射到第二张表“T_PM_NODE”上,开始时用@Formula注解来实现,但...
  • Myeclipse自动生成Hibernate配置文件及实体类映射ORM配置文件--hibernate方式
  • Spring中Mongodb的java实体类映射

    万次阅读 2016-09-22 14:21:51
    spring-data-mongodb中的实体映射是通过MongoMappingConverter这个实现的。它可以通过注释把java转换为mongodb的文档。 它有以下几种注释: @Id - 文档的唯一标识,在mongodb中为ObjectId,它是唯一的,通过...
  • 说明: Android接口返回的数据都是json的String对象,Gson封装了映射功能,网络请求... 先建一个实体类映射json String: package com.baofoo.mobile.bean; import java.util.ArrayList; /** * 网络分类信息封装
  • 请输入包的名称和映射文件需要放到的文件夹之后运行CreateTableXml里的main方法,就可以自动生成映射文件了。记着刷新文件夹,要不然是看不到的。 当然只是一些基础的属性。对于一些比较复杂,还是需要自己来修改的...
  • 由于spring对hibernate配置文件hibernate.cfg.xml的集成相当好, 所以,在项目中我一直使用spring的org.springframework.orm.hibernate....LocalSessionFactoryBean有好几个属性用来查找hibernate映射文件: ma
  • 我们可以使用 resultMap 中的 association 来写明映射关系,代码如下:
  • hibernate两个实体类映射数据库中的同一张表,保错 查询的时候事务回滚,最后提示如下的错误:  org.hibernate.MappingException: Unknown entity: com.smart.oo.entity.ResourceEntity
  • SSM框架使用Generator生成实体类,dao接口和Mapping映射文件。
  • Java实体类(Dto)映射

    2021-09-10 16:58:48
    通常是一张表对应Java的一个实体类,但在很多时候,接口返回给前端的数据远不如此。举个栗子:在一张存放作者发布的文章的表中(生成的实体类名PO),仅仅存有用户的ID,但是后端文章列表接口中需要返回作者的中文...
  • mybatis mapper与实体类映射原理

    万次阅读 2018-04-23 16:58:36
    这里我们需要补充讲一下mybaits是怎么使用XMLStatementBuilder的对象的parseStatementNode函数借用MapperBuilderAssistant对象builderAssistant的addMappedStatement解析MappedStatement并将其关联到...
  • net.sf.json.JSONObject json1=JSONObject.toBean(jsonObject, 实体类.class); // 阿里巴巴json转化 com.alibaba.fastjson.JSONObject json2=com.alibaba.fastjson.JSONObject.toJavaObject(jsonObjec...
  • 实体类映射关系

    千次阅读 2018-10-07 15:40:32
    JPA @OneToOne、@ManyToOne、@OneToMany和@ManyToMany几个注解提供用以定义实体类之间的关系。 OneToOne关系 OneToOne 表示一对一的关系,先来看 OneToOne 的属性: @OneToOne targetEntity属性表示默认关联...
  • Spring Data JPA联合主键-实体类映射的配置1.数据库表结构2.为联合主键的三个字段单独创建一个类3.实体类配置 这里给出实现方式的一种 数据库: oracle 1.数据库表结构 表中 sched_name, trigger_name, trigger_...
  • Java-JDBC【之】实现ORM,结果集映射实体类(ResultSet、注解、反射) 1.ORM实现思路 2.@Table、@Column、标识实体类 2.1.创建注解 @Table、@Column 2.2.标识实体类 2.3.数据库表 3.结果集解析,注解加反射填充实体...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 270,459
精华内容 108,183
关键字:

实体类映射

友情链接: Simulator.zip