[SoOnPerson] SSM框架的搭建(2)

上一篇说的是框架的搭建,现在我们往里加点从数据库取出来的数据,上一个连接[SoOnPerson] SSM框架的搭建(2)

文章很长,也有报错,然后改正,并不是一下出结果的。没耐心就别看了

使用的是mybatis

那就从头开始吧

1.建一个数据库吧

[SoOnPerson] SSM框架的搭建(2)


2.建表咯(有的地方偷懒了,都设成varchar了,注意主键自增)

[SoOnPerson] SSM框架的搭建(2)

数据库ok了,回到代码。


3.有兴趣的可以去研究一下Mybatis generator 但是在这里没有用

创建book实体

文件位置看package;

package com.soonperson.po;

/**
 * @Author:SoOnPerson
 * @Date:2018/3/27 14:22
 * @version:
 * @purpose:
 * @Description: book实体
 */
public class Book {
    private int id ;
    private String name ;
    private String type ;
    private String price ;
    
    public int getId() {
        return id;
    }
    
    public Book setId(int id) {
        this.id = id;
        return this;
    }
    
    public String getName() {
        return name;
    }
    
    public Book setName(String name) {
        this.name = name;
        return this;
    }
    
    public String getType() {
        return type;
    }
    
    public Book setType(String type) {
        this.type = type;
        return this;
    }
    
    public String getPrice() {
        return price;
    }
    
    public Book setPrice(String price) {
        this.price = price;
        return this;
    }
}

4.创建dao

package com.soonperson.dao;

/**
 * @Author:SoOnPerson
 * @Date:2018/3/27 14:29
 * @version:
 * @purpose:
 * @Description: 
 */
public interface BookMapper {
    
}

5.创建mapper

位置:src/main/resources/mapper/BookMapper.xml

<?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.soonperson.dao.BookMapper">

</mapper>

后面还是要加东西的。

6.创建service,有两个文件哦!

package com.soonperson.service;

import org.springframework.stereotype.Service;

/**
 * @Author:SoOnPerson
 * @Date:2018/3/27 14:35
 * @version:
 * @purpose:
 * @Description:
 */
@Service
public interface BookService {

}
package com.soonperson.service;

/**
 * @Author:SoOnPerson
 * @Date:2018/3/27 14:37
 * @version:
 * @purpose:
 * @Description:
 */
public class BookServiceImpl implements BookService{
    
}

7.看一下Controller  算了,再加一个吧

package com.soonperson.controller;

import com.soonperson.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


/**
 * @Author:SoOnPerson
 * @Date:2018/3/27 14:44
 * @version:
 * @purpose:
 * @Description:
 */
@Controller
public class BookController {
    @Autowired
    private BookService bookService;
    
    @RequestMapping(value = "/bookList.do")
    public ModelAndView ShowBooks(ModelAndView modelAndView){
        System.out.println("BookController!");
        return modelAndView;
    }
    
}

在用@Autowired的时候,应该会报错

[SoOnPerson] SSM框架的搭建(2)

改这里,加这个东西

[SoOnPerson] SSM框架的搭建(2)

8.再来建一个bookList.jsp显示一下子。

<%--
  User: SoOnPerson
  Date: 2018/3/27
  Time: 14:51
  Description:
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    this is bookList.jsp!
</body>
</html>

9.来测试一下。喔~,不对,去index.jsp文件加一个链接

[SoOnPerson] SSM框架的搭建(2)

10.okok,来试试

[SoOnPerson] SSM框架的搭建(2)

点点点,第二个连接。。。bookList写错了,见谅。

[SoOnPerson] SSM框架的搭建(2)

进来了,okok。没有报错呢!


继续继续更新!


找到上面的BookMapper.xml文件,往里加一个查询语句。


[SoOnPerson] SSM框架的搭建(2)

请记住一号的值!!!!

现在去找BookMapper.java文件,在dao包里面


[SoOnPerson] SSM框架的搭建(2)

函数名就是刚刚的id,返回类型就是一个book的集合

然后去service里面找到不带impl后缀的bookservice

[SoOnPerson] SSM框架的搭建(2)

这个函数名应该没关系的,不过我一般都一样了。

再去找bookserviceimpl

是不是现在报错呢?

按快捷键:alt+insert

记得光标在函数里面闪烁

[SoOnPerson] SSM框架的搭建(2)

这个然后选上要实现的接口ok

新建一个类去管理事务

package com.soonperson.tool;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybaitsGenerator {
    public static SqlSessionFactory sqlSessionFactory;

    static {
        InputStream inputStream = null;
        try{
            inputStream = Resources.getResourceAsStream("orm/mybatis.xml");
        }catch (IOException e){
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }


    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }

    public static SqlSession getSession(boolean autoCommit){
        return sqlSessionFactory.openSession(autoCommit);
    }

    public static <T> T getMapper(Class<T> var) { //获取mapper
        return getSession(true).getMapper(var);
    }
}

[SoOnPerson] SSM框架的搭建(2)


回到bookserviceimpl

package com.soonperson.service;

import com.soonperson.dao.BookMapper;
import com.soonperson.po.Book;
import com.soonperson.tool.MybaitsGenerator;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
 * @Author:SoOnPerson
 * @Date:2018/3/27 14:37
 * @version:
 * @purpose:
 * @Description:
 */
public class BookServiceImpl implements BookService{
    public List<Book> getAllBookInfo() {
        /**
         * @Author:SoOnPerson
         * @param 
         * @Date:2018/3/29
         * @Time:15:56
         * @Description:获取所有图书信息
         * @return:java.util.List<com.soonperson.po.Book>
         *
         */
        SqlSession sqlSession = MybaitsGenerator.getSession(false);
        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
        
        List<Book> bookList = bookMapper.getAllBookInfo();
        
        sqlSession.close();
        return bookList;
    }
}

到controller里面调用这个就可以了。

去bookcontroller

package com.soonperson.controller;

import com.soonperson.po.Book;
import com.soonperson.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;


/**
 * @Author:SoOnPerson
 * @Date:2018/3/27 14:44
 * @version:
 * @purpose:
 * @Description:
 */
@Controller
public class BookController {
    @Autowired
    private BookService bookService;
    
    @RequestMapping(value = "/bookList.do")
    public ModelAndView ShowBooks(ModelAndView modelAndView){
        /**
         * @Author:SoOnPerson
         * @param modelAndView
         * @Date:2018/3/29
         * @Time:16:00
         * @Description:获取所有图书信息给bookList.jsp
         * @return:org.springframework.web.servlet.ModelAndView
         *
         */
        System.out.println("BookController!");
        //获取出来所有的图书信息
        List<Book> bookList = bookService.getAllBookInfo();
        //传递给前端
        modelAndView.addObject("AllBookInfo",bookList);
        return modelAndView;
    }
    
}

去到bookList.jsp里面去展示这些信息呀!

用的是jstl 需要在最上面加上

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

然后使用标签库,最后是这样的

<%--
  User: SoOnPerson
  Date: 2018/3/27
  Time: 14:51
  Description:
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    this is bookList.jsp!
    <table border="1">
        <c:forEach items="${requestScope.AllBookInfo}" var="book">
            <tr>
                <td>${book.bookName}</td>
                <td>${book.bookType}</td>
                <td>${book.bookPrice}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

我们运行一下试试。

[SoOnPerson] SSM框架的搭建(2)

emmmmmm报错了,看不懂

看一下root cause 说的是错误 建立 sqlsession

这个错误可能存在在mapper/userMapper.xml.,错误解析mapper 配置,不能找到usermapper.xml

好像没有用到这个xml啊。可能复制代码的时候错了,哈哈

那我们去看看呗

[SoOnPerson] SSM框架的搭建(2)

这个地方的UserMapper.xml换成BookMapper.xml,尴尬

再来运行一次。

emmmmm,又报错了,解决啊

[SoOnPerson] SSM框架的搭建(2)

错误好像是成功发送一个数据给数据库,但是没返回啊,我们看看数据库,发现打不开,emmmm,好像没开服务啊

[SoOnPerson] SSM框架的搭建(2)

启动mysql服务

再来试一次

[SoOnPerson] SSM框架的搭建(2)

不错不错,进来了,没报错,但是怎么没东西呢

emmmmm数据库好像没数据啊

随便加几条数据,加的时候不要给id,因为是自增的

[SoOnPerson] SSM框架的搭建(2)

emmmm,再次运行结果还是和上面一样,看一下控制台

[SoOnPerson] SSM框架的搭建(2)

已经查询出来了,但是前提没有展示,看一下jsp

Book类中的变量名字和jsp中的不对应,还是复制错了,改一下book.后面的东西

[SoOnPerson] SSM框架的搭建(2)

运行还是有问题,思考一下,是不是因为映射的时候错了。

在controller里打印一下试试

[SoOnPerson] SSM框架的搭建(2)

也有获取到数据。。emmmmmm那就是jstl表达式问题了吧,百度一下

<%@ page isELIgnored="false" %>

我的要加这个东西,但是原来那个项目没有要加,这个的意思是是否忽略el表达式,如果是true就会显示标签不显示值,可能我的事默认为true了吧。

<%--
  User: SoOnPerson
  Date: 2018/3/27
  Time: 14:51
  Description:
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    this is bookList.jsp!
    <table border="1">
        <tr>
            <td>书名</td>
            <td>类型</td>
            <td>价格</td>
        </tr>
        <c:forEach items="${requestScope.list}" var="book" >
            <tr>
                <td>${book.name}</td>
                <td>${book.type}</td>
                <td>${book.price}</td>
            </tr>
        </c:forEach>
    </table>

</body>
</html>

结果如下

[SoOnPerson] SSM框架的搭建(2)

over,还会有后续开发的,,有什么想要的功能也可以和我说的,我看着学习一下