Hibernate
使用Hibernate的步骤:
1. 导入jar包
2. 创建表(t_user)的POJO类(User),及POJO与表的映射关系文件(User.hbm.xml)
3. 创建Hibernate配置文件(hibernate.cfg.xml)
4. 调用Hibernate,运行数据库操作
使用Maven进行搭建项目添加如下依赖:
写道
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.5.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.5.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
t_user表中字段:
写道
id int
username varchar(20)
password varchar(20)
username varchar(20)
password varchar(20)
User实体类:
public class User {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
User.hbm.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class table="t_user" name="com.cn.pojo.User"> <id name="id" column="id"> <generator class="native"/> </id> <property name="username"/> <property name="password" column="password"/> </class> </hibernate-mapping>
class标签内包裹的就是一个POJO与一个表的映射关系。
table属性指示哪一张表。
name属性指示实体类的完全限定名。
id标签表示主键,name表示实体类中对应的字段(private Integer id),column表示表中对应的字段(id),id标签内的generator标签表示主键的生成策略,一般是自增的(native),后面会介绍其他的。
property标签表示一般的字段映射,如果实体类中的字段名与表中的字段名相同可以省略column属性。
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> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///mydb</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.connection.pool_size">1</property> <mapping resource="com/cn/pojo/User.hbm.xml"/> </session-factory> </hibernate-configuration>
- hibernate-configuration标签内配置了hibernate连接数据库的基本配置。
- session-factory配置连接数据库的数据源及映射等。
- hibernate.dialect表示方言,指示使用什么数据库。
- hibernate.connection.driver_class表示数据库驱动。
- hibernate.connection.url表示数据库地址。
- hibernate.connection.username连接数据库的用户名。
- hibernate.connection.password密码。
- hibernate.current_session_context_class配置session上下文。
- hibernate.show_sql是否在控制台显示sql语句。
- hibernate.connection.pool_size数据库连接池的数量。
保存一个User对象:
public static void main(String[] args) {
Configuration cfg = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory factory = cfg.buildSessionFactory(serviceRegistry);
Session session = factory.getCurrentSession();
session.beginTransaction(); //数据库操作开始
User user=new User();
user.setUsername("jack");
user.setPassword("000000");
session.save(user);
session.getTransaction().commit(); //数据库操作结束
}
对数据库访问的语句在事务中进行。
执行的SQL语句:
写道
insert into t_user (username, password) values (?, ?)
根据主键查找对象:
session.beginTransaction();
User user=(User) session.get(User.class, 31);
System.out.println(user.getUsername());
session.getTransaction().commit();
执行的SQL语句:
写道
select user0_.id as id1_0_0_, user0_.username as username2_0_0_, user0_.password as password3_0_0_ from t_user user0_ where user0_.id=?
修改对象:
User user=(User) session.get(User.class, 31);
user.setPassword("111111");
执行的SQL语句:
写道
Hibernate: select user0_.id as id1_0_0_, user0_.username as username2_0_0_, user0_.password as password3_0_0_ from t_user user0_ where user0_.id=?
Hibernate: update t_user set username=?, password=? where id=?
Hibernate: update t_user set username=?, password=? where id=?
删除对象:
User user=(User) session.get(User.class, 31);
session.delete(user);
执行的SQL语句:
写道
Hibernate: select user0_.id as id1_0_0_, user0_.username as username2_0_0_, user0_.password as password3_0_0_ from t_user user0_ where user0_.id=?
Hibernate: delete from t_user where id=?
Hibernate: delete from t_user where id=?
查找所有的对象:
Query query=session.createQuery("from User");
List<User> userList=query.list();
System.out.println(userList.size());
注意:
from后跟的是POJO,而不是t_user。
执行的SQL语句:
写道
Hibernate: select user0_.id as id1_0_, user0_.username as username2_0_, user0_.password as password3_0_ from t_user user0_