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

框架整合的配置SSS

2017-09-29 09:55 274 查看
          这是一个基于Spring的框架   表现层利用SpringMVC    服务层利用Spring    在持久层利用SpringData  关于数据库有两种情况,这一次的框架整合时基于关系型的数据库MySQL的整合,下面就直接占代码,关于一些注意的点,以及一些别的内容会在注释中详细的给出,若有不足或者是写错的地方,请多多指教,留下你宝贵的意见

这次使用的工具是IDEA,代码使用到的是Maven这个自动化的构建工具

(一):关于pom.xml文件,连接了本地仓库以及关联了远程仓库

<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.qf.hhh</groupId>
<artifactId>SSSJ</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>SSSJ Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- 添加junit单元测试包,版本为4.12 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 添加servlet核心包 关联tomcat8.5 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.2-b01</version>
<scope>provided</scope>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 日志记录所需包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.10.Final</version>
</dependency>
<!-- for JPA, use hibernate-entitymanager instead of hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.10.Final</version>
</dependency>
<!-- optional -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-osgi</artifactId>
<version>5.2.10.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>5.2.10.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.2.10.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-proxool</artifactId>
<version>5.2.10.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-infinispan</artifactId>
<version>5.2.10.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.2.10.Final</version>
</dependency>
<!-- springdata基础包 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.13.0.RELEASE</version>
</dependency>
<!-- 链接关系型DB -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.11.0.RELEASE</version>
</dependency>
<!-- 添加Spring包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>

<!-- 为了方便进行单元测试,添加spring-test包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.6.RELEASE</version>
</dependency&
4000
gt;
<!--添加aspectjweaver包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.5</version>
</dependency>
</dependencies>
<build>
<finalName>SSSJ</finalName>
</build>
</project>


(二):关于web.xml的配置
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--可以起到率先加载,启动就创建对象的作用,提高程序运行的效率-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- springmvc前端控制器 -->
<servlet>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>


(三):applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--注册数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="org.gjt.mm.mysql.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///sssj?useUnicode=true&characterEncoding=utf8"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
<!--创建JPA的数据管理工厂-->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<!--注入数据源-->
<property name="dataSource" ref="dataSource"></property>
<!--注册实体,扫描-->
<property name="packagesToScan" value="com.qf.pojo"></property>
<!--配置Hibernate的属性-->
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<!--将会自动创建表-->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!--配置适配器-->
<property name="jpaVendorAdapter">
<!--注册Hibernate的JPA适配器对象-->
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
</property>
</bean>
<!--创建DAo对象注入factory -->
<!--创建SpringDataJPA 整合DAO的对象:动态创建DAO的代理实现对象 -->
<jpa:repositories base-package="com.qf.dao" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="jpaTransactionManager"></jpa:repositories>
<!--创建 JPA的事务管理通知对象 -->
<bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<!--开启注解事务 -->
<tx:annotation-driven transaction-manager="jpaTransactionManager"></tx:annotation-driven>
<!--开启注解扫描和表现层共享 -->
<context:component-scan base-package="com.qf"></context:component-scan>
<!--注解扫描,不需要创建服务层的对象,表现层,服务层,持久层都需要注解扫描-->
<!--开启注解的处理器映射器和处理器适配器-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--开启视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
<!--关于文件上传以及异常拦截的配置-->
</beans>


(四)持久层的代码
package com.qf.dao;

import com.qf.pojo.MyCity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import javax.transaction.Transactional;
import java.util.List;

/**
* Created by Administrator on 2017/9/28.
*/
public interface MyCityDao extends JpaRepository<MyCity,Long> {
//这样就已经具备了CRUD和分页查询的功能
//占位符的两种方式命名占位符和索引占位符
//添加不具备的功能,例如模糊查询,命名占位符,一一对应的形式
@Query("from MyCity where cityName like %?1%")
public List<MyCity> findLikeCity(String cityName);
//方式二
@Query("from MyCity where cityDesc=:cityDesc")
public List<MyCity> findLikeByDescCity(@Param("cityDesc") String cityDesc);
//这种方式其注解与其冒号后边的内容为一一对应
//一种是利用自带的CRUD,另一种方式,可以自己写更新语句
@Transactional
@Modifying
@Query("update MyCity set cityDesc =?1 where cid=?2")
public void updateCity(String cityDesc,Long cid );
}
(五):服务层的代码(注:关于服务层的接口,就不在这儿写了,都是先写接口,再写实现)
package com.qf.service;

import com.qf.dao.MyCityDao;
import com.qf.dto.MyCityDto;
import com.qf.pojo.MyCity;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

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

/**
* Created by Administrator on 2017/9/28.
*/
@Service
public class MyCityServiceImpl implements MyCityService {
//利用注解的形式去注入dao层
@Autowired
private MyCityDao myCityDao;

public void setMyCityDao(MyCityDao myCityDao) {
this.myCityDao = myCityDao;
}

public void addCity(MyCityDto dto) {
MyCity pojo=new MyCity();
BeanUtils.copyProperties(dto,pojo);
myCityDao.save(pojo);
}

public void updateCity(MyCityDto dto) {
MyCity pojo=new MyCity();
BeanUtils.copyProperties(dto,pojo);
myCityDao.saveAndFlush(pojo);
}

public void deleteCity(Long id) {
myCityDao.delete(id);
}

public MyCityDto findByIdCity(Long id) {
MyCity myCity = myCityDao.findOne(id);
MyCityDto dto= new MyCityDto();
BeanUtils.copyProperties(myCity,dto);
return dto;
}

public List<MyCityDto> findAllCity() {
List<MyCity> myCities = myCityDao.findAll();
List<MyCityDto> list= new ArrayList<MyCityDto>();
for (MyCity myCity : myCities) {
MyCityDto dto= new MyCityDto();
BeanUtils.copyProperties(myCity,dto);
list.add(dto);
}
return list;
}

public List<MyCityDto> findByPage(int page, int size) {
Pageable pageable= new PageRequest(page,size);
List<MyCityDto> list= new ArrayList<MyCityDto>();
Page<MyCity> cities = myCityDao.findAll(pageable);
int totalPages = cities.getTotalPages();//获取总的页数
List<MyCity> content = cities.getContent();//这才是获取到数据
for (MyCity myCity : content) {
MyCityDto dto= new MyCityDto();
BeanUtils.copyProperties(myCity,dto);
list.add(dto);

}
return list;
}
}


(六):表现层
package com.qf.action;

import com.qf.dao.MyCityDao;
import com.qf.dto.MyCityDto;
import com.qf.service.MyCityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
* Created by Administrator on 2017/9/28.
*/
@Controller
public class MyCityAction {
@Autowired
private MyCityService myCityService;
public void setMyCityService(MyCityService myCityService) {
this.myCityService = myCityService;
}
//@Qualifier("myCityService")这个是绝对定位的意思
@RequestMapping("/addCity.do")
public ModelAndView addCity(HttpServletRequest request){
ModelAndView mv= new ModelAndView();
String cityName = request.getParameter("cityName");
String cityDesc = request.getParameter("cityDesc");
MyCityDto dto= new MyCityDto();
dto.setCityDesc(cityDesc);
dto.setCityName(cityName);
myCityService.addCity(dto);
mv.setViewName("/findAllCity.do");
return mv;
}
@RequestMapping("/deleteCity.do")
public ModelAndView deleteCity(HttpServletRequest request){
ModelAndView mv= new ModelAndView();
return mv;
}
@RequestMapping("/updateCity.do")
public ModelAndView updateCity(HttpServletRequest request){
ModelAndView mv= new ModelAndView();
return mv;
}
@RequestMapping("/findAllCity.do")
public ModelAndView findAllCity(HttpServletRequest request){
ModelAndView mv= new ModelAndView();
List<MyCityDto> city =myCityService.findAllCity();
mv.addObject("list",city);
mv.setViewName("/ListCity.jsp");
return mv;
}

}


(七):测试代码
package com.qf.test;

import com.qf.dao.MyCityDao;
import com.qf.pojo.MyCity;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

import java.util.List;
/**
* Created by Administrator on 2017/9/28.
*/
public class test {
@Test
public void addCity(){
ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
MyCityDao dao = context.getBean(MyCityDao.class);
MyCity city= new MyCity();
city.setCityDesc("坐上那火车去拉萨");
city.setCityName("西藏");
dao.save(city);
}
@Test
public void deleteCity(){
ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
MyCityDao dao = context.getBean(MyCityDao.class);
dao.delete(2L);
}
@Test
public void updateCity(){
ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
MyCityDao dao = context.getBean(MyCityDao.class);
MyCity city= new MyCity();
city.setCid(3L);
city.setCityName("新疆");
city.setCityDesc("地大物博");
dao.saveAndFlush(city);
}
@Test
public void findCity(){
ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
MyCityDao dao = context.getBean(MyCityDao.class);
MyCity daoOne = dao.findOne(3L);
System.out.print(daoOne.getCityDesc()+"\t"+daoOne.getCityName());
}
@Test
public void findAllCity(){
ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
MyCityDao dao = context.getBean(MyCityDao.class);
List<MyCity> daoAll =dao.findAll();
for (MyCity myCity : daoAll) {
System.out.println(myCity.getCityDesc()+"\t"+myCity.getCityName());
}
}
//分页查询数据
@Test
public void findByPageCity(){
ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
MyCityDao dao = context.getBean(MyCityDao.class);
Pageable pageable = new PageRequest(0,2);
//此处的分页查询与别的地方有所不同,其第一页从0开始,
// 第二页在page 的位置输入1即可,不用自己去计算
Page<MyCity> cities = dao.findAll(pageable);
int totalPages = cities.getTotalPages();
//获取总页数的方法
for (MyCity city : cities) {
System.out.println(city.getCityDesc()+"\t"+city.getCityName());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息