您的位置:首页 > 编程语言 > Java开发

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..>。



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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: