springboot 集成hibernate 集成struts2

来源:互联网 发布:窗户打开方式 知乎 编辑:程序博客网 时间:2024/06/05 05:50

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;@Entitypublic 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@Servicepublic class EmpAjaxServiceImpl implements EmpService {@Autowiredprivate 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的配置文件。 * */@Configurationpublic class WebXmlConfig {/** *  * 根据官网提供的方法我们可以通过以下的方法配置一个web里的过滤器。 * 相当于在web文件中配置了一个过滤器叫StrutsPrepareAndExecuteFilter *  * 我们也可以直接返回StrutsPrepareAndExecuteFilter 这里默认拦截的就是所有。 *  * 也可以直接返回一个过滤器  * @Bean  * public StrutsPrepareAndExecuteFilter filterRegistrationBean(){ *       return new StrutsPrepareAndExecuteFilter(); *  *     } *  * *///官网的方法配置过滤器@Beanpublic 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{@Autowiredprivate 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"));}}@Overridepublic Emp getModel() {return emp;}@Overridepublic void prepare() throws Exception {emp = new Emp();}}





原创粉丝点击