• Hibernate---数据操作示例BY实体类注释


    通过实体的映射文件创建表的示例,除了基本jar包外,还需要jar包如下

    ejb3-persistence.jar、hibernate-annotations.jar这两个包均在hibernate-annotations压缩文件下

    下载,密码:o30j;官网下载:https://sourceforge.net/,搜索Hibernate,选择Hibernate,点击Files,选择需要的依赖jar包(hibernate-annotations);基本jar包下载可阅读Hibernate---开发环境搭建文章;

    例子

    创建一个Student.java实体注释类:该类需要一个无参的构造函数,以及属性的get/set方法,而其中的注释导入的则是javax.persistence.*包。具体注释简介见Hibernate---实例类注释。

    @Entity
    @DynamicInsert(true)
    @DynamicUpdate(true)
    @Table(name = "students")
    public class Students implements Serializable {
    
        private static final long serialVersionUID = 2257468553009291835L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="id")
        private int id;
        
        @Column(name="name",columnDefinition="varchar(50) default ''" )//需要设置默认值,default中的''不能忽略,并且必须指定数据类型值。特别提示,不能有nullable=false设置
        private String name;
        
        @Column(name="age",nullable=false)
        private int age;
    public Students() { }
        
        public Students(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
        
    }

    @DynamicInsert(true) @DynamicUpdate(true)这两个类注释用于动态生成sql语句,即优化sql代码,提高执行sql效率。默认值为false

    举例说明:

    添加对象时

    没有设置@DynamicInsert(true),如果该例子中添加的student对象没有name值,SQL语句仍然是insert into students (age, name)  values (?, ?),并且保存到数据库中的student记录没有保存name默认值。

    若设置@DynamicInsert(true)如果该例子中添加的student对象没有name值,那么SQL语句则是insert into students (age)  values (?),并且保存到数据库中的student记录保存了name默认值。

    修改对象时

    没有设置 @DynamicUpdate(true),如果该例子中只修改了student对象的name值,SQL语句仍然是update students set name=?, age=? where id = ?;

    若设置 @DynamicUpdate(true)如果该例子中只修改了student对象的name值,那么SQL语句则是update students set name=? where id = ?;

    特别注意:@DynamicInsert添加记录时,设置了default="' '默认值的字段(属性)不能设置nullable=false非空属性。nullable=false则表示该字段不能为空,在运行时,@DynamicInsert不生效,非空字段为空,会报错。

    配置Hibernate配置文件hibernate.cfg.xml(数据库连接信息),将该文件放到src目录下。注意,与实体注释类关联的mapping标签属性是class

    复制代码
    <!-- ~ Hibernate, Relational Persistence for Idiomatic Java ~ ~ License: 
        GNU Lesser General Public License (LGPL), version 2.1 or later. ~ See the 
        lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. -->
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
        <session-factory>
            <!-- 配置数据库的方言 -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
            <!-- 驱动程序名 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <!-- 数据库名称 -->
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernateTest</property>
            <!-- 用户名 -->
            <property name="hibernate.connection.username">root</property>
            <!-- 密码 -->
            <property name="hibernate.connection.password">123456</property>
    
            <!-- 显示SQL语句 -->
            <property name="show_sql">true</property>
            <!-- 格式化输出SQL语句 -->
            <property name="format_sql">true</property>
            
            <property name="hbm2ddl.auto">create</property><!-- 在实际情况中,该值应为update -->
            <!-- 与实体注释类关联 -->
            <mapping class="com.hibernate.study.entity.Students" />
            
        </session-factory>
    </hibernate-configuration>
    复制代码

    一个测试类

    复制代码
    public class StudyTest {
    
        private static SessionFactory sessionFactory; // 会话工厂对象
        private static Session session;
        private static Transaction transcction;
    
        public static void main(String[] args) {
            // 创建配置对象
            Configuration config = new Configuration().configure();
            // 创建会话工厂对象
            sessionFactory = config.buildSessionFactory();
            // 会话对象
            session = sessionFactory.openSession();
            // 开启事务
            transcction = session.beginTransaction();
            // 生成学生对象
            Student stu = new Student("疾风剑豪", 10);
            session.save(stu); // 保存对象到数据库
            transcction.commit(); // 提交事务
            session.close(); // 关闭会话
            sessionFactory.close(); // 关闭会话工厂
        }
    
    }
    复制代码

    至此还需要一个log4j.properties配置文件

  • 相关阅读:
    ui、li模拟下拉框
    六项精进
    Echarts柱状图添加点击事件
    [UWP]爱恋动漫BT开发小记
    [杂谈]这个四月
    [uwp]自定义图形裁切控件
    [uwp]自定义Behavior之随意拖动
    [uwp]数据绑定再学习
    [mvc]记一次“项目”的历程
    [uwp]ImageSource和byte[]相互转换
  • 原文地址:https://www.cnblogs.com/xiaobaizhiqian/p/7931755.html
Copyright © 2020-2023  润新知