SpringMVC + Hibernate实现增删改查

后台 专栏收录该内容
21 篇文章 0 订阅

       在前一篇博客  IntelliJ使用Maven创建SpringMVC服务 的基础上添加数据库实现, tomcat默认适用JDBC连接数据库服务, 有个澳大利亚小伙觉得写SQL太麻烦,就编写了Hibernate框架,直接用Java操作数据库。 (PS:这跟Android平台用的LitePal、GreenDao、Realm和iOS平台用的CoreData、Realm作用一样, 让开发者不用再写SQL语句便能读写数据库)

    

                                    

                                                                                           实测gif


   本demo目录结构的说明:


    本demo使用REST风格的url格式,例如:

   连接MySQL的列表页链接: http://localhost:8080/userdb/users

   操作内存的列表页链接:http://localhost:8080/user1/users


   第一, 我们需要安装MySQL并启动服务, Macbook的入口在launchpad---系统偏好设置




  第二、虽然hibernate可以生成数据库的表, 但建议使用图形化工具创建database和table, 注意编码格式要选utf-8。 Macbook可以使用Sequel Pro软件连接到本机MySQL服务,并通过图形化界面创建数据库。 PS:hibernate可以连接多个数据库,所以创建了exampledb和exampledb1用于测试。



   第三、 配置Hibernate和生成Java类。 选中File---> Project Structure--->Facets后点击+并选中Hibernate


        点击图标+生成配置文件, 注意可以有多个! 本demo中有2个, 分别连接数据库exampledb和exampledb1。



     第四、 设置hibernate的配置文件。 这里有坑:1、一定要添加属性connection.characterEncoding, 否则读写数据库的中文是乱码!

2、<mapping class....>是自动生成的, 即在IntelliJ-->Persistence-->右键hibernate.xml->Generate Persistence Mapping->By Database Schema生成的。



         设置包名并选中数据库的表, 点击OK后会生成对应的Java文件并在hibernate配置文件里添加<mapping class..>。



     第五、编写增删改查接口, 注意操作的类就是上面生成的实体类。

public class UserDao {

    //查询所有记录
    public static List<User1Entity> queryAll() {
        Session session = null;
        List<User1Entity> list = null;
        Transaction transaction = null;
        try {
            Configuration cfg = new Configuration().configure("hibernate1.cfg.xml");  //有2个配置文件
            SessionFactory sf = cfg.buildSessionFactory();
            session = sf.openSession();
            transaction = session.beginTransaction();

            String sql = "from User1Entity order by id asc ";   //注意数据库里表名是user1,这里要用映射的类
            Query query = session.createQuery(sql);
            list = query.list();   //查询所有

            transaction.commit();
        } catch (HibernateException ex) {
            ex.printStackTrace();
            if (transaction != null) {
                transaction.rollback();
            }
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }

        return list;
    }

    /**
     * 根据索引查找记录
     * @param id, 索引
     * @return
     */
    public static User1Entity getItemById(int id) {
        User1Entity entity = null;

        Session session = null;
        List<User1Entity> list = null;
        Transaction transaction = null;
        try {
            Configuration cfg = new Configuration().configure("hibernate1.cfg.xml");  //有2个配置文件
            SessionFactory sf = cfg.buildSessionFactory();
            session = sf.openSession();

            transaction = session.beginTransaction();
            entity = (User1Entity) session.get(User1Entity.class, id);
            transaction.commit();;
        } catch (HibernateException ex) {
            ex.printStackTrace();
            if (transaction != null) {
                transaction.rollback();
            }
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }
        return entity;
    }

    public static boolean addItem(User1Entity user) {
        SessionFactory factory;
        Session session = null;
        Transaction transaction = null;

        boolean ret = true;
        try {
            Configuration cfg = new Configuration().configure("hibernate1.cfg.xml");
            factory = cfg.buildSessionFactory();
            session = factory.openSession();

            transaction = session.beginTransaction(); //开启事务
            session.save(user);  //保存记录
            transaction.commit(); //提交事务
        } catch (Exception e){
            ret = false;
            e.printStackTrace();
            //回滚事务
            if (transaction != null) {
                transaction.rollback();
            }
        } finally {
            if(session != null && session.isOpen()){
                session.close();
            }
        }

        return ret;
    }

    /**
     * 删除记录
     * @param id, 索引值
     * @return 成功或失败
     */
    public static  boolean delete(int id) {
        SessionFactory factory;
        Session session = null;
        Transaction transaction = null;

        boolean ret = true;
        try {
            Configuration cfg = new Configuration().configure("hibernate1.cfg.xml");
            factory = cfg.buildSessionFactory();
            session = factory.openSession();

            transaction = session.beginTransaction(); //开启事务
            Object user = session.get(User1Entity.class, id);  //根据索引找到记录
            session.delete(user);
            transaction.commit();
        } catch (HibernateException ex) {
            if (transaction != null) {
                transaction.rollback();
            }
            ex.printStackTrace();

            ret = false;
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }

        return ret;
    }

    /**
     * 更新记录
     * @return 成功或失败
     */
    public static boolean update(User1Entity entity) {
        SessionFactory factory;
        Session session = null;
        Transaction transaction = null;

        boolean ret = true;
        try {
            Configuration cfg = new Configuration().configure("hibernate1.cfg.xml");
            factory = cfg.buildSessionFactory();
            session = factory.openSession();

            transaction = session.beginTransaction(); //开启事务
            session.update(entity);
            transaction.commit();
        } catch (HibernateException ex) {
            if (transaction != null) {
                transaction.rollback();
            }
            ex.printStackTrace();

            ret = false;
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }
        return ret;
    }
}

     因为有2个hibernate配置文件, 建议初始化时使用文件名区别:Configuration cfg = new Configuration().configure("hibernate1.cfg.xml");    如果是new Configuration().configure()读取的配置文件是hibernate.cfg.xml。


源代码: http://download.csdn.net/detail/brycegao321/9923425


参考:

http://blog.csdn.net/mr_sk/article/details/68947018

http://www.cnblogs.com/tonglin0325/p/5516440.html

http://www.cnblogs.com/baiduligang/p/4247164.html

http://blog.csdn.net/yerenyuan_pku/article/details/52733275

http://blog.csdn.net/zdp072/article/details/38691049






  • 2
    点赞
  • 1
    评论
  • 8
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 1 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

brycegao321

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值