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

IDEA使用maven创建Spring-Spring-MVC-hibernate总结

2017-03-24 17:23 471 查看
目录结构如下 首先看一下数据库 t_class和t_studentmaven   pom如下   创建maven请参考我的上一篇文章   <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion><groupId>com.my</groupId><artifactId>SpringMvc_Spring_Hibernate</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>SpringMvc_Spring_Hibernate Maven Webapp</name><url>http://maven.apache.org</url><properties><!-- spring版本号 --><spring.version>4.0.4.RELEASE</spring.version><hibernate.version>4.3.8.Final</hibernate.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- spring核心包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><!-- json数据 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.24</version></dependency><!--阿里云的数据源--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.28</version></dependency><!--数据库--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.40</version></dependency><!--hibernate--><!-- hibernate --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>${hibernate.version}</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-ehcache</artifactId><version>${hibernate.version}</version></dependency><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.8.5</version></dependency></dependencies><build><finalName>SpringMvc_Spring_Hibernate</finalName></build></project>数据库有了   实体bean和hibernate的映射文件是有idea反向工程生成的  TClassEntitypackage com.my.bean;import java.io.Serializable;/*** Created by heyongjie on 2017/2/26.*/public class TClassEntity implements Serializable{private Integer cId;private String cName;private Integer teacher;public Integer getcId() {return cId;}public void setcId(Integer cId) {this.cId = cId;}public String getcName() {return cName;}public void setcName(String cName) {this.cName = cName;}public Integer getTeacher() {return teacher;}public void setTeacher(Integer teacher) {this.teacher = teacher;}}TStudentEntity
package com.my.bean;

import java.io.Serializable;

/**
* Created by heyongjie on 2017/2/26.
*/
public class TStudentEntity implements Serializable{
private Integer id;
private String name;
private String sex;
private TClassEntity tClassByCId;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public TClassEntity gettClassByCId() {
return tClassByCId;
}

public void settClassByCId(TClassEntity tClassByCId) {
this.tClassByCId = tClassByCId;
}
}
hibernate     bean映射文件    因为使用的是maven   maven有约束  所以必须放在maven的resourse目录下面 TclassEntity    映射文件 <?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.my.bean.TClassEntity" table="t_class" schema="test" lazy="false"><id name="cId"><column name="c_id" sql-type="int(11)"/></id><property name="cName"><column name="c_name" sql-type="varchar(30)" length="30"/></property><property name="teacher"><column name="teacher" sql-type="int(11)"/></property></class></hibernate-mapping>TStudentEntity    映射文件 
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

<class name="com.my.bean.TStudentEntity" table="t_student" schema="test" lazy="false">
<id name="id">
<column name="id" sql-type="int(11)"/>
</id>
<property name="name">
<column name="name" sql-type="varchar(30)" length="30"/>
</property>
<property name="sex">
<column name="sex" sql-type="varchar(5)" length="5"/>
</property>
<many-to-one name="tClassByCId" class="com.my.bean.TClassEntity">

f5f9
<column name="c_id" not-null="true"/>
</many-to-one>
</class>
</hibernate-mapping>
因为要做分页,所以需要一个分页beanpackage com.my.bean;import java.io.Serializable;import java.util.ArrayList;import java.util.List;/*** Created by heyongjie on 2017/3/13.*/public class PageBean<E> implements Serializable{private int pageNo; // 每页显示页数private int showNo; // 当前显示页数private int countNo; // 总共的页数private List<E> lists = new ArrayList<E>(); // 这页的数据public int getPageNo() {return pageNo;}public void setPageNo(int pageNo) {this.pageNo = pageNo;}public int getShowNo() {return showNo;}public void setShowNo(int showNo) {this.showNo = showNo;}public int getCountNo() {return countNo;}public void setCountNo(int countNo) {this.countNo = countNo;}public List<E> getLists() {return lists;}public void setLists(List<E> lists) {this.lists = lists;}@Overridepublic String toString() {return "PageBean{" +"pageNo=" + pageNo +", showNo=" + showNo +", countNo=" + countNo +", lists=" + lists +'}';}}现在看一下spring的配置文件 因为需要查看日志  所以需要导入一个   log4j.properties 文件  如下  log4j.rootLogger=DEBUG,Console,Filelog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.Target=System.outlog4j.appender.Console.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=[%c]%m%nlog4j.appender.File=org.apache.log4j.RollingFileAppenderlog4j.appender.File.File=mybatis.loglog4j.appender.File.MaxFileSize=10MBlog4j.appender.File.Threshold=ALLlog4j.appender.File.layout=org.apache.log4j.PatternLayoutlog4j.appender.File.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n开闭原则的原因  我们将数据库的配置如用户密码  放在外面   db.properties这里面做了防止乱码的处理 jdbc_url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNulljdbc_user=rootjdbc_password=123456spring.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!--从外部读取数据信息 --><context:property-placeholder location="classpath:db.properties"/><!--扫描 --><context:component-scan base-package="com.my.*"/><!--配置阿里云的数据源--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><!-- 基本属性 url、user、password --><property name="url" value="${jdbc_url}"/><property name="username" value="${jdbc_user}"/><property name="password" value="${jdbc_password}"/><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="1"/><property name="minIdle" value="1"/><property name="maxActive" value="20"/><!-- 配置获取连接等待超时的时间 --><property name="maxWait" value="60000"/><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000"/><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="300000"/><property name="validationQuery" value="SELECT 'x'"/><property name="testWhileIdle" value="true"/><property name="testOnBorrow" value="false"/><property name="testOnReturn" value="false"/><!-- 打开PSCache,并且指定每个连接上PSCache的大小 --><property name="poolPreparedStatements" value="true"/><property name="maxPoolPreparedStatementPerConnectionSize" value="20"/><!-- 配置监控统计拦截的filters --><property name="filters" value="stat"/></bean><!--配置hibernate--><bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mappingResources"><list><value>hibernateCfg/TClassEntity.hbm.xml</value><value>hibernateCfg/TStudentEntity.hbm.xml</value></list></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.MySQLDialecthibernate.show_sql =true<!-- hibernate.hbm2ddl.auto=create --></value></property></bean><!--配置事物管理器 --><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/></bean></beans>
spring-MVC.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 扫描controller(controller层注入) --><context:component-scan base-package="com.my.controller"/><mvc:annotation-driven/><!-- 对模型视图添加前后缀 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/"/><property name="suffix" value=".jsp"/></bean><!-- 处理静态资源 --><mvc:default-servlet-handler /></beans>
下面是我的持久层和服务层代码 持久层   接口  package com.my.dao.idao;import com.my.bean.PageBean;/*** Created by heyongjie on 2017/3/13.*/public interface IStudentDao {/*** 根据显示条数和当前页数获得数据* @param showNo    每页显示的条数* @param pageNo    当前页数* @return           返回分页对象*/public PageBean getAllStudent(int showNo, int pageNo);}实现 package com.my.dao;import com.my.bean.PageBean;import com.my.dao.idao.IStudentDao;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import java.util.List;/*** Created by heyongjie on 2017/3/13.*/@Repository("studentDao")public class StudentDao implements IStudentDao {@Autowiredprivate SessionFactory sessionFactory;public PageBean getAllStudent(int showNo, int pageNo) {System.out.println(sessionFactory + "======");PageBean page = new PageBean();// 将数据封装到pageBean中page.setShowNo(showNo);page.setPageNo(pageNo);// 分页查询数据List list = sessionFactory.getCurrentSession().createQuery("FROM TStudentEntity").setFirstResult((pageNo - 1) * showNo).setMaxResults(showNo).list();// 查询总数据条数int num = sessionFactory.getCurrentSession().createQuery("from TStudentEntity").list().size();// 查询总共有多少页if (num % showNo == 0) {page.setCountNo(num / showNo);} else {page.setCountNo(num / showNo + 1);}page.setLists(list);return page;}}服务层 接口 package com.my.server.iserver;import com.my.bean.PageBean;/*** Created by heyongjie on 2017/3/16.*/public interface IStudentServer {/*** 获得所有的学生信息  分页查询* @param showNo    每页显示的条数* @param pageNo    当前页数* @return           返回分页的信息*/public PageBean getAllStudent(int showNo,int pageNo);}实现 package com.my.server;import com.my.bean.PageBean;import com.my.dao.idao.IStudentDao;import com.my.server.iserver.IStudentServer;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;/*** Created by heyongjie on 2017/3/16.*/@Service("studentServer")public class StudentServer  implements IStudentServer{@Autowiredprivate IStudentDao studentDao;public PageBean getAllStudent(int showNo, int pageNo) {return studentDao.getAllStudent(showNo,pageNo);}}然后是Controllerpackage com.my.controller;import com.my.bean.PageBean;import com.my.server.iserver.IStudentServer;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import javax.annotation.Resource;/*** Created by heyongjie on 2017/3/16.*/@Controllerpublic class StudentController {@Resourceprivate IStudentServer studentServer;// 这里使用的是restFual  风格@RequestMapping(value = "/getAllStudent/{showNo}/{pageNo}")@ResponseBodypublic PageBean getAllStudent(@PathVariable(value = "showNo") int showNo, @PathVariable(value = "pageNo") int pageNo) {PageBean page = studentServer.getAllStudent(showNo, pageNo);System.out.println(page);return page;}}最后是界面     分页使用的是插件 <%--Created by IntelliJ IDEA.User: heyongjieDate: 2017/3/16Time: 10:43To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title><link rel="stylesheet" href="../jQueryPage20161027/src/jquery.page.css"><script type="text/javascript" src="jquery-3.1.0.min.js"></script><script type="text/javascript" src="../jQueryPage20161027/src/jquery.page.js"></script><script>$(function () {// 发送ajax请求   进行数据的初始化$.ajax({// 使用resf风格进行传值url: "../getAllStudent/4/1",type: "post",dataType: "json",success: function (data) {// 在这里进行页面的拼接var htmlStr = "";// 循环拼接表格$.each(data.lists, function (i) {htmlStr += "<tr>" +" <td>" + data.lists[i].id + "</td>" +"<td>" + data.lists[i].name + "</td>" +"</tr>";});// 最开使的时候加载一次分页page(data.countNo);$(".tbody").html(htmlStr);}});function ajaxPage(pageNo){$.ajax({// 使用resf风格进行传值url: "../getAllStudent/4/" + pageNo,type: "post",dataType: "json",success: function (data) {// 在这里进行页面的拼接var htmlStr = "";// 循环拼接表格$.each(data.lists, function (i) {htmlStr += "<tr>" +" <td>" + data.lists[i].id + "</td>" +"<td>" + data.lists[i].name + "</td>" +"</tr>";});$(".tbody").html(htmlStr);}});};//   分页function page(countNo){// 初始化分页信息$("#page").Page({totalPages: countNo,//分页总数liNums: 7,//分页的数字按钮数(建议取奇数)activeClass: 'activP', //active 类样式定义callBack: function (page) {// 当点击了页数之后  就按照这个页数进行查询ajaxPage(page);}});}});</script></head><body><h1>所有学生的信息 </h1><table><thead><tr><th>编号</th><th>名字</th></tr></thead><tbody class="tbody"><tr><td>1</td><td>1222222</td></tr></tbody></table>
<%--Jq分页插件--%>
<div id="page"></div></body></html>
最后的效果  没有进行界面的美化  
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: