工作中包括个人开发中,使用 ssh (spring springMVC Hibernate)技术。不能说最近了。前期吧,出现了springBoot框架。让众多开发者疯狂迷恋,我抱着试一试的态度进行了了一波搭建。
在平常的开发中我使用的是myEclipse开发工具。偶尔也使用eclipse加上一些插件来创建web项目。为了简化搭建过程,我选择了intellij idea 进行项目的搭建。不过不得不说现在的开发软件让代码开发越来越简单(springBoot使框架搭建,代码编写更简单)。但是越来越简单的背后也隐藏着危机。
前提:jdk版本 1.8
先创建一个项目 jdk 版本要选择1.8偶 没有的话就装一下吧(这里透露一下,有时候安装1.8没有必要卸载1.7或者之前的安装。主要是在我的电脑中进行切换环境配置。这样需要用 1.7,需要用1.8就用1.8。在cmd 中输入 java -version 查看自己jdk版本)
按照上图直接下一步
直接输入包名 点击下一步(注意artifact不可以大小写混合 会报错 artifact contains illegal characters) 。点击下一步
此处选择web项目。很简单 下一步
ok finish 等着项目创建吧! 期间应该会下载一些依赖,所以使用的时间还是比较长的。创建完成的第一步,我们就去看pom文件。pom文件是maven的核心文件。其中有对一些jar包的依赖配置。
这个pom文件是原始生成的,但是我对其做了一些修改。因为有些配置并不一定适用与你的环境。我贴出代码如下(在环境搭建的时候,尽量保证互相引用的jar包一致,曾经吃过不少亏)
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yxr</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--添加mysql连接工具-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
</dependencies>
</project>
添加完依赖 项目会自动下载jar包 下载jar包的同时,我们观察一下这个项目的结构
我们继续丰富该项目
接下来直接上代码,所有的解释都在代码中 按我的思路上代码
1.配置数据源以及界面控制
#服务端口
server.port=8020
#编码方式
server.tomcat.uri-encoding=utf-8
#MySQL 数据配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#数据库位置 dreamDB 是我的数据库 这里换成你们自己的
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名称?characterEncoding=utf-8
#数据库账号
spring.datasource.username=
#数据库密码
spring.datasource.password=
#Spring Data JPA
spring.jpa.database=MYSQL
#显示sql语句
spring.jpa.show-sql=true
#映射表的方式 update 不会影响表结构 create 慎用
spring.jpa.hibernate.ddl-auto=update
#Naming strategy
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
#Dialect
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
#视图层控制
spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html
spring.mvc.static-path-pattern=/static/**
2,配置用户实体类
package com.yxr.entity;
import javax.persistence.*;
/**
* entity 实体类注解
* table 对应数据库中的表
*/
@Entity
@Table(name = "user_t")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
//名称
private String name;
//年龄
private Integer age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
3, 配置包扫描 事物之类的东西
package com.yxr.configuration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* 通过 java代码 加注解 取代了以前的xml文件配置
* Order 设置优先级
* Configuration 用于定义配置类,可替换xml配置文件
* EnableTransactionManagemen 类似于开启事务
* EnableJpaRepositories jpa扫描包
* EntityScan 这个就很简单了 实体扫描包
*/
@Order(Ordered.HIGHEST_PRECEDENCE)
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@EnableJpaRepositories(basePackages = "com.yxr")
@EntityScan(basePackages = "com.yxr.entity")
public class JpaConfiguration {
/**
* 从名称上来看 似乎是持久层 异常相关的处理
* @return
*/
@Bean
PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() {
return new PersistenceExceptionTranslationPostProcessor();
}
}
4,用户控制层
package com.yxr.controller;
import com.yxr.entity.User;
import com.yxr.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 用户控制层
* controller 层注解 控制反转
* RequestMapping 设置访问的url
* ResponseBody 只返回内容
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/uinfo")
public String index() {
return "user/user";
}
/**
* 返回客户名称
* @return
*/
@RequestMapping("/findUserByName")
@ResponseBody
String findUserByName(@RequestParam(value = "name")String name) {
User user = userService.findUserByName(name);
if (null != user) {
return user.getId() + "," + user.getName() + "," + user.getAge();
} else {
return "用户不存在";
}
}
}
5,用户业务逻辑层
package com.yxr.service;
import com.yxr.dao.UserInterface;
import com.yxr.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 用户业务逻辑层
* service 业务注解 主要进行业务的处理
*/
@Service
public class UserService {
@Autowired
private UserInterface userInterface;
public User findUserByName(String name) {
User user = null;
try {
user = userInterface.findByUserName(name);
} catch(Exception e) {
return user;
} finally {
return user;
}
}
}
6,用户数据访问层
package com.yxr.dao;
import com.yxr.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
/**
* 用户数据访问层
* Repository 数据访问层注解
*/
@Repository
public interface UserInterface extends JpaRepository<User, Long> {
/**
* 这种写法真新奇 居然把sql 也写到了注解里面 是要疯啊
* @param name
* @return
*/
@Query("select t from User t where t.name = :name")
User findByUserName(@Param("name") String name);
}
7,用户界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>springBoot</title>
</head>
<body>
我是springBoot测试
</body>
</html>
8,最后项目入口
package com.yxr.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
/**
* 项目入口
*/
@SpringBootApplication
@ComponentScan(basePackages = "com.yxr")
public class EntryApplication {
public static void main(String[] args) {
SpringApplication.run(EntryApplication.class, args);
}
}
万事具备 直接在项目入口类点击启动
启动,正常是会报错的。也许你报的错和我的不一样,这就需要你自己去搜索了,我把我自己的报错进行一一解决。
猜测本地mysql服务未启动。果不其然。启动mysql服务再次重启项目
显示端口被占用 去application.properties中更换端口 我换了一个8022
因为之前我搭建的时候遇到过很多问题,但是现在不能重现。所以呢这次基本上没有遇到什么问题。
测试:
数据库中的数据
http://127.0.0.1:8022/user/findUserByName?name=zs (这里的 127.0.0.1 与 localhost 以及自己电脑的ip一样的效果)
http://127.0.0.1:8022/user/findUserByName?name=ls
写的太多了,今天就到这里吧!