欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot集成SSM、Dubbo、Redis、JSP的案例小結(jié)及思路講解

 更新時間:2021年05月31日 10:27:50   作者:張起靈-小哥  
這個案例其實就是SpringBoot集成SSM、Dubbo、Redis、JSP,看起來感覺很繁瑣,其實就是很簡單,下面通過案例分析給大家講解,感興趣的朋友跟隨小編一起看看吧

1.思路講解

這個案例其實就是SpringBoot集成SSM、Dubbo、Redis、JSP,看起來集成了一大堆,感覺挺麻煩的,但實際上并不是很麻煩,下面我來說一下我的思路:

接口工程:存放實體bean和業(yè)務接口

服務提供者:它是一個SpringBoot框架web項目,集成MyBatis、Redis

1)pom文件中添加依賴:MyBatis、MySQL驅(qū)動、Dubbo、zookeeper、redis、接口工程。

2)配置springboot核心配置文件(連接數(shù)據(jù)庫、連接redis、dubbo、內(nèi)嵌tomcat)

服務消費者:它也是一個SpringBoot框架web項目,集成JSP、Dubbo

2)配置springboot核心配置文件(dubbo、內(nèi)嵌tomcat、視圖解析器)

1)pom文件中添加依賴:Dubbo、zookeeper、接口工程、解析jsp頁面的依賴。

文章比較長,因為代碼比較多,大家一定要有這個耐心去看完,相信我講的還是有點用的?。?!

2.案例分析

這里SpringBoot集成MyBatis,我用的是MyBatis逆向工程來直接生成的實體bean、dao、mapper,所以這里首先給出MyBatis逆向工程的配置文件。

這個文件主要是負責生成你項目中的實體bean、dao、mapper,那么再加上集成dubbo的情況下,我們的實體bean是需要放在接口工程中的,而dao、mapper則需要放在服務提供者中,所以在MyBatis逆向工程的配置文件中,需要將實體bean的生成位置改為第一個接口工程的絕對路徑。數(shù)據(jù)庫這里的表結(jié)構(gòu)和數(shù)據(jù),我就不再給出了,大家自行創(chuàng)建一下就可以了。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
        <!-- 指定連接數(shù)據(jù)庫的 JDBC 驅(qū)動包所在位置,指定到你本機的完整路徑 -->
        <classPathEntry location="E:\mysql-connector-java-5.1.9.jar"/>
        <!-- 配置 table 表信息內(nèi)容體,targetRuntime 指定采用 MyBatis3 的版本 -->
        <context id="tables" targetRuntime="MyBatis3">
            <!-- 抑制生成注釋,由于生成的注釋都是英文的,可以不讓它生成 -->
            <commentGenerator>
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <!-- 配置數(shù)據(jù)庫連接信息 -->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/springboot"
                            userId="root"
                            password="12345678">
            </jdbcConnection>
            <!-- 生成 entity 類,targetPackage 指定 entity 類的包名, targetProject指定生成的 entity 放在 IDEA 的哪個工程下面-->
            <javaModelGenerator targetPackage="com.szh.springboot.entity"
                                targetProject="D:\BaiduNetdiskDownload\014-springboot-ssm-dubbo-interface\src\main\java">
                <property name="enableSubPackages" value="false"/>
                <property name="trimStrings" value="false"/>
            </javaModelGenerator>
            <!-- 生成 MyBatis 的 Mapper.xml 文件,targetPackage 指定 mapper.xml 文件的包名, targetProject 指定生成的 mapper.xml 放在 IDEA 的哪個工程下面 -->
            <sqlMapGenerator targetPackage="com.szh.springboot.mapper"
                             targetProject="src/main/java">
                <property name="enableSubPackages" value="false"/>
            </sqlMapGenerator>
            <!-- 生成 MyBatis 的 Mapper 接口類文件,targetPackage 指定 Mapper 接口類的包名, targetProject 指定生成的 Mapper 接口放在 IDEA 的哪個工程下面 -->
            <javaClientGenerator type="XMLMAPPER"
                                 targetPackage="com.szh.springboot.mapper"
                                 targetProject="src/main/java">
                <property name="enableSubPackages" value="false"/>
            </javaClientGenerator>
            <!-- 數(shù)據(jù)庫表名及對應的 Java 模型類名 -->
            <table tableName="t_student" domainObjectName="Student"
                   enableCountByExample="false"
                   enableUpdateByExample="false"
                   enableDeleteByExample="false"
                   enableSelectByExample="false"
                   selectByExampleQueryId="false"/>
        </context>
</generatorConfiguration>

2.1 接口工程

MyBatis逆向工程生成的實體bean。

package com.szh.springboot.entity;
 
import java.io.Serializable;
 
public class Student implements Serializable {
 
    private Integer id;
 
    private String name;
 
    private Integer age;
 
    //getter and setter
}

接口服務,其中有兩個方法。

package com.szh.springboot.service;
 
import com.szh.springboot.entity.Student;
 
/**
 *
 */
public interface StudentService {
 
    Student queryStudentById(Integer id);
 
    Integer queryAllStudentCount();
}

2.2 服務提供者

SpringBoot核心配置文件

# 配置內(nèi)嵌tomcat端口號和上下文根
server.port=8081
server.servlet.context-path=/
 
# 設置連接數(shù)據(jù)庫的信息
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=12345678
 
# 設置dubbo
spring.application.name=015-springboot-ssm-dubbo-provider
spring.dubbo.server=true
spring.dubbo.registry=zookeeper://localhost:2181
 
# 設置redis
spring.redis.host=localhost
spring.redis.port=6379

MyBatis逆向工程生成的dao接口和對應的mapper映射文件(這里就做一個簡單的案例,所以只用到了 selectByPrimaryKey、queryAllStudentCount 這兩個方法)

package com.szh.springboot.mapper;
 
import com.szh.springboot.entity.Student;
 
public interface StudentMapper {
 
    int deleteByPrimaryKey(Integer id);
 
    int insert(Student record);
 
    int insertSelective(Student record);
 
    Student selectByPrimaryKey(Integer id);
 
    int updateByPrimaryKeySelective(Student record);
 
    int updateByPrimaryKey(Student record);
 
    Integer queryAllStudentCount();
 
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.szh.springboot.mapper.StudentMapper">
 
  <resultMap id="BaseResultMap" type="com.szh.springboot.entity.Student">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="age" jdbcType="INTEGER" property="age" />
  </resultMap>
 
  <sql id="Base_Column_List">
    id, name, age
  </sql>
 
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from t_student
    where id = #{id,jdbcType=INTEGER}
  </select>
 
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from t_student
    where id = #{id,jdbcType=INTEGER}
  </delete>
 
  <insert id="insert" parameterType="com.szh.springboot.entity.Student">
    insert into t_student (id, name, age
      )
    values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}
      )
  </insert>
 
  <insert id="insertSelective" parameterType="com.szh.springboot.entity.Student">
    insert into t_student
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="name != null">
        name,
      </if>
      <if test="age != null">
        age,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=INTEGER},
      </if>
      <if test="name != null">
        #{name,jdbcType=VARCHAR},
      </if>
      <if test="age != null">
        #{age,jdbcType=INTEGER},
      </if>
    </trim>
  </insert>
 
  <update id="updateByPrimaryKeySelective" parameterType="com.szh.springboot.entity.Student">
    update t_student
    <set>
      <if test="name != null">
        name = #{name,jdbcType=VARCHAR},
      </if>
      <if test="age != null">
        age = #{age,jdbcType=INTEGER},
      </if>
    </set>
    where id = #{id,jdbcType=INTEGER}
  </update>
 
  <update id="updateByPrimaryKey" parameterType="com.szh.springboot.entity.Student">
    update t_student
    set name = #{name,jdbcType=VARCHAR},
      age = #{age,jdbcType=INTEGER}
    where id = #{id,jdbcType=INTEGER}
  </update>
 
  <select id="queryAllStudentCount" resultType="java.lang.Integer">
    select count(*)
    from t_student
  </select>
</mapper>

對接口工程中接口方法的實現(xiàn),其中包括注入數(shù)據(jù)庫持久層、注入redis模板類對象。

package com.szh.springboot.service.impl;
 
import com.alibaba.dubbo.config.annotation.Service;
import com.szh.springboot.entity.Student;
import com.szh.springboot.mapper.StudentMapper;
import com.szh.springboot.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
 
import java.util.concurrent.TimeUnit;
 
/**
 *
 */
@Component
@Service(interfaceClass = StudentService.class,version = "1.0.0",timeout = 15000)
public class StudentServiceImpl implements StudentService {
 
    @Autowired
    private StudentMapper studentMapper;
 
    @Autowired
    private RedisTemplate<Object,Object> redisTemplate;
 
    @Override
    public Student queryStudentById(Integer id) {
        return studentMapper.selectByPrimaryKey(id);
    }
 
    @Override
    public Integer queryAllStudentCount() {
 
        //首先去redis緩存中查詢,如果有:直接使用;如果沒有,去數(shù)據(jù)庫中查詢并存放到redis緩存中
        Integer allStudentCount= (Integer) redisTemplate.opsForValue().get("allStudentCount");
 
        //判斷是否有值
        if (allStudentCount==null) {
            //此時為空,則去數(shù)據(jù)庫中查詢
            allStudentCount=studentMapper.queryAllStudentCount();
            //并存放到redis緩存中
            redisTemplate.opsForValue().set("allStudentCount",allStudentCount,30, TimeUnit.SECONDS);
        }
        return allStudentCount;
    }
 
}

pom文件

 <dependencies>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
 
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.4</version>
        </dependency>
 
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
 
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
 
        <!-- 接口工程 -->
        <dependency>
            <groupId>com.szh.springboot</groupId>
            <artifactId>014-springboot-ssm-dubbo-interface</artifactId>
            <version>1.0.0</version>
        </dependency>
 
    </dependencies>
 
    <build>
 
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
 
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
 
            <!--mybatis 代碼自動生成插件-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <!--配置文件的位置-->
                    <configurationFile>GeneratorMapper.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>

SpringBoot項目啟動入口類

package com.szh.springboot;
 
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
@MapperScan(basePackages = "com.szh.springboot.mapper")
@EnableDubboConfiguration
public class Application {
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 
}

2.3 服務消費者

SpringBoot核心配置文件

# 配置內(nèi)嵌tomcat端口號和上下文根
server.port=8080
server.servlet.context-path=/
 
# 設置dubbo
spring.application.name=016-springboot-ssm-dubbo-consumer
spring.dubbo.registry=zookeeper://localhost:2181
 
# 配置視圖解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

定義控制層,其中有兩個請求方法

package com.szh.springboot.controller;
 
import com.alibaba.dubbo.config.annotation.Reference;
import com.szh.springboot.entity.Student;
import com.szh.springboot.service.StudentService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
/**
 *
 */
@Controller
public class StudentController {
 
    @Reference(interfaceClass = StudentService.class,version = "1.0.0",check = false)
    private StudentService studentService;
 
    @RequestMapping(value = "/student/detail/{id}")
    public String studentDetail(@PathVariable("id") Integer id,
                                Model model) {
        Student student=studentService.queryStudentById(id);
        model.addAttribute("student",student);
        return "studentDetail";
    }
 
    @GetMapping(value = "/student/all/count")
    public @ResponseBody Object allStudentCount() {
        Integer allStudentCount=studentService.queryAllStudentCount();
        return "學生總?cè)藬?shù)為:" + allStudentCount;
    }
 
}

pom文件

 <dependencies>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
 
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.4</version>
        </dependency>
 
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
 
        <!-- 接口工程 -->
        <dependency>
            <groupId>com.szh.springboot</groupId>
            <artifactId>014-springboot-ssm-dubbo-interface</artifactId>
            <version>1.0.0</version>
        </dependency>
 
    </dependencies>
 
    <build>
 
        <resources>
            <resource>
                <directory>src/main/webapp</directory>
                <targetPath>META-INF/resources</targetPath>
                <includes>
                    <include>*.*</include>
                </includes>
            </resource>
        </resources>
 
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

響應的jsp頁面、SpringBoot項目啟動入口類

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
    <title>$</title>
</head>
<body>
    <h3>學生信息</h3>
    <div>學生編號:${student.id}</div>
    <div>學生姓名:${student.name}</div>
    <div>學生年齡:${student.age}</div>
</body>
</html>
package com.szh.springboot;
 
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
@EnableDubboConfiguration
public class Application {
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 
}

2.4 啟動測試?。?!

因為我們這個案例是SpringBoot集成SSM、Dubbo、Redis、JSP,同時使用注冊中心。所以啟動的步驟是:

  • 啟動zookeeper注冊中心 zkServer.cmd(我這里為了考慮電腦性能,所以直接就在Windows上啟動了,推薦是在Linux上啟動)
  • 啟動redis服務(redis-server.exe redis,windows.conf 、 redis-cli.exe -h 127.0.0.1 -p 6379)
  • 啟動服務提供者(對應該工程的SpringBoot項目啟動入口類)啟動服務消費者(對應該工程的SpringBoot項目啟動入口類)

測試結(jié)果中,可以看到,第一個請求結(jié)果拿到了學生信息,第二個請求結(jié)果也查詢出了學生數(shù)量,而且我們開啟redis服務之后,可以看到發(fā)起第二個請求之后,redis緩存中已經(jīng)有了這個 allStudentCount 數(shù)據(jù),經(jīng)過30秒之后,這個數(shù)據(jù)會被清除。

以上就是SpringBoot集成SSM、Dubbo、Redis、JSP的案例小結(jié)及思路講解的詳細內(nèi)容,更多關(guān)于SpringBoot集成SSM、Dubbo、Redis、JSP的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 實例講解Java設計模式編程中如何運用代理模式

    實例講解Java設計模式編程中如何運用代理模式

    這篇文章主要介紹了Java設計模式編程中如何運用代理模式,文中舉了普通代理和強制代理的例子作為代理模式的擴展內(nèi)容,需要的朋友可以參考下
    2016-02-02
  • SpringBoot2基于重復創(chuàng)建bean的問題及解決

    SpringBoot2基于重復創(chuàng)建bean的問題及解決

    這篇文章主要介紹了SpringBoot2基于重復創(chuàng)建bean的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java常見踩坑記錄之異常處理

    Java常見踩坑記錄之異常處理

    程序運行時發(fā)生的不被期望的事件,它阻止了程序按照程序員的預期正常執(zhí)行,這就是異常,下面這篇文章主要給大家介紹了關(guān)于Java常見踩坑記錄之異常處理的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Spring Boot2深入分析解決java.lang.ArrayStoreException異常

    Spring Boot2深入分析解決java.lang.ArrayStoreException異常

    這篇文章介紹了Spring Boot2深入分析解決java.lang.ArrayStoreException異常的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • SpringBoot 使用 @Value 注解讀取配置文件給靜態(tài)變量賦值

    SpringBoot 使用 @Value 注解讀取配置文件給靜態(tài)變量賦值

    這篇文章主要介紹了SpringBoot 使用 @Value 注解讀取配置文件給靜態(tài)變量賦值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 結(jié)合mybatis-plus實現(xiàn)簡單不需要寫sql的多表查詢

    結(jié)合mybatis-plus實現(xiàn)簡單不需要寫sql的多表查詢

    這篇文章主要給大家介紹了關(guān)于結(jié)合mybatis-plus實現(xiàn)簡單不需要寫sql的多表查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mybatis-plus具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • Springboot自動配置與@Configuration配置類詳解

    Springboot自動配置與@Configuration配置類詳解

    這篇文章主要介紹了SpringBoot中的@Configuration與自動配置,在進行項目編寫前,我們還需要知道一個東西,就是SpringBoot對我們的SpringMVC還做了哪些配置,包括如何擴展,如何定制,只有把這些都搞清楚了,我們在之后使用才會更加得心應手
    2022-07-07
  • Java繼承的實現(xiàn)與繼承限制分析

    Java繼承的實現(xiàn)與繼承限制分析

    這篇文章主要介紹了Java繼承的實現(xiàn)與繼承限制,結(jié)合具體實例形式分析了Java繼承的定義、實現(xiàn)以及繼承的相關(guān)限制,需要的朋友可以參考下
    2019-01-01
  • Spring?Bean的8種加載方式總結(jié)

    Spring?Bean的8種加載方式總結(jié)

    以前學習Spring框架的時候,總結(jié)了幾種Bean的加載方式,不過老師說還有其它的加載方式,以下八種并不是全部,但也足以用來做很多事情了,希望對大家有所幫助
    2022-10-10
  • springboot中配置好登錄攔截后,swagger訪問不了問題

    springboot中配置好登錄攔截后,swagger訪問不了問題

    這篇文章主要介紹了springboot中配置好登錄攔截后,swagger訪問不了問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論