springBoot初涉足

     工作中包括个人开发中,使用 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

写的太多了,今天就到这里吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值