SpringMVC + Hibernate实现增删改查
2017-08-07 13:06
489 查看
在前一篇博客 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..>。
第五、编写增删改查接口, 注意操作的类就是上面生成的实体类。
因为有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
(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
相关文章推荐
- EasyUI + Spring MVC + hibernate实现增删改查导入导出
- SpringMVC Resetful+Hibernate+MySQL实现增删改查操作
- SpringMVC+Hibernate+Maven+MySQL实现增删改查的一个小Demo
- springmvc+hibernate+maven实现web上传和下载,内容显示图片
- Jersey2.26+Spring MVC+Spring+Hibernate实现前后端分离
- 用Maven整合SpringMVC+Spring+Hibernate 框架,实现简单的插入数据库数据功能
- Springmvc+mybatis案列 2(实现员工增删改查的操作,工具myeclipse)
- Thymeleaf+spring jpa+springmvc实现的增删改查以及分页查询
- SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
- SpringMVC(12)完结篇 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
- ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)
- hibernate+springMVC增删改查
- SpringMVC+Hibernate +MySql+ EasyUI实现CRUD(一)
- Spring+SpringMVC+SpringData+JPA(Hibernate实现)无XML配置
- springMVC+spring+hibernate增删改查实例
- spring mvc+hibernate 实现事务管理(全注解版)
- Spring+SpringMVC+Hibernate实现登录
- myeclipse 实现框架 spring+springmvc+springsecurity+myibatis+mysql用户认证和人员增删改查
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
- Bootstrap+spring+springmvc+mybatis实现基本的增删改查(源码)