赞
踩
一.项目摘要:
1.进入https://start.spring.io网站下载实例模板(当前组合模板为:gradle+SpringBoot+Jersey)
2.完整项目如图显示:
二.项目具体实施:
1.安装Gradle插件,官网为:https://gradle.org/(这里是5.6.2)
2.Eclipse中安装Gradle插件。(新的Eclipse一般会有这个插件,先可以检查一下是否已经有。)
这里项目名为:helper。
3.修改maven仓库,项目中用笔记本打开build.gradle,将仓库地址修改如下:
repositories {
mavenLocal()
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
mavenCentral()
}
4.导入模板项目,则项目开始初始化,可能需要一段时间。
5.找到HelperApplication.java
运行该类,这时候浏览器输入localhost:8080/
浏览器报错,这是因为我们没有写任何controller。
6.springBoot和jersey整合:
(1)创建如下包:
com.helper.app
com.helper.entity
com.helper.mapper
com.helper.service
com.helper.service.impl
com.helper.resource
com.helper.utils
将模板中的ServletInitializer.java和HelperApplication.java移入com.helper.app
(2)注册servlet组件:
在com.helper.app包下创建如下类并编写如下代码:
package com.helper.app;
import org.glassfish.jersey.servlet.ServletContainer;
import org.glassfish.jersey.servlet.ServletProperties;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
@SpringBootConfiguration
public class ServletRegistration {
// 注册Servlet组件
@Bean
public ServletRegistrationBean<ServletContainer> jerseyServlet() {
ServletRegistrationBean<ServletContainer> registration=new ServletRegistrationBean<ServletContainer>(new ServletContainer(),"/helper/*");
registration.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS,JerseyConfig.class.getName());
return registration;
}
}
(3)JerseyConfig:
package com.helper.app;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
public class JerseyConfig extends ResourceConfig{
public JerseyConfig() {
register(RequestContextFilter.class);
packages("com.helper.resource");
}
}
(4)编写UserResource.java
package com.helper.resource;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.springframework.beans.factory.annotation.Autowired;
import com.helper.entity.User;
import com.helper.service.UserService;
@Path("user")
public class UserResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public String getUser() {
return “hello”;
}
}
(5)这时候,重新启动springBoot实例,浏览器输入:localhost:8080/helper/user
浏览器如果输出:“hello”,则springBoot与Jersey整合成功。
7.springBoot与Mybatis整合:
(1)在mysql创建数据库helper并创建一张user表,如下代码:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`job` varchar(255) DEFAULT NULL,
`telphone` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', 'www', '23', '4', '23');
(2)创建实体类User.java
package com.helper.entity;
public class User {
private int id;
private String name;
private int age;
private String job;
private String telphone;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
}
(3)在application.properties中添加如下代码:
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/helper?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username = root
spring.datasource.password =
spring.datasource.initialPoolSize=5
spring.datasource.maxIdleTime=60
spring.datasource.maxPoolSize=15
spring.datasource.autoCommitOnClose=false
这里根据自己的mysql修改用户名和密码
(4)在build.gradle中添加mybatis和c3p0相关依赖,
build.gradle完整文件如下:
plugins {
id 'org.springframework.boot' version '2.2.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
id 'war'
}
group = 'com.helper'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenLocal()
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jersey'
implementation 'org.springframework.boot:spring-boot-starter-web'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0")
testCompile('org.mybatis.spring.boot:mybatis-spring-boot-starter-test:1.3.0')
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.16'
compile group: 'com.mchange', name: 'c3p0', version: '0.9.5.4'
}
test {
useJUnitPlatform()
}
(5)添加mybatis数据源,创建DataSourceConfiguration类,添加如下代码:
package com.helper.app;
import java.beans.PropertyVetoException;
import javax.sql.DataSource;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import com.mchange.v2.c3p0.ComboPooledDataSource;
@MapperScan("com.helper.mapper")
@SpringBootConfiguration
// @PropertySource({"classpath:application.properties"})
public class DataSourceConfiguration {
@Value("${spring.datasource.driverClassName}")
private String driver;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.initialPoolSize}")
private int initialPoolSize;
@Value("${spring.datasource.maxIdleTime}")
private int maxIdleTime;
@Value("${spring.datasource.maxPoolSize}")
private int maxPoolSize;
@Value("${spring.datasource.autoCommitOnClose}")
private boolean autoCommitOnClose;
@Bean
public DataSource createDataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource=new ComboPooledDataSource();
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(password);
dataSource.setInitialPoolSize(initialPoolSize);
dataSource.setMaxIdleTime(maxIdleTime);
dataSource.setMaxPoolSize(maxPoolSize);
dataSource.setAutoCommitOnClose(autoCommitOnClose);
dataSource.setAutoCommitOnClose(false);
return dataSource;
}
}
(6)在com.helper.mapper中创建UserMapper.java:
package com.helper.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;
import com.helper.entity.User;
@Component
public interface UserMapper {
@Select("select * from user")
public List<User> findUsers();
}
(7)创建Service接口之前,我们需要创建mybatis事务类,因为需要支持事务。于是,在com.helper.app中创建TransactionManagementConfiguration类,完整内容如下:
package com.helper.app;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
@SpringBootConfiguration
@EnableTransactionManagement
public class TransactionManagementConfiguration implements TransactionManagementConfigurer {
@Autowired
private DataSource dataSource;
@Override
public TransactionManager annotationDrivenTransactionManager() {
// TODO Auto-generated method stub
return new DataSourceTransactionManager(dataSource);
}
}
(8)创建业务接口,在com.helper.service中创建如下接口:
package com.helper.service;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;
import com.helper.entity.User;
@Transactional
public interface UserService {
public List<User> getUsers();
}
(9)实现该接口,在com.helper.service.impl中编写如下类:
package com.helper.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.helper.entity.User;
import com.helper.mapper.UserMapper;
import com.helper.service.UserService;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> getUsers() {
// TODO Auto-generated method stub
return userMapper.findUsers();
}
}
(10)在com.helper.app创建ServiceBeans类:
package com.helper.app;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import com.helper.service.UserService;
import com.helper.service.impl.UserServiceImpl;
@SpringBootConfiguration
public class ServiceBeans {
@Bean
public UserService getUserService() {
return new UserServiceImpl();
}
}
(11)将UserResource类修改如下:
package com.helper.resource;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.springframework.beans.factory.annotation.Autowired;
import com.helper.entity.User;
import com.helper.service.UserService;
@Path("user")
public class UserResource {
@Autowired
private UserService userService;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<User> getUsers() {
return userService.getUsers();
}
}
再次启动HelperApplication,浏览器输入localhost:8080/helper/user,如果浏览器输出所用用户的json信息,则说明该项目整合完成。
8.修改8080端口:
在application.properties文件中添加如下内容:
server.port=80,则端口修改完成。
9.有时候,我们要进行测试类的编写,
(1)添加依赖:
testCompile group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.1.1'
在src/test/java中创建如下包:
com.helper.test.mapper
com.helper.test.service
(2)UserMapperTest.java:
package com.helper.test.mapper;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.helper.app.HelperApplication;
import com.helper.entity.User;
import com.helper.mapper.UserMapper;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=HelperApplication.class)
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void test1() {
List<User> users = userMapper.findUsers();
System.out.println(users);
}
}
(3)UserServiceTest.java:
package com.helper.test.service;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.helper.app.HelperApplication;
import com.helper.entity.User;
import com.helper.service.UserService;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=HelperApplication.class)
public class UserServiceTest {
@Autowired
private UserService userService;
@Test
public void test1() {
List<User> users = userService.getUsers();
System.out.println(users);
}
}
在这里,controller层测试还没有编写。Controller可以启动项目后利用浏览器插件做为测试工具。
资源下载地址(包含源码和word文件,word文件和此文章一致):https://download.csdn.net/download/qq_25337221/11887735
三.参考链接:
(无)
本内容由安康学院“雨季”原创。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。