好久没有敲过了,来熟悉下hibernate,做了个小测试。
测试项目结构图,关于导入jar包,可以参考 http://zhuws.blog.51cto.com/11134439/1932652
2.hibernate.cfg.xml 配置
<!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.connection.driver_class">oracle.jdbc.OracleDriver</property> <property name="hibernate.connection.username">ssh</property> <property name="hibernate.connection.password">ssh</property> <property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:xe</property> <!-- 方言 --> <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> <!-- 可视化sql --> <property name="hibernate.show_sql">true</property> <!-- 格式化sql,自动对可视化sql换行,对齐 --> <property name="hibernate.format_sql">true</property> <!-- 为getCurrentSession添加配置,保证事务中公用义个session --> <property name="current_session_context_class">thread</property> <!-- 映射文件配置 --> <mapping resource="User.hbm.xml"/> </session-factory> </hibernate-configuration>
3.User.hbm.xml配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping> <!-- name:是实体 table是表名称 --> <class name="com.hib.entity.Users" table="TEST_USER"> <id name="id"> <!-- 主键自增策略,hibernate提供了几种,这里测试,先写一个,后面会补充 --> <!-- increment:主键自增策略 --> <generator class="increment"></generator> </id> <!-- name:是实体中属性的名称,column:是表中字段的名称,type是数据类型 在这里发现后面的 pass和 address 没有写column和type 如果表字段和实体属性名称一致,可以省略不写 --> <property name="name" column="name" type="java.lang.String"/> <property name="pass"/> <property name="address"/> </class> </hibernate-mapping>
4. 实体类Users
package com.hib.entity;
public class Users {
private Integer id;
private String name;
private String pass;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Users(Integer id, String name, String pass, String address) {
super();
this.id = id;
this.name = name;
this.pass = pass;
this.address = address;
}
public Users() {
super();
}
@Override
public String toString() {
return "Users [id=" + id + ", name=" + name + ", pass=" + pass + ", address=" + address + "]";
}
}5. 建表,这里只是测试,所以类型长度就不要在意了。
6.userDao
package com.hib.userDao;
import com.hib.entity.Users;
public interface UserDao {
// 根据用户id查询用户信息
public Users queryUserById(Integer id);
// 插入用户
public void insertUser(Users user);
// 删除用户
public void deleteUser(Integer id);
// 更新用户数据
public void updateUser(Users user);
}7.userDaoImpl
package com.hib.userDao.impl;
import org.hibernate.Session;
import com.hib.entity.Users;
import com.hib.userDao.UserDao;
import com.hib.util.HibUtil;
public class UserDaoImpl implements UserDao{
// 根据用户ID查询
@Override
public Users queryUserById(Integer id) {
Session session = HibUtil.getSession();
Users users = session.get(Users.class, id);
return users;
}
// 插入数据
@Override
public void insertUser(Users user) {
Session session = HibUtil.getSession();
session.save(user);
}
// 根据ID 删除
@Override
public void deleteUser(Integer id) {
Session session = HibUtil.getSession();
Users users = session.get(Users.class, id);
session.delete(users);
}
// 更新
@Override
public void updateUser(Users user) {
Session session = HibUtil.getSession();
session.update(user);
}
}8.userService
package com.hib.services;
import com.hib.entity.Users;
public interface UserServices {
// 根据用户id查询用户信息
public Users queryUserById(Integer id);
// 插入用户
public void insertUser(Users user);
// 删除用户
public void deleteUser(Integer id);
// 更新用户数据
public void updateUser(Users user);
}9.userServiceImpl
package com.hib.services.impl;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.hib.entity.Users;
import com.hib.services.UserServices;
import com.hib.userDao.UserDao;
import com.hib.userDao.impl.UserDaoImpl;
import com.hib.util.HibUtil;
public class UserServicesImpl implements UserServices{
private UserDao ud = new UserDaoImpl();
@Override
public Users queryUserById(Integer id) {
Session session = null;
Transaction tx = null;
Users user = null;
try {
session = HibUtil.getSession();
tx = session.beginTransaction();
user = ud.queryUserById(id);
tx.commit();
} catch (Exception e) {
tx.rollback();
throw new RuntimeException("查询出错!");
}
return user;
}
@Override
public void insertUser(Users user) {
Session session = null;
Transaction tx = null;
try {
session = HibUtil.getSession();
tx = session.beginTransaction();
ud.insertUser(user);
tx.commit();
} catch (Exception e) {
tx.rollback();
throw new RuntimeException("插入错误!");
}
}
@Override
public void deleteUser(Integer id) {
Session session = null;
Transaction tx = null;
try {
session = HibUtil.getSession();
tx = session.beginTransaction();
ud.deleteUser(id);
tx.commit();
} catch (Exception e) {
tx.rollback();
throw new RuntimeException("删除错误!");
}
}
@Override
public void updateUser(Users user) {
Session session = null;
Transaction tx = null;
try {
session = HibUtil.getSession();
tx = session.beginTransaction();
ud.updateUser(user);
tx.commit();
} catch (Exception e) {
tx.rollback();
throw new RuntimeException("更新错误!");
}
}
}10.util 工具类
package com.hib.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
*
* @author admin
* 生产session
*/
public class HibUtil {
private static Configuration cfg = new Configuration().configure();
private static SessionFactory factory = cfg.buildSessionFactory();
public static Session getSession(){
return factory.getCurrentSession();
}
public static Session openSession(){
return factory.openSession();
}
}11.测试
package com.hib.test;
import org.junit.Test;
import com.hib.entity.Users;
import com.hib.services.UserServices;
import com.hib.services.impl.UserServicesImpl;
public class TestUser {
private UserServices us = new UserServicesImpl();
// 插入数据
@Test
public void insert(){
us.insertUser(new Users(null, "小李飞刀", "xlfd", "china"));
}
// 测试查询
@Test
public void query(){
Users users = us.queryUserById(1);
System.out.println(users);
}
// 更新
@Test
public void update(){
us.updateUser(new Users(1, "小李飞刀他妈", "xlfdtm", "AAAAA"));
}
// 删除
@Test
public void delete(){
us.deleteUser(1);
}
}12. dao 是和数据打交道
service 是控制业务,事务,实际开发业务就是在这里写
注意: 这里用的数据库是oracle,测试时候,需要在hibernate.cfg.xml 中把数据库名称和密码修改为自己的。
本文出自 “永恒之光” 博客,请务必保留此出处http://zhuws.blog.51cto.com/11134439/1933294
原文:http://zhuws.blog.51cto.com/11134439/1933294