一般情況下,用Mybatis的時候是先設計表結構再進行實體類以及映射文件編寫的,特別是用代碼生成器的時候。
但有時候不想用代碼生成器,也不想定義表結構,那怎么辦?
這個時候就會想到Hibernate,然后想到它的hibernate.hbm2ddl.auto
配置項。
所以手工創表的問題可以很方便的迅速用Hibernate來解決。 那有人問啦:就是不想用Hibernate才換的Mybatis,你這又兜回去了嗎?
其實不是的,我們需要的就是單單一個hbm2ddl功能。
其實應該這么想:有一款工具能夠自動根據注解的實體類來生成各種數據庫相應的表結構,只需要加幾個jar包 (經測試后只要7個)并且 少量配置(3個配置項) 。
這款工具就是Hibernate。為什么不能是它呢!??!
原理說來也是超級的簡單: 加入hibernate的包, 注解實體類,程序開始時初始化一下hibernate的SessionFactory并清除它。
示例:
需要的Hibernate相關的JAR包 (本例基于Hibernate5.0.7,僅需要7個):
hibernate-core-5.0.7.Final.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
geronimo-jta_1.1_spec-1.1.1.jar
jboss-logging-3.3.0.Final.jar
dom4j-1.6.1.jar
javassist-3.18.1-GA.jar
Hibernate.cfg.xml文件:(去掉多余的,精簡后的內容)
<?xml version="1.0" encoding="UTF-8"?><!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> <!--不采用InnoDB方式加快速度 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 注意update方式時對于屬性的刪減并不會刪除數據庫字段 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 注意注解的話,只能用class一個一個引用。除非與Spring整合才能掃描文件夾路徑 --> <mapping class="com.sunwii.mybatis.bean.User" /> </session-factory></hibernate-configuration>
注解的實體類:
@Entity@Table(name = "t_user")@Data@NoArgsConstructor@ToStringpublic class User implements Serializable { private static final long serialVersionUID = -4013951528313410972L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; @Column(length = 30) private String name; @Column private Float height; @Column private Double salary; @Column private Integer vip; @Column @Temporal(TemporalType.DATE) private Date birthday; @Column @Temporal(TemporalType.TIMESTAMP) private Date lastlogin; @Column @Enumerated(EnumType.STRING) // mybatis 默認會將枚舉轉化為字符串類型存儲,此時數據庫為varchar型 private State state; @Column @Enumerated(EnumType.ORDINAL) // 可以為mybatis設置枚舉類型存儲為其索引值存儲,此時數據庫為int型 private Level level; @Column(length = 10) @Enumerated(EnumType.ORDINAL) // mybatis 自定義類型轉換器將枚舉轉化為相應數字類型存儲,此時數據庫為int型 private Sex sex; @Column @Type(type = "string") // mybatis 自定義類型轉換器將列表轉化為相應字符串類型存儲,此時數據庫為varchar型 private List<String> tels; public User(int id) { super(); this.id = id; } public User(int id, String name) { super(); this.id = id; this.name = name; } public User(String name) { super(); this.name = name; }}
新聞熱點
疑難解答