一、Hibernate-CRUD操作
目录结构:
1.创建domain public class User { private Long id; private String name; private BigDecimal salary; private java.util.Date hiredate; //getter,setter } 2.DAO public interface IUserDAO { void save(User user); void delete(User user); void update(User user); User get(Long id); List<User> list(); } 3.User.hbm.xml配置package是可以不写的,如果不写package,其中所有的类都必须有全限定名.
在一个hbm.xml中,可以写多个对象的映射,但是一般来说,一个映射文件对应一个对象.建议和类名相同(User.java --> User.hbm.xml)
class元素的table属性是可以省略的,如果不写table,对应table的名称和类的名称一模一样(大小写一样).
property元素对应的是对象的属性,而不是字段,可以通过修改property元素的access属性来改变访问策略(访问属性/字段).<property. access="field"/>使用字段来关联表字段
property元素的type属性可以为对象的属性添加指定的映射类型type里面写的类型,不是数据库的类型,是hibernate定义的一种中间类型, JAVA类型-中间类型-数据表类型
把所有连接数据库的配置放在hibernate.properties文件中,在hibernate.cfg.xml文件中 只存在关联映射的配置
或者是把所有的连接数据库的配置放在 hibernate.cfg.xml文件中
<hibernate-configuration> <session-factory> <!-- 连接数据库所需要的五要素 --> <property>org.hibernate.dialect.MySQLDialect</property> <property>com.mysql.jdbc.Driver</property> <property>jdbc:mysql:///demo</property> <property>root</property> <property>admin</property> <property>true</property> <!-- 关联需要管理的映射文件 --> <mapping resource="hello/domain/User.hbm.xml"/> </session-factory> </hibernate-configuration> 5.DAO实现类 @SuppressWarnings("all") public class UserDAOImpl implements IUserDAO { @Override @SuppressWarnings("all") public void save(User user) { // 1.创建配置对象,读取配置文件 Configuration config = new Configuration().configure(); // 2.获取SessionFactory对象 SessionFactory sf = config.buildSessionFactory(); // 3.获取Session对象 Session session = sf.openSession(); // 4.激活事务 Transaction tx = session.beginTransaction(); // 5.具体操作(DML语句) session.save(user);// INSERT INTO 表名 // 6.提交事务 session.getTransaction().commit(); // 7.关闭session session.close(); // 8.关闭SessionFactory sf.close(); } @Override public void delete(User user) { Configuration config = new Configuration().configure(); SessionFactory sf = config.buildSessionFactory(); Session session = sf.openSession(); session.beginTransaction(); session.delete(user); session.getTransaction().commit(); session.close(); sf.close(); } @Override public void update(User user) { Configuration config = new Configuration().configure(); SessionFactory sf = config.buildSessionFactory(); Session session = sf.openSession(); session.beginTransaction(); session.update(user); session.getTransaction().commit(); session.close(); sf.close(); } @Override public User get(Long id) { // 1.创建配置对象 Configuration config = new Configuration(); // 2.读取配置文件 config.configure("/hibernate.cfg.xml"); // 3.创建SessionFactory. @SuppressWarnings("deprecation") SessionFactory sf = config.buildSessionFactory(); // 4.获取Session Session session = sf.openSession(); // 5.具体的查询操作 SELECT * FROM 表名 WHERE id = ? User user = (User) session.get(User.class, id); // 6.关闭session session.close(); // 7.关闭SessionFactory sf.close(); return user; } @Override @SuppressWarnings("all") public List<User> list() { // 1.创建配置对象读取配置文件 Configuration config = new Configuration().configure(); // 2.创建SessionFactory对象 SessionFactory sf = config.buildSessionFactory(); // 获取Session对象 Session session = sf.openSession(); // 查询操作 String hql = "SELECT u FROM User u"; Query query = session.createQuery(hql); List<User> list = query.list(); // 关闭session session.close(); sf.close(); return list; } } 6.测试 二、配置和映射文件细节 自动生成数据库表根据对象和和映射文件,在创建SessionFactory对象的时候,可以自动生成对应的数据库表
在hibernate.properties配置文件中hibernate.hbm2ddl.auto属性
create-drop 删除表后创建表,在SessionFactory关闭后再次删除表
create 先删除后创建表
update 匹配domain属性和数据库表的列,更新表结构
validate 验证表结构:如果表结构和映射文件不匹配,hibernate启动失败