springboot集成hibernate
首先添加依赖
操作数据库必须需要的一个依赖 jpa:数据持久化API 将数据写入数据库称之为持久化 只要将数据写入数据库就需要用到数据持久化API
org.springframework.boot
spring-boot-starter-data-jpa
如果引入以上依赖报错的话还可以引入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
查询就在上面加个注解@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{
@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 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 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项目所在目录不能含有中文 或者 空格 特殊符号 这样会取不到上下文路径的
依赖
org.apache.struts
struts2-core
2.3.28
org.apache.struts
struts2-spring-plugin
2.3.28
org.apache.struts
struts2-convention-plugin
2.3.28
相当于生成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
配置完成之后使用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,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();
}
}