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

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

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

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


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

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

(1)maven对应资源:


  4.0.0
  com.fuzhu
  SSM
  war
  1.0-SNAPSHOT
  SSM Maven Webapp
  http://maven.apache.org
  
    UTF-8
    5.1.37
    4.1.7.RELEASE

  
  

    
    
      junit
      junit
      4.11
    

    
    
    
      ch.qos.logback
      logback-classic
      1.1.1
    

    
    
      mysql
      mysql-connector-java
      ${mysql.version}
      runtime
    

    
    
      com.alibaba
      druid
      1.0.0
    

    
    
      org.mybatis
      mybatis
      3.3.0
    
    
      org.mybatis
      mybatis-spring
      1.2.3
    

    
    
      taglibs
      standard
      1.1.2
    
    
      jstl
      jstl
      1.2
    
    
      com.fasterxml.jackson.core
      jackson-databind
      2.5.4
    
    
      javax.servlet
      javax.servlet-api
      3.1.0
    

    
    
    
      org.springframework
      spring-core
      ${spring.version}
    
    
      org.springframework
      spring-beans
      ${spring.version}
    
    
      org.springframework
      spring-context
      ${spring.version}
    
    
    
      org.springframework
      spring-jdbc
      ${spring.version}
    
    
      org.springframework
      spring-tx
      ${spring.version}
    
    
    
      org.springframework
      spring-web
      ${spring.version}
    
    
      org.springframework
      spring-webmvc
      ${spring.version}
    
    
    
      org.springframework
      spring-test
      ${spring.version}
    

    
    
      redis.clients
      jedis
      2.7.3
    


    
    
      commons-collections
      commons-collections
      3.2
    

    
    
      com.alibaba
      fastjson
      1.2.5
    

  
  
    SSM
  


(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


    
    
    

    
    
    
    
    
        
        
        
        

        
        
        
        

        
        

        
        

        
        

        

        
        
        

        
        
        

        
        

        
        
    

    
    
        
        
        
        
        
        
        
        
    

    
    
        
        
        
        
    


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

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




    
    
        
        

        
        

        
        
    

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

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



    
    

    
    
        
        
    

    
    

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

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

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

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

4.扫描web层 @Controller



    
    
    
    

    
    

    
    
        
        
        
    

    
    

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

J2EE项目系列(四)--SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)(1)框架整合构建_第1张图片
这里写图片描述

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

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




    Archetype Created Web Application
    
    
    
    
        seckill-dispatcher
        org.springframework.web.servlet.DispatcherServlet
        
        
        
            contextConfigLocation
            classpath:spring/spring-*.xml
        
    
    
    
        seckill-dispatcher
        
        /
    

    
    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
        CharacterEncodingFilter
        /*
    


    
    
        DruidStatView
        com.alibaba.druid.support.http.StatViewServlet
        
            
            loginUserName
            admin
        
        
            
            loginPassword
            123456
        
    
    
        DruidStatView
        /druid/*
    
    
        DruidWebStatFilter
        com.alibaba.druid.support.http.WebStatFilter
        
            exclusions
            *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
        
    
    
        DruidWebStatFilter
        /*
    



接下来就是测试啦!!

(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的包下面。不然会映射不了。




    
        INSERT  INTO score (change_type,score)
        VALUES (#{changeType},#{score})
    

(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配置



    


    
    
         
           
          
         
    

    
    
        
        
        
    

    


(3)基本业务代码先:

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

GagMapper




    
        INSERT INTO gag (gag_time,user_id)
        VALUES (#{gagTime},#{user.id})
    
    

业务的接口以及实现

public interface GagService {
    public int insertGag(Gag gag);
    List findByUserId(Long id);
}
@Override
    public List findByUserId(Long id) {
        List 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 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?点点这里

J2EE项目系列(四)--SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)(1)框架整合构建_第2张图片
这里写图片描述

J2EE项目系列(四)--SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)(1)框架整合构建_第3张图片
这里写图片描述

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


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

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

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

你可能感兴趣的:(J2EE项目系列(四)--SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)(1)框架整合构建)