• 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作


    这里利用Hibernate操作数据库完毕简单的CRUD操作。

    首先,我们须要先写一个javabean:

    package cn.itcast.domain;
    
    import java.util.Date;
    
    public class User {
    	private int id;
    	private String name;
    	private Date birthday;
    	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 Date getBirthday() {
    		return birthday;
    	}
    	public void setBirthday(Date birthday) {
    		this.birthday = birthday;
    	}
    	
    	
    }
    
    然后呢,写上它的映射文件:User.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
    	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping 
    	package="cn.itcast.domain">
    
    	<class name="User">
    		<id name="id">
    			<generator class="native"/> 
    		</id>
    		<property name="name" unique="true" />
    		<property name="birthday" />
    	</class>
    	
    </hibernate-mapping>


    继续我们须要写出数据库的映射文件:hibernate.cfg.xml

    <?xml version='1.0' encoding='utf-8'?> 
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
    	<session-factory>
    		<property name="connection.driver_class">
    			com.mysql.jdbc.Driver
    		</property>
    		<property name="connection.url">
    			jdbc:mysql://localhost:3306/test
    		</property>
    		<property name="connection.username">sa</property>
    		<property name="connection.password">123456</property>
    		
    		<property name="hbm2ddl.auto">update</property>
    		<property name="show_sql">true</property>
    		<property name="dialect">
    			org.hibernate.dialect.MySQLDialect
    		</property>
    		<mapping resource="cn/itcast/domain/User.hbm.xml" />
    	</session-factory>
    </hibernate-configuration>


    当这些都完毕之后,我们须要的就是编写Dao层了。

    首先。我们得实现Dao层的接口(interface):UserDao.java

    package cn.itcast.dao;
    
    import cn.itcast.domain.User;
    
    public interface UserDao {
    	public void saveUser(User user);
    	
    	public User findUserByName(String name);
    	
    	public User findUserById(int id);
    	
    	public void updateUser(User user);
    	
    	public void remove(User user);
    }
    


    而且我们须要写一个简单的HinbernateUtil类来获得session:HibernateUtil.java

    package cn.itcast.dao;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    public final class HibernateUtil {
    	private static SessionFactory sessionFactory;
    	
    	private HibernateUtil(){
    		
    	}
    	static{
    		Configuration cfg = new Configuration();
    		cfg.configure();
    		sessionFactory = cfg.buildSessionFactory();
    	}
    	public static SessionFactory getSessionFactory(){
    		return sessionFactory;
    	}
    	public static Session getSession(){
    		return sessionFactory.openSession();
    	}
    }
    
    接下来。我们就要写Dao层的实现了:UserDaoImpl.java

    package cn.itcast.dao.impl;
    
    import org.hibernate.Criteria;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.criterion.Restrictions;
    
    import cn.itcast.dao.HibernateUtil;
    import cn.itcast.dao.UserDao;
    import cn.itcast.domain.User;
    
    public class UserDaoImpl implements UserDao {
    	@Override
    	public void saveUser(User user) { //保存一个对象
    		Session s = null;
    		Transaction tx = null;
    		try{
    			s = HibernateUtil.getSession();
    			tx = s.beginTransaction();
    			s.save(user);
    			tx.commit();
    		}finally{
    			if(s!=null){
    				s.close();
    			}
    		}
    
    	}
    
    	@Override
    	public User findUserByName(String name) { //通过name查找一个对象
    		Session s = null;
    		try{
    			s = HibernateUtil.getSession();
    			Criteria c = s.createCriteria(User.class);
    			c.add(Restrictions.eq("name", name));
    			User user = (User)c.uniqueResult();//这里返回的是唯一的
    			return user;
    		}finally{
    			if(s!=null){
    				s.close();
    			}
    		}
    	}
    
    	@Override
    	public User findUserById(int id) { //通过id查找一个对象
    		Session s = null;
    		try{
    			s = HibernateUtil.getSession();
    			User user = (User) s.get(User.class, id);
    			return user;
    		}finally{
    			if(s!=null){
    				s.close();
    			}
    		}
    	}
    
    	@Override
    	public void updateUser(User user) { //更新一个对象
    		Session s = null;
    		Transaction tx = null;
    		try{
    			s = HibernateUtil.getSession();
    			tx = s.beginTransaction();
    			s.update(user);
    			tx.commit();
    		}finally{
    			if(s!=null){
    				s.close();
    			}
    		}
    
    	}
    
    	@Override
    	public void remove(User user) { //删除一个对象
    		Session s = null;
    		Transaction tx = null;
    		try{
    			s = HibernateUtil.getSession();
    			tx = s.beginTransaction();
    			s.delete(user);
    			tx.commit();
    		}finally{
    			if(s!=null){
    				s.close();
    			}
    		}
    	}
    
    }
    


    最后,我们编写一个測试类类验证是否成功:DaoTest.java

    package cn.test;
    
    import java.util.Date;
    
    import cn.itcast.dao.UserDao;
    import cn.itcast.dao.impl.UserDaoHibernateImpl;
    import cn.itcast.domain.User;
    
    public class DaoTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		UserDao dao = new UserDaoHibernateImpl();
    		User user = new User();
    		user.setName("name");
    		user.setBirthday(new Date());
    		dao.saveUser(user);
    		
    		user.setName("new name");
    		dao.updateUser(user);
    		
    		User u = dao.findUserByName(user.getName());
    		
    		dao.remove(u);
    
    	}
    
    }
    

  • 相关阅读:
    UML类图与类的关系详解
    UML用例图总结
    jQuery随机抽取数字号代码
    贪心算法
    回溯法实例详解(转)
    React 表单元素实例
    React 组件嵌套 父子关系
    React 滚动事件
    error: Error trying to parse settings: Unexpected trailing characters in PackagesUserPreferences.sublime-settings:9:2 reloading settings Packages/User/Preferences.sublime-settings
    jquery 下拉框左右选择
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7300565.html
Copyright © 2020-2023  润新知