此次任务是简单的一次hibernate框架小训练,利用上一篇的项目修改
1.导包,找到Hibernate-release-5.x.x.Final\lib\required下的所有包,copy到项目WEB-INF\lib下
2.开始编写数据库表(名字好烦,就乱取了)
//建表hibernate
create table my_hibernate(
`h_id` integer not null auto_increatment,
`h_name` varchar (255) null,
primary key (`h_id`)
) ;
//建表table
create table my_table(
`t_id` integer not null auto_increatment,
`t_name` varchar(255) null,
primary key (`t_id`)
);
3.创建实体类
MyTable类:(可以把上面my_table表语句复制过来,照着键名复制,以免出错)
import java.util.Set;
public class MyTable {
// create table my_table(
// `t_id` integer not null,
// `t_name` varchar(255) null,
// primary key (`t_id`)
// );
private Integer t_id;
private String t_name;
public Integer getT_id() {
return t_id;
}
public void setT_id(Integer t_id) {
this.t_id = t_id;
}
public String getT_name() {
return t_name;
}
public void setT_name(String t_name) {
this.t_name = t_name;
}
private Set myHibernate;
public Set getMyHibernate() {
return myHibernate;
}
public void setMyHibernate(Set myHibernate) {
this.myHibernate = myHibernate;
}
}
import java.util.Set;
public class MyHibernate {
// create table my_hibernate(
// `h_id` integer not null auto increatment,
// `h_name` varchar (255) null,
// primary key (`h_id`)
// )
private Integer h_id;
private String h_name;
public Integer getH_id() {
return h_id;
}
public void setH_id(Integer h_id) {
this.h_id = h_id;
}
public String getH_name() {
return h_name;
}
public void setH_name(String h_name) {
this.h_name = h_name;
}
private Set myTable;
public Set getMyTable() {
return myTable;
}
public void setMyTable(Set myTable) {
this.myTable = myTable;
}
}
4.在当前包下创建xml文件,编写orm映射类
MyHibernate.hbm.xml:(这里给的是多对多表关系)
MyTable.hbm.xml:
5.编写hibernate.cfg.xml
com.mysql.jdbc.Driver
jdbc:mysql:///test
root
123
org.hibernate.dialect.MySQLDialect
true
true
update
4
thread
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import cn.zhku.jsjs.haofeng.domain.MyTable;
public class ProjectTest {
@Test
public void test(){
Configuration conf = new Configuration().configure();
SessionFactory SessionFactory = conf.buildSessionFactory();
Session session = SessionFactory.openSession();
Transaction transaction = session.beginTransaction();
MyTable t1 = session.get(MyTable.class, 01);
t1.setT_name("you not 1");
session.save(t1);
transaction.commit();
session.close();
SessionFactory.close();
}
}
涂红两句是获取Mytable中id为01的记录,然后设置t_name为"you not 1"(在测试前在my_table表中插入一条t_id为01的数据即可)
就能看到table_hibernate被成功创建出来了,说明多对对关系创建成功
my_table表数据也被修改成功
7.接着,只用把上一篇的代码进行小小调整即可(红色部分即为调整地方)
index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
import xxx.xxx.service.SearchHibernateService;
/**
* Servlet implementation class ajaxServletHibernateTest
*/
public class ajaxServletHibernateTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ajaxServletHibernateTest() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从前台获取json格式数据
request.setCharacterEncoding("UTF-8");
String content = (String) request.getParameter("content");
//创建一个service类,并调用其查询方法
SearchHibernateService ss = new SearchHibernateService();
List list = null;
list = ss.SearchHname(content);
System.out.println(list);
//将service返回的数据进行格式转换变成json
//先创建一个Gson
Gson gson = new Gson();
//然后解析获得的list,把json转换成string
String str = gson.toJson(list);
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(str);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import cn.zhku.jsjs.haofeng.dao.SearchHibernateDao;
import cn.zhku.jsjs.haofeng.utils.HibernateUtils;
public class SearchHibernateService {
public List SearchHname(String content){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
SearchHibernateDao shd = new SearchHibernateDao();
List list = shd.searchHname(content);
tx.commit();
return list;
}
}
import java.util.List;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import cn.zhku.jsjs.haofeng.utils.HibernateUtils;
public class SearchHibernateDao {
public List searchHname(String content){
Session session = HibernateUtils.getCurrentSession();
String sql = "select h_name from my_hibernate where h_name like '%"+content+"%'";
SQLQuery query = session.createSQLQuery(sql);
List list = query.list();
return list;
}
}
HibernateUtils:(把hibernate的启动,初始化,创建session操作的重复代码封装,封装了getOpenSession和getCurrentSession两个方法)
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static SessionFactory sf;
static{
Configuration conf = new Configuration().configure();
sf = conf.buildSessionFactory();
}
public static Session getOpenSession(){
Session session = sf.openSession();
return session;
}
public static Session getCurrentSession(){
Session session = sf.getCurrentSession();
return session;
}
}