精华内容
下载资源
问答
  • SSM框架构建积分系统基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)
  • J2EE项目系列(四)–SSM框架集成积分系统基本商品检索系统(Spring + SpringMVC + MyBatis + Lucene + Redis + MAVEN) 喜欢就给个star吧!!!谢谢! 并附各级的博客文章: (一) (二) (三) (四) (五)...
  • SSM框架构建积分系统基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)(1)框架整合构建 项目整体思路出来,打算糅合自己项目学过的东西,做一个整体的基本demo出来,与这个项目相关的博客会...

    SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)(1)框架整合构建

    项目整体思路出来,打算糅合自己项目学过的东西,做一个整体的基本demo出来,与这个项目相关的博客会不断写出来给大家的,尽请期待。

    文章结构:(1)SSM框架整合以及测试;(2)Redis单机版以及测试。

    (Lucene在接下来的篇章再写出来)


    一、SSM框架整合以及测试:(IntelliJ IDEA开发)

    先说下我的一惯思路:Spring->dao(Mybatis、hibernate)->SpringMVC。每一步的整合都要做一个测试类测试!!!

    (1)maven对应资源:

    <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.fuzhu</groupId>
      <artifactId>SSM</artifactId>
      <packaging>war</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>SSM Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mysql.version>5.1.37</mysql.version>
        <spring.version>4.1.7.RELEASE</spring.version>
    
      </properties>
      <dependencies>
    
        <!-- 单元测试 -->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
        </dependency>
    
        <!-- 1.日志 -->
        <!-- 实现slf4j接口并整合 -->
        <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-classic</artifactId>
          <version>1.1.1</version>
        </dependency>
    
        <!-- 2.数据库 -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>${mysql.version}</version>
          <scope>runtime</scope>
        </dependency>
    
        <!-- 阿里的druid dataSource -->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.0.0</version>
        </dependency>
    
        <!-- DAO: MyBatis -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.3.0</version>
        </dependency>
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>1.2.3</version>
        </dependency>
    
        <!-- 3.Servlet web -->
        <dependency>
          <groupId>taglibs</groupId>
          <artifactId>standard</artifactId>
          <version>1.1.2</version>
        </dependency>
        <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.5.4</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
        </dependency>
    
        <!-- 4.Spring -->
        <!-- 1)Spring核心 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- 2)Spring DAO层 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- 3)Spring web -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- 4)Spring test -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <!-- redis客户端:Jedis -->
        <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>2.7.3</version>
        </dependency>
    
    
        <!-- Map工具类 -->
        <dependency>
          <groupId>commons-collections</groupId>
          <artifactId>commons-collections</artifactId>
          <version>3.2</version>
        </dependency>
    
        <!--fastjson-->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.5</version>
        </dependency>
    
      </dependencies>
      <build>
        <finalName>SSM</finalName>
      </build>
    </project>

    (2)编写spring的配置:

    1.读入数据库连接相关参数;2.数据库连接池druid;3.配置连接属性;4.配置SqlSessionFactory对象(mybatis);5.扫描dao层接口,动态实现dao接口,也就是说不需要daoImpl,sql和参数都写在xml文件上。

    mysql_driverClassName=com.mysql.jdbc.Driver
    mysql_url=jdbc:mysql://localhost:3306/ssm
    mysql_username=root
    mysql_password=
    #我就把我这里的数据库密码给删了吧,大家自己以后上传给别人的时候也记得删喔,不然有点危险呢!
    #另外,配置文件中的mysql_username,如果写成username,可能会与系统环境中的username变量冲突,所以到时候真正连接数据库的时候,用户名就被替换成系统中的用户名(有得可能是administrator),那肯定是连接不成功的。
    
    druid_initialSize=1
    druid_minIdle=1
    druid_maxActive=10
    druid_maxWait=10000
    druid_timeBetweenEvictionRunsMillis=60000
    druid_minEvictableIdleTimeMillis=300000
    <?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:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 配置整合mybatis过程 -->
        <!-- 1.配置数据库相关参数properties的属性:${url} -->
        <context:property-placeholder location="classpath:jdbc.properties" />
    
        <!-- 2.数据库连接池 -->
        <!-- 配置数据源,记得去掉myBatis-config.xml的数据源相关配置 -->
        <!-- 这里是在原始的基础上添加了druid数据库连接池,来监控。 -->
        <!-- 注意 :driverClassName,url,username,password 这几个值是固定的,由bean class决定的 -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
            <property name="driverClassName" value="${mysql_driverClassName}" />
            <property name="url" value="${mysql_url}" />
            <property name="username" value="${mysql_username}" />
            <property name="password" value="${mysql_password}" />
    
            <!-- 配置初始化大小、最小、最大 -->
            <property name="initialSize" value="${druid_initialSize}" />
            <property name="minIdle" value="${druid_minIdle}" />
            <property name="maxActive" value="${druid_maxActive}" />
    
            <!-- 配置获取连接等待超时的时间 -->
            <property name="maxWait" value="${druid_maxWait}" />
    
            <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
            <property name="timeBetweenEvictionRunsMillis" value="${druid_timeBetweenEvictionRunsMillis}" />
    
            <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
            <property name="minEvictableIdleTimeMillis" value="${druid_minEvictableIdleTimeMillis}" />
    
            <property name="testWhileIdle" value="true" />
    
            <!-- 这里建议配置为TRUE,防止取到的连接不可用 -->
            <property name="testOnBorrow" value="true" />
            <property name="testOnReturn" value="false" />
    
            <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
            <property name="poolPreparedStatements" value="true" />
            <property name="maxPoolPreparedStatementPerConnectionSize"
                      value="20" />
    
            <property name="removeAbandoned" value="true" />
            <property name="removeAbandonedTimeout" value="1800" />
    
            <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
            <property name="filters" value="stat" />
        </bean>
    
        <!-- 3.配置SqlSessionFactory对象 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 注入数据库连接池 -->
            <property name="dataSource" ref="dataSource" />
            <!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
            <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
            <!-- 扫描entity包 使用别名 -->
            <property name="typeAliasesPackage" value="com.fuzhu.entity" />
            <!-- 扫描sql配置文件:mapper需要的xml文件 -->
            <property name="mapperLocations" value="classpath:com/fuzhu/mapper/*.xml" />
        </bean>
    
        <!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!-- 注入sqlSessionFactory -->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
            <!-- 给出需要扫描Dao接口包 -->
            <property name="basePackage" value="com.fuzhu.dao" />
        </bean>
    
    </beans>

    (3)顺便要编写好mybatis配置喔

    1.使用自增主键;2.使用列别名;3.开启驼峰命名转换 create_time -> createTime

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!-- 配置全局属性 -->
        <settings>
            <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
            <setting name="useGeneratedKeys" value="true" />
    
            <!-- 使用列别名替换列名 默认:true -->
            <setting name="useColumnLabel" value="true" />
    
            <!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} -->
            <setting name="mapUnderscoreToCamelCase" value="true" />
        </settings>
    </configuration>

    (4)写好dao层配置就到service层配置了。

    1.扫描service包所有注解 @Service;2.配置事务管理器,把事务管理交由spring来完成;3.配置基于注解的声明式事务,可以直接在方法上@Transaction

    <?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
        <!-- 扫描service包下所有使用注解的类型 -->
        <context:component-scan base-package="com.fuzhu.service" />
    
        <!-- 配置事务管理器 -->
        <bean id="transactionManager"
              class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!-- 注入数据库连接池 -->
            <property name="dataSource" ref="dataSource" />
        </bean>
    
        <!-- 配置基于注解的声明式事务 -->
        <tx:annotation-driven transaction-manager="transactionManager" />
    </beans>

    (5)接着就编写springmvc的配置了

    1.开启SpringMVC注解模式,可以使用@RequestMapping,@PathVariable,@ResponseBody等;

    2.对静态资源处理,如js,css,jpg等;

    3.配置jsp 显示ViewResolver,例如在controller中某个方法返回一个string类型的”login”,实际上会返回”/WEB-INF/login.jsp”;

    4.扫描web层 @Controller

    <?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:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 配置SpringMVC -->
        <!-- 1.开启SpringMVC注解模式 -->
        <!-- 简化配置:
            (1)自动注册DefaultAnootationHandlerMapping,AnotationMethodHandlerAdapter
            (2)提供一些列:数据绑定,数字和日期的format @NumberFormat, @DateTimeFormat, xml,json默认读写支持
        -->
        <mvc:annotation-driven />
    
        <!-- 2.静态资源默认servlet配置
            (1)加入对静态资源的处理:js,gif,png
            (2)允许使用"/"做整体映射
         -->
        <mvc:default-servlet-handler/>
    
        <!-- 3.配置jsp 显示ViewResolver -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
            <property name="prefix" value="/WEB-INF/jsp/" />
            <property name="suffix" value=".jsp" />
        </bean>
    
        <!-- 4.扫描web相关的bean -->
        <context:component-scan base-package="com.fuzhu.controller" />
    </beans>

    注意:使用IDEA开发,我们是要给工程配置下spring环境的!!

    这里写图片描述

    (6)修改web.xml文件了,它在webapp的WEB-INF下。

    有个注意点:一般工程默认创建web.xml的时候有个规定的顺序添加操作限定。详情看此处

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app>
        <display-name>Archetype Created Web Application</display-name>
        <!-- spring加载前端控制器 -->
        <!-- 如果是用mvn命令生成的xml,需要修改servlet版本为3.1 -->
        <!-- 配置DispatcherServlet -->
        <servlet>
            <servlet-name>seckill-dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- 配置springMVC需要加载的配置文件
                spring-dao.xml,spring-service.xml,spring-web.xml
                Mybatis - > spring -> springmvc
             -->
            <!-- 加载spring容器监听器 -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring/spring-*.xml</param-value>
            </init-param>
        </servlet>
        <!-- url模式 -->
        <servlet-mapping>
            <servlet-name>seckill-dispatcher</servlet-name>
            <!-- 默认匹配所有的请求 -->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
        <!-- 乱码过滤器 -->
        <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>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    
        <!-- druid -->
        <servlet>
            <servlet-name>DruidStatView</servlet-name>
            <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
            <init-param>
                <!-- 用户名 -->
                <param-name>loginUserName</param-name>
                <param-value>admin</param-value>
            </init-param>
            <init-param>
                <!-- 登录密码 -->
                <param-name>loginPassword</param-name>
                <param-value>123456</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>DruidStatView</servlet-name>
            <url-pattern>/druid/*</url-pattern>
        </servlet-mapping>
        <filter>
            <filter-name>DruidWebStatFilter</filter-name>
            <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
            <init-param>
                <param-name>exclusions</param-name>
                <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>DruidWebStatFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    </web-app>

    接下来就是测试啦!!

    (1)测试mybatis与spring是否整合好:

    编写我们自己的bean先

    public class Score {
    
        private Long id;
        //积分变化类型
        private String changeType;
        //创建时间
        private Date createTime;
        //积分变化数
        private Integer score;
        //爱豆变化者
        private User user;
    
      //省略无参构造器,全参构造器,以及一系列的getset
    }

    (2)然后就是编写接口嘛:

    public interface ScoreDao {
        //插入积分记录
        int insertScore(Score score);
    }

    (3)接着就写mapper。注意,这里不需要实现dao接口不用编写daoImpl, mybatis会给我们动态实现,但是我们需要编写相应的mapper。

    因为使用IDEA开发,本博主发现我们的mapper类只能建立在resources目录下,而不能建立在java的包下面。不然会映射不了。

    <?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.fuzhu.dao.ScoreDao">
        <insert id="insertScore" parameterType="com.fuzhu.entity.Score">
            INSERT  INTO score (change_type,score)
            VALUES (#{changeType},#{score})
        </insert>
    </mapper>

    (4)编写测试用例:然后直接Junit测试即可!!这就测试完dao层啦!!!

    @RunWith(SpringJUnit4ClassRunner.class) // 使用Springtest测试框架
    @ContextConfiguration("/spring/spring-*.xml") // 加载配置
    public class MyBatisTest {
        @Autowired
        private ScoreDao scoreDao;
    
        @Test
        public void testAddScore() {
            Score score = new Score();
            score.setChangeType("充钱钱");
            score.setScore(10);
            int insert = scoreDao.insertScore(score);
            System.out.print("insert :"+insert);
        }
    }

    (5)接着!我们要测试整个框架,也就是要用SpringMVC给展示出来嘛!先写个业务逻辑接口!

    public interface ScoreService {
    //插入积分记录
        public int insertScore(Score score);
    }
    

    编写接口实现类嘛。(注意IDEA的无故标红不用管,我们要可以先部署跑一下,被坑了,IDEA标志dao无法装配,实际上已经装配成功的,毕竟上一步测试已经测试成功。)

    @Service
    public class ScoreServiceImpl implements ScoreService{
        @Autowired
        private ScoreDao scoreDao;
    
        @Override
        public int insertScore(Score score) {
            int t =scoreDao.insertScore(score);
            return t;
        }
    }
    

    最后就写下controller给springmvc解析视图出来嘛。这样就整个框架测试成功啦!!!

    @RestController
    @RequestMapping("/test")
    public class TestController {
    
        private Logger logger = LoggerFactory.getLogger(this.getClass());
        @Autowired
        private ScoreService scoreService;
    
        @RequestMapping(value = "/testMethod",produces="text/html;charset=UTF-8", method = {RequestMethod.GET,RequestMethod.GET})
        public String test() {
            Score score = new Score();
            score.setChangeType("玩游戏");
            score.setScore(10);
            scoreService.insertScore(score);
            return JSON.toJSONString(score);
        }
    }
    

    二、Redis单机版以及测试

    (测试以查禁言表为例子)

    (1)MAVEN拉下redis的库

    (2)编写单机版redis配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!-- 本jedis的jar为2.7.0版本 -->
    
    
        <!-- jedisPool配置信息 -->
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="maxTotal" value="1000"/> <!-- 控制一个pool可分配多少个jedis实例 -->
            <property name="maxIdle" value="200" />   <!-- 控制一个pool最多有多少个状态为idle(空闲)的jedis实例 -->
            <property name="maxWaitMillis" value="2000" />  <!-- 表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException -->
            <property name="testOnBorrow" value="true" /> <!-- 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的 -->
        </bean>
    
        <!-- jedis客户端单机版配置 -->
        <bean id="jedisPool" class="redis.clients.jedis.JedisPool" scope="singleton">
            <constructor-arg name="poolConfig" ref="jedisPoolConfig" />
            <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
            <constructor-arg name="port" value="6379"></constructor-arg>
        </bean>
    
        <bean id="jedisClient" class="com.fuzhu.serviceImpl.JedisClientSingle" />
    
    </beans>

    (3)基本业务代码先:

    public interface GagDao {
        public int insertGag(Gag gag);
        List<Gag> findByUserId(Long id);
    }

    GagMapper

    <?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.fuzhu.dao.GagDao">
        <insert id="insertGag" parameterType="com.fuzhu.entity.Gag">
            INSERT INTO gag (gag_time,user_id)
            VALUES (#{gagTime},#{user.id})
        </insert>
        <select id="findByUserId" resultType="com.fuzhu.entity.Gag" parameterType="long">
            SELECT
                  *
            FROM
                  gag
            WHERE
                  user_id = #{id}
        </select>
    </mapper>

    业务的接口以及实现

    public interface GagService {
        public int insertGag(Gag gag);
        List<Gag> findByUserId(Long id);
    }
    @Override
        public List<Gag> findByUserId(Long id) {
            List<Gag> gagList=gagDao.findByUserId(id);
            return gagList;
        }

    (4)缓存的设计和调用:

    前言:禁言表这种东西可能会被经常查的,而已难变固定的,就把整个表缓存到redis中嘛。

    controller代码:

    //装配需要的东东先!!
    @Autowired
        private GagService gagService;
        @Autowired
        private JedisClient jedisClient;
    //再写个业务方法
    //基本思路:有没有查过禁言表,有查过就往redis拿,null的话就去数据库拿,拿完再把数据set进缓存!!
    @RequestMapping(value = "/testRedis",produces="text/html;charset=UTF-8", method = {RequestMethod.GET,RequestMethod.GET})
        public String testRedis(Long id){
            List<Gag> gagList= null;
            try {
                String resulthget = jedisClient.hget("禁言表", id + "");
                if (resulthget != null) {
                    //字符串转为list
                    System.out.println("有缓存啦啦啦!!!");
                    JSONArray array = JSONArray.parseArray(resulthget);
                    gagList = (List) array;
                } else {
                    System.out.println("禁言表没查过");
                    gagList= gagService.findByUserId(id);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                String cacheString = JsonUtils.objectToJson(gagList);
                jedisClient.hset("禁言表", id + "", cacheString);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return JSON.toJSONString(gagList);
        }

    然后??开启你的redis,部署工程。还没装redis??不会开启redis?点点这里

    这里写图片描述
    这里写图片描述

    到此就收工啦,redis植入成功!!yes!


    源码下载:J2EE项目系列(四)–SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)

    好了,J2EE项目系列(四)–SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)(1)框架整合构建讲完了。本博客系列是我做项目时候需要整合的部分东西(分布式的往后补上),我把里面的整合,以及部分非算法性的业务逻辑写出来,分享经验给大家。欢迎在下面指出错误,共同学习!!你的点赞是对我最好的支持!!

    展开全文
  • 现在是搭建商品的数据库以及Lucene框架整合。 文章结构:(1)商品数据库的构建;(2)Lucene的整合与测试; 这是本系列的第二篇。 博客地址:http://blog.csdn.net/jack__frost?viewmode=contents

    继续搭建我们的项目吧。现在是搭建商品的数据库以及Lucene框架整合。

    本系列:

    (一)SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)(1)框架整合构建

    文章结构:(1)商品数据库的构建;(2)Lucene的整合与测试;


    一、商品数据库的构建:(数据库文件会在工程文件给出。)

    (1)商品层级索引表

    商品是涉及多层结构的。比如:家装->住宅家具->床上用品

    这里写图片描述
    这里写图片描述
    这里写图片描述

    (2)商品信息表:

    这里写图片描述
    这里写图片描述

    以及最后添加的size,商品大小款。

    大家拿着这两个图对着我将会给大家导出的数据库文件看就好。清晰明了。


    二、Lucene的整合与测试

    (1)官网下载先。下载多少个包呢??

    IKAnalyzer2012FF_u1.jar			//中文分词
     lucene-analyzers-common-4.4.0.jar  //其余是lucene核心包。词语的切割,core内容包,高亮包,查询包
     lucene-core-4.4.0.jar 
    lucene-highlighter-4
    lucene-queryparser-4.4.0.jar
    

    (2)导入到我们的项目中(有朋友问为什么不用maven,我也想用啊,可是maven下来找不到那堆类)

    IDEA导入:先把包放到WEB-INF下面的lib包中,然后导入

    这里写图片描述

    (3)编写我们的测试代码:

    public class LuceneTest {
        private static Version matchVersion = Version.LUCENE_44;
        private static Analyzer analyzer = new IKAnalyzer();
        /*
            建立索引
         */
        public void index() {
            IndexWriter writer = null;
            try {
                //1.创建Directory(是建立在内存中还是硬盘中)
    //            Directory directory = new RAMDirectory();//索引建立在内存中!!!
                Directory directory = FSDirectory.open(new File("e:/lucene/index01"));//索引创建在硬盘上。
                //2.创建IndexWriter,用它来写索引
                IndexWriterConfig iwc = new IndexWriterConfig(matchVersion, analyzer);
                writer = new IndexWriter(directory, iwc);
                //3.创建Document对象
                Document doc = null;
                //4.为Document添加Field(Field是Document的一个子元素)(Field是那些大小、内容、标题)
                File f = new File("F:/lucene/example");
                for (File file : f.listFiles()) {
                    doc = new Document();
                    doc.add(new Field("content",new FileReader(file)));
                    doc.add(new Field("filename",file.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED));
                    doc.add(new Field("path",file.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED));
                    //5.通过IndexWriter添加文档到索引中
                    writer.addDocument(doc);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (writer != null) {
                    try {
                        writer.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    

    调用:

    public class TestLuceneIndex {
        @Test
        public void testIndex(){
            LuceneTest luceneTest = new LuceneTest();
            luceneTest.index();
        }
    }
    

    (4)按照我们自己编写的目录,建立个我们需要索引的文件先:随便几个txt(具体文件要求看官方文档吧!)

    这里写图片描述

    (5)然后就跑起来啊。Junit测试!!!

    这里写图片描述

    (6)然后我们就看到索引文件自动创建了

    这里写图片描述

    这样就完成我们整个项目需要用到的框架整合了!!!很愉快简单吧??


    源码下载:J2EE项目系列(四)–SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)

    好了,J2EE项目系列(四)–SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)(2)建立商品数据库和Lucene的搭建讲完了。

    本博客系列是我做其中一个项目时候需要整合的部分东西(分布式的往后补上),我把里面的整合,以及部分非算法性的业务逻辑写出来(大家别看这边博客这么少东西,其实就那个数据库搞了我几个钟),分享经验给大家。欢迎在下面指出错误,共同学习!!你的点赞是对我最好的支持!!

    更多内容,可以访问JackFrost的博客

    展开全文
  • 项目整体思路出来,打算糅合自己项目学过的东西,做一个整体的基本demo出来,与这个项目相关的博客会不断写...(2)Redis单机版以及测试。 先说下我的一惯思路:Spring->dao(Mybatis、hibernate)->SpringMVC

    项目整体思路出来,打算糅合自己项目学过的东西,做一个整体的基本demo出来,与这个项目相关的博客会不断写出来给大家的,尽请期待。

    文章结构:(1)SSM框架整合以及测试;(2)Redis单机版以及测试。

    (Lucene在接下来的篇章再写出来)


    一、SSM框架整合以及测试:(IntelliJ IDEA开发)

    先说下我的一惯思路:Spring->dao(Mybatis、hibernate)->SpringMVC。每一步的整合都要做一个测试类测试!!!

    (1)maven对应资源:

    <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.fuzhu</groupId>
      <artifactId>SSM</artifactId>
      <packaging>war</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>SSM Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mysql.version>5.1.37</mysql.version>
        <spring.version>4.1.7.RELEASE</spring.version>
    
      </properties>
      <dependencies>
    
        <!-- 单元测试 -->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
        </dependency>
    
        <!-- 1.日志 -->
        <!-- 实现slf4j接口并整合 -->
        <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-classic</artifactId>
          <version>1.1.1</version>
        </dependency>
    
        <!-- 2.数据库 -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>${mysql.version}</version>
          <scope>runtime</scope>
        </dependency>
    
        <!-- 阿里的druid dataSource -->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.0.0</version>
        </dependency>
    
        <!-- DAO: MyBatis -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.3.0</version>
        </dependency>
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>1.2.3</version>
        </dependency>
    
        <!-- 3.Servlet web -->
        <dependency>
          <groupId>taglibs</groupId>
          <artifactId>standard</artifactId>
          <version>1.1.2</version>
        </dependency>
        <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.5.4</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
        </dependency>
    
        <!-- 4.Spring -->
        <!-- 1)Spring核心 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- 2)Spring DAO层 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- 3)Spring web -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- 4)Spring test -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <!-- redis客户端:Jedis -->
        <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>2.7.3</version>
        </dependency>
    
    
        <!-- Map工具类 -->
        <dependency>
          <groupId>commons-collections</groupId>
          <artifactId>commons-collections</artifactId>
          <version>3.2</version>
        </dependency>
    
        <!--fastjson-->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.5</version>
        </dependency>
    
      </dependencies>
      <build>
        <finalName>SSM</finalName>
      </build>
    </project>
    
    

    (2)编写spring的配置:

    1.读入数据库连接相关参数;2.数据库连接池druid;3.配置连接属性;4.配置SqlSessionFactory对象(mybatis);5.扫描dao层接口,动态实现dao接口,也就是说不需要daoImpl,sql和参数都写在xml文件上。

    mysql_driverClassName=com.mysql.jdbc.Driver
    mysql_url=jdbc:mysql://localhost:3306/ssm
    mysql_username=root
    mysql_password=
    #我就把我这里的数据库密码给删了吧,大家自己以后上传给别人的时候也记得删喔,不然有点危险呢!
    #另外,配置文件中的mysql_username,如果写成username,可能会与系统环境中的username变量冲突,所以到时候真正连接数据库的时候,用户名就被替换成系统中的用户名(有得可能是administrator),那肯定是连接不成功的。
    
    druid_initialSize=1
    druid_minIdle=1
    druid_maxActive=10
    
    druid_maxWait=10000
    
    druid_timeBetweenEvictionRunsMillis=60000
    
    druid_minEvictableIdleTimeMillis=300000
    
    <?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:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 配置整合mybatis过程 -->
        <!-- 1.配置数据库相关参数properties的属性:${url} -->
        <context:property-placeholder location="classpath:jdbc.properties" />
    
        <!-- 2.数据库连接池 -->
        <!-- 配置数据源,记得去掉myBatis-config.xml的数据源相关配置 -->
        <!-- 这里是在原始的基础上添加了druid数据库连接池,来监控。 -->
        <!-- 注意 :driverClassName,url,username,password 这几个值是固定的,由bean class决定的 -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
            <property name="driverClassName" value="${mysql_driverClassName}" />
            <property name="url" value="${mysql_url}" />
            <property name="username" value="${mysql_username}" />
            <property name="password" value="${mysql_password}" />
    
            <!-- 配置初始化大小、最小、最大 -->
            <property name="initialSize" value="${druid_initialSize}" />
            <property name="minIdle" value="${druid_minIdle}" />
            <property name="maxActive" value="${druid_maxActive}" />
    
            <!-- 配置获取连接等待超时的时间 -->
            <property name="maxWait" value="${druid_maxWait}" />
    
            <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
            <property name="timeBetweenEvictionRunsMillis" value="${druid_timeBetweenEvictionRunsMillis}" />
    
            <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
            <property name="minEvictableIdleTimeMillis" value="${druid_minEvictableIdleTimeMillis}" />
    
            <property name="testWhileIdle" value="true" />
    
            <!-- 这里建议配置为TRUE,防止取到的连接不可用 -->
            <property name="testOnBorrow" value="true" />
            <property name="testOnReturn" value="false" />
    
            <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
            <property name="poolPreparedStatements" value="true" />
            <property name="maxPoolPreparedStatementPerConnectionSize"
                      value="20" />
    
            <property name="removeAbandoned" value="true" />
            <property name="removeAbandonedTimeout" value="1800" />
    
            <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
            <property name="filters" value="stat" />
        </bean>
    
        <!-- 3.配置SqlSessionFactory对象 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 注入数据库连接池 -->
            <property name="dataSource" ref="dataSource" />
            <!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
            <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
            <!-- 扫描entity包 使用别名 -->
            <property name="typeAliasesPackage" value="com.fuzhu.entity" />
            <!-- 扫描sql配置文件:mapper需要的xml文件 -->
            <property name="mapperLocations" value="classpath:com/fuzhu/mapper/*.xml" />
        </bean>
    
        <!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!-- 注入sqlSessionFactory -->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
            <!-- 给出需要扫描Dao接口包 -->
            <property name="basePackage" value="com.fuzhu.dao" />
        </bean>
    
    </beans>
    

    (3)顺便要编写好mybatis配置喔

    1.使用自增主键;2.使用列别名;3.开启驼峰命名转换 create_time -> createTime

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    	<!-- 配置全局属性 -->
    	<settings>
    		<!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
    		<setting name="useGeneratedKeys" value="true" />
    
    		<!-- 使用列别名替换列名 默认:true -->
    		<setting name="useColumnLabel" value="true" />
    
    		<!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} -->
    		<setting name="mapUnderscoreToCamelCase" value="true" />
    	</settings>
    </configuration>
    

    (4)写好dao层配置就到service层配置了。

    1.扫描service包所有注解 @Service;2.配置事务管理器,把事务管理交由spring来完成;3.配置基于注解的声明式事务,可以直接在方法上@Transaction

    <?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
        <!-- 扫描service包下所有使用注解的类型 -->
        <context:component-scan base-package="com.fuzhu.service" />
    
        <!-- 配置事务管理器 -->
        <bean id="transactionManager"
              class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!-- 注入数据库连接池 -->
            <property name="dataSource" ref="dataSource" />
        </bean>
    
        <!-- 配置基于注解的声明式事务 -->
        <tx:annotation-driven transaction-manager="transactionManager" />
    </beans>
    

    (5)接着就编写springmvc的配置了

    1.开启SpringMVC注解模式,可以使用@RequestMapping,@PathVariable,@ResponseBody等;

    2.对静态资源处理,如js,css,jpg等;

    3.配置jsp 显示ViewResolver,例如在controller中某个方法返回一个string类型的"login",实际上会返回"/WEB-INF/login.jsp";

    4.扫描web层 @Controller

    <?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:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 配置SpringMVC -->
        <!-- 1.开启SpringMVC注解模式 -->
        <!-- 简化配置:
            (1)自动注册DefaultAnootationHandlerMapping,AnotationMethodHandlerAdapter
            (2)提供一些列:数据绑定,数字和日期的format @NumberFormat, @DateTimeFormat, xml,json默认读写支持
        -->
        <mvc:annotation-driven />
    
        <!-- 2.静态资源默认servlet配置
            (1)加入对静态资源的处理:js,gif,png
            (2)允许使用"/"做整体映射
         -->
        <mvc:default-servlet-handler/>
    
        <!-- 3.配置jsp 显示ViewResolver -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
            <property name="prefix" value="/WEB-INF/jsp/" />
            <property name="suffix" value=".jsp" />
        </bean>
    
        <!-- 4.扫描web相关的bean -->
        <context:component-scan base-package="com.fuzhu.controller" />
    </beans>
    

    注意:使用IDEA开发,我们是要给工程配置下spring环境的!!

    这里写图片描述

    (6)修改web.xml文件了,它在webapp的WEB-INF下。

    有个注意点:一般工程默认创建web.xml的时候有个规定的顺序添加操作限定。详情看此处

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app>
        <display-name>Archetype Created Web Application</display-name>
        <!-- spring加载前端控制器 -->
        <!-- 如果是用mvn命令生成的xml,需要修改servlet版本为3.1 -->
        <!-- 配置DispatcherServlet -->
        <servlet>
            <servlet-name>seckill-dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- 配置springMVC需要加载的配置文件
                spring-dao.xml,spring-service.xml,spring-web.xml
                Mybatis - > spring -> springmvc
             -->
            <!-- 加载spring容器监听器 -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring/spring-*.xml</param-value>
            </init-param>
        </servlet>
        <!-- url模式 -->
        <servlet-mapping>
            <servlet-name>seckill-dispatcher</servlet-name>
            <!-- 默认匹配所有的请求 -->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
        <!-- 乱码过滤器 -->
        <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>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    
        <!-- druid -->
        <servlet>
            <servlet-name>DruidStatView</servlet-name>
            <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
            <init-param>
                <!-- 用户名 -->
                <param-name>loginUserName</param-name>
                <param-value>admin</param-value>
            </init-param>
            <init-param>
                <!-- 登录密码 -->
                <param-name>loginPassword</param-name>
                <param-value>123456</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>DruidStatView</servlet-name>
            <url-pattern>/druid/*</url-pattern>
        </servlet-mapping>
        <filter>
            <filter-name>DruidWebStatFilter</filter-name>
            <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
            <init-param>
                <param-name>exclusions</param-name>
                <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>DruidWebStatFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    </web-app>
    
    

    接下来就是测试啦!!

    (1)测试mybatis与spring是否整合好:

    编写我们自己的bean先

    public class Score {
    
        private Long id;
        //积分变化类型
        private String changeType;
        //创建时间
        private Date createTime;
        //积分变化数
        private Integer score;
        //爱豆变化者
        private User user;
    
      //省略无参构造器,全参构造器,以及一系列的getset
    }
    
    

    (2)然后就是编写接口嘛:

    public interface ScoreDao {
        //插入积分记录
        int insertScore(Score score);
    }
    

    (3)接着就写mapper。注意,这里不需要实现dao接口不用编写daoImpl, mybatis会给我们动态实现,但是我们需要编写相应的mapper。

    因为使用IDEA开发,本博主发现我们的mapper类只能建立在resources目录下,而不能建立在java的包下面。不然会映射不了。

    <?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.fuzhu.dao.ScoreDao">
        <insert id="insertScore" parameterType="com.fuzhu.entity.Score">
            INSERT  INTO score (change_type,score)
            VALUES (#{changeType},#{score})
        </insert>
    </mapper>
    

    (4)编写测试用例:然后直接Junit测试即可!!这就测试完dao层啦!!!

    @RunWith(SpringJUnit4ClassRunner.class) // 使用Springtest测试框架
    @ContextConfiguration("/spring/spring-*.xml") // 加载配置
    public class MyBatisTest {
        @Autowired
        private ScoreDao scoreDao;
    
        @Test
        public void testAddScore() {
            Score score = new Score();
            score.setChangeType("充钱钱");
            score.setScore(10);
            int insert = scoreDao.insertScore(score);
            System.out.print("insert :"+insert);
        }
    }
    

    (5)接着!我们要测试整个框架,也就是要用SpringMVC给展示出来嘛!先写个业务逻辑接口!

    public interface ScoreService {
    //插入积分记录
        public int insertScore(Score score);
    }
    
    

    编写接口实现类嘛。(注意IDEA的无故标红不用管,我们要可以先部署跑一下,被坑了,IDEA标志dao无法装配,实际上已经装配成功的,毕竟上一步测试已经测试成功。)

    @Service
    public class ScoreServiceImpl implements ScoreService{
        @Autowired
        private ScoreDao scoreDao;
    
        @Override
        public int insertScore(Score score) {
            int t =scoreDao.insertScore(score);
            return t;
        }
    }
    
    

    最后就写下controller给springmvc解析视图出来嘛。这样就整个框架测试成功啦!!!

    @RestController
    @RequestMapping("/test")
    public class TestController {
    
        private Logger logger = LoggerFactory.getLogger(this.getClass());
        @Autowired
        private ScoreService scoreService;
    
        @RequestMapping(value = "/testMethod",produces="text/html;charset=UTF-8", method = {RequestMethod.GET,RequestMethod.GET})
        public String test() {
            Score score = new Score();
            score.setChangeType("玩游戏");
            score.setScore(10);
            scoreService.insertScore(score);
            return JSON.toJSONString(score);
        }
    }
    
    

    二、Redis单机版以及测试

    (测试以查禁言表为例子)

    (1)MAVEN拉下redis的库

    (2)编写单机版redis配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!-- 本jedis的jar为2.7.0版本 -->
    
    
        <!-- jedisPool配置信息 -->
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="maxTotal" value="1000"/> <!-- 控制一个pool可分配多少个jedis实例 -->
            <property name="maxIdle" value="200" />   <!-- 控制一个pool最多有多少个状态为idle(空闲)的jedis实例 -->
            <property name="maxWaitMillis" value="2000" />  <!-- 表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException -->
            <property name="testOnBorrow" value="true" /> <!-- 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的 -->
        </bean>
    
        <!-- jedis客户端单机版配置 -->
        <bean id="jedisPool" class="redis.clients.jedis.JedisPool" scope="singleton">
            <constructor-arg name="poolConfig" ref="jedisPoolConfig" />
            <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
            <constructor-arg name="port" value="6379"></constructor-arg>
        </bean>
    
        <bean id="jedisClient" class="com.fuzhu.serviceImpl.JedisClientSingle" />
    
    </beans>
    

    (3)基本业务代码先:

    public interface GagDao {
        public int insertGag(Gag gag);
        List<Gag> findByUserId(Long id);
    }
    

    GagMapper

    <?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.fuzhu.dao.GagDao">
        <insert id="insertGag" parameterType="com.fuzhu.entity.Gag">
            INSERT INTO gag (gag_time,user_id)
            VALUES (#{gagTime},#{user.id})
        </insert>
        <select id="findByUserId" resultType="com.fuzhu.entity.Gag" parameterType="long">
            SELECT
                  *
            FROM
                  gag
            WHERE
                  user_id = #{id}
        </select>
    </mapper>
    

    业务的接口以及实现

    public interface GagService {
        public int insertGag(Gag gag);
        List<Gag> findByUserId(Long id);
    }
    
    @Override
        public List<Gag> findByUserId(Long id) {
            List<Gag> gagList=gagDao.findByUserId(id);
            return gagList;
        }
    

    (4)缓存的设计和调用:

    前言:禁言表这种东西可能会被经常查的,而已难变固定的,就把整个表缓存到redis中嘛。

    controller代码:

    //装配需要的东东先!!
    @Autowired
        private GagService gagService;
        @Autowired
        private JedisClient jedisClient;
    //再写个业务方法
    //基本思路:有没有查过禁言表,有查过就往redis拿,null的话就去数据库拿,拿完再把数据set进缓存!!
    @RequestMapping(value = "/testRedis",produces="text/html;charset=UTF-8", method = {RequestMethod.GET,RequestMethod.GET})
        public String testRedis(Long id){
            List<Gag> gagList= null;
            try {
                String resulthget = jedisClient.hget("禁言表", id + "");
                if (resulthget != null) {
                    //字符串转为list
                    System.out.println("有缓存啦啦啦!!!");
                    JSONArray array = JSONArray.parseArray(resulthget);
                    gagList = (List) array;
                } else {
                    System.out.println("禁言表没查过");
                    gagList= gagService.findByUserId(id);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                String cacheString = JsonUtils.objectToJson(gagList);
                jedisClient.hset("禁言表", id + "", cacheString);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return JSON.toJSONString(gagList);
        }
    

    然后??开启你的redis,部署工程。还没装redis??不会开启redis?点点这里

    这里写图片描述
    这里写图片描述

    到此就收工啦,redis植入成功!!yes!


    源码下载:J2EE项目系列(四)–SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)

    结语

    J2EE项目系列(四)–SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)(1)框架整合构建讲完了。
    本博客系列是我做项目时候需要整合的部分东西(分布式的往后补上),我把里面的整合,以及部分非算法性的业务逻辑写出来,分享经验给大家。欢迎在下面指出错误,共同学习!!你的点赞是对我最好的支持!!

    更多内容,可以访问JackFrost的博客

    展开全文
  • hbase、mongodb、redislucene、 solr研究

    千次阅读 2015-05-17 15:32:02
    HBase Pig 是在MapReduce上构建的查询语言(SQL-like),适用于大量并行...Hive 是DataWareHouse Map Reduce交集,适用于ETL方面的工作。 HBase 是一个面向列的分布式数据库。 Map Reduce 是Google提出的一种算

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 125
精华内容 50
热门标签
关键字:

lucene和redis

redis 订阅