springboot集成hibernate

首先添加依赖
操作数据库必须需要的一个依赖   jpa:数据持久化API 将数据写入数据库称之为持久化  只要将数据写入数据库就需要用到数据持久化API
       <dependency>
           <groupId>org.springframework.boot</groupId>
	   <artifactId>spring-boot-starter-data-jpa</artifactId>
      </dependency>

如果引入以上依赖报错的话还可以引入spring-boot-starter-jdbc

对象型关系框架  所以是表和类映射  列和属性映射

然后在实体类上添加一个 @Entity   javax包中的 注解 表示用于映射的实体类
若表名和类名不一致的时候我们可以通过@Table(“表名”) 来进行映射实体类
hibernate中最重要的就是oid  所以我们需要告诉实体类的哪个属性为oid
在oid的属性前面添加一个 @Id  的注解  还需要告诉主键的生成策略需要用
@GeneratedValue(strategy = GenerationType.AUTO) 注解   AUTO 等价于  hibernate中的assigned   SEQUENCE 等于sequece 
若列名和属性名不一样的时候我们可以用这个注解   @Column(name="sal")
entity类代码:
package cn.et.ssha.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Emp implements Serializable{
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
    private Short empno;

    @
    private String ename;

    private String job;

    private Short mgr;

    
    private Date hiredate;

    private Double sal;

    private Double comm;

    private Short deptno;

    public Short getEmpno() {
        return empno;
    }

    public void setEmpno(Short empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

   
    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }
    public Short getMgr() {
        return mgr;
    }
    public void setMgr(Short mgr) {
        this.mgr = mgr;
    }
    public Date getHiredate() {
        return hiredate;
    }

    public void setHiredate(Date hiredate) {
        this.hiredate = hiredate;
    }

    public Double getComm() {
		return comm;
	}

    public void setComm(Double comm) {
		this.comm = comm;
	}

    public Double getSal() {
		return sal;
	}

    public void setSal(Double sal) {
		this.sal = sal;
	}

    public Short getDeptno() {
        return deptno;
    }

    public void setDeptno(Short deptno) {
        this.deptno = deptno;
    }
}

dao层需要继承一个类 extends CrudRepository<Emp, Short>
查询就在上面加个注解@Query(“查询的sql语句”) 
添加和修改都有封装好的方法 可以使用save方法。
save方法它会进行判断  如果存在就修改 不存在就添加。
删除直接在service层使用delete方法。
dao层代码
package cn.et.ssha.dao;

import java.util.List;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;

import cn.et.ssha.entity.Emp;


public interface EmpDao extends CrudRepository<Emp, Short>{



	@Query("select count(*) from Emp where ename like :ename")
	public int total(@Param("ename") String ename);
	
	/*
	 * nativeQuery=true  意思是将sql语句交给jdbc
	 * */
	@Query(value="select * from (select t.*,rownum rn from emp t where ename like :en) where rn>=:startIndex and rn<=:endIdx",nativeQuery=true)
	public  List<Emp> query(@Param("en")String ename,@Param("startIndex")int startIndex,@Param("endIdx")int endIdx);

}
service代码
package cn.et.ssha.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.et.ssha.dao.EmpDao;
import cn.et.ssha.entity.Emp;
import cn.et.ssha.service.EmpService;
import cn.et.ssha.util.PagerEntity;
import cn.et.ssha.util.PagerUtils;
//表示使用事物
@Transactional
@Service
public class EmpAjaxServiceImpl implements EmpService {
	
	@Autowired
	private EmpDao dao;
	
	/* 查询
	 */
	@Transactional(readOnly=true)    //事物只读 其它默认使用事物  这个是只读
	public PagerEntity query(Emp emp,int curpage){
		if(emp.getEname()==null || emp.getEname()==""){
			emp.setEname("%%");
		}else{
			emp.setEname("%"+emp.getEname()+"%");
		}
		int sizetotal = dao.total(emp.getEname());
									//当前页数   每页今条   总条数
		PagerEntity pe = PagerUtils.calc(curpage, 10, sizetotal);
							
		List<Emp> list = dao.query(emp.getEname(), pe.getStartIndex(),pe.getEndIndex());
		
		pe.setData(list);
		return pe;
	}
	
	/* 
	 *添加 
	 */
	public void add(Emp emp){
		dao.save(emp);
	}
	
	/* 
	 * 删除
	 */
	public void dele(Emp emp){
		
		dao.delete(emp);
	}
	
	/* 
	 * 修改
	 */
	public void update(Emp emp){
	
		dao.save(emp);
	}
	
}

springboot集成struts2

boot就是添加依赖  struts2也是一样 添加依赖。
struts2需要配置一个核心过滤器StrutsPrepareAndExecuteFilter 配置到web.xml文件中   现在我们使用springboot没有web.xml文件因此我们可以通过java代码@Configuration配置一个相当于web.xml的文件   
注意  struts2项目所在目录不能含有中文 或者 空格 特殊符号  这样会取不到上下文路径的 

依赖
<dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-core</artifactId>
	<version>2.3.28</version>
</dependency>
<dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-spring-plugin</artifactId>
	<version>2.3.28</version>
</dependency>
<dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-convention-plugin</artifactId>
	<version>2.3.28</version>
</dependency>

相当于生成web的java代码如下
package cn.et.ssha.util;

import java.util.ArrayList;
import java.util.List;

import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 
 * 相当于一个web的配置文件。
 * */
@Configuration
public class WebXmlConfig {

	/**
	 * 
	 * 根据官网提供的方法我们可以通过以下的方法配置一个web里的过滤器。
	 * 相当于在web文件中配置了一个过滤器叫StrutsPrepareAndExecuteFilter
	 * 
	 * 我们也可以直接返回StrutsPrepareAndExecuteFilter 这里默认拦截的就是所有。
	 * 
	 * 也可以直接返回一个过滤器 
	 * @Bean 
	 * public StrutsPrepareAndExecuteFilter filterRegistrationBean(){
	 *       return new StrutsPrepareAndExecuteFilter();
	 * 
	 *     }
	 * 
	 * */
	//官网的方法配置过滤器
	@Bean
	public FilterRegistrationBean filterRegistrationBean() {
		FilterRegistrationBean frgb = new FilterRegistrationBean();
		frgb.setFilter(new StrutsPrepareAndExecuteFilter());
		List list = new ArrayList();
		list.add("/*");
		list.add("*.action");
		frgb.setUrlPatterns(list);
		return frgb;
	}
}

添加了过滤器之后需要struts2的配置文件 
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
		<!-- Struts2创建bean交给spring来创建 -->
		<constant name="struts.objectFactory" value="spring"></constant>     
		<!-- 扫描struts2的注解 还有一个默认是扫描以Action结尾的 
		  如果需要修改的话我们可以配置
		<constant name="struts.convention.action.suffix" value="Action"/> -->
        <constant name="struts.convention.package.locators.basePackage" value="cn"/>
        <constant name="struts.convention.package.locators" value="cn"/>  
        
        <!-- struts2默认是不扫描我们tomcar加载的类 所以我们要将类加载器改为false -->
        <constant name="struts.convention.exclude.parentClassLoader" value="false" />
</struts>




 配置完成之后使用struts2 的方式取值 可以使用属性驱动也可以使用模型驱动 

controller  此处用的是模型驱动
package cn.et.ssha.controller;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.servlet.ServletOutputStream;

import net.sf.json.JSONObject;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import cn.et.ssha.entity.Emp;
import cn.et.ssha.service.EmpService;
import cn.et.ssha.util.PagerEntity;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;


@Controller
@Namespace("/")
public class EmpAjaxAction extends ActionSupport implements ModelDriven<Emp>,Preparable{
	
	@Autowired
	private EmpService es;
	
	private Emp emp;
	
	private Integer curpage;
	
	public Integer getCurpage() {
		return curpage;
	}

	public void setCurpage(Integer curpage) {
		this.curpage = curpage;
	}

	
	@Action(value="/query")
	public String query() throws IOException{
		if(emp==null || curpage==null){
			emp=new Emp();
			curpage=1;
		}
		PagerEntity pe = es.query(emp,curpage);
		String json = JSONObject.fromObject(pe).toString();
		ServletOutputStream os = ServletActionContext.getResponse().getOutputStream();
		os.write(json.getBytes("utf-8"));
		return NONE;
	}
	
	/*
	 * 
	 * json方法
	 *
	 public void query(Emp emp,OutputStream os){
		if(emp==null || curpage==null){
			emp=new Emp();
			curpage=1;
		}
		String json=JSONObject.fromObject(pe).toString();
		os.write(json);
		}
	 * 
	 * */
	
	@Action("addmybaits")
	public void add() throws IOException{
		ServletOutputStream os = ServletActionContext.getResponse().getOutputStream();
		try {
			es.add(emp);
			os.write("1".getBytes("utf-8"));
		} catch (Exception e) {
			os.write("0".getBytes("utf-8"));
		}
	}
	
	@Action("delemybaits")
	public void dele() throws IOException{
		ServletOutputStream os = ServletActionContext.getResponse().getOutputStream();
		try {
			es.dele(emp);
			os.write("1".getBytes("utf-8"));
		} catch (Exception e) {
			os.write("0".getBytes("utf-8"));
		}
	}
	
	@Action("upmybaits")
	public void update() throws UnsupportedEncodingException, IOException{
		ServletOutputStream os = ServletActionContext.getResponse().getOutputStream();
		try {
			es.update(emp);
			os.write("1".getBytes("utf-8"));
		} catch (Exception e) {
			os.write("0".getBytes("utf-8"));
		}
	}

	@Override
	public Emp getModel() {
		return emp;	
	}

	@Override
	public void prepare() throws Exception {
		emp = new Emp();
	}
	
}





Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐