简单的ssh(spring+springmvc+hibernate)整合

题目:

SSH基本CRUD练习:
图书管理
图书列表 -> 某本图书详情
图书删除
图书新建
图书属性:书名 作者 出版社 出版年份 简介 类别

完成方法:采用注解+纯java的配置 数据库:H2

一.导入包
h2数据库包+hibernate包+spring包+springmvc+日志包+整合包+bootstrap(前端框架)包

二.配置web.xml

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
<!--        用哪种容器类 -->
        <param-name>contextClass</param-name>
        <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </init-param>
    <init-param>
<!--        入口配置 -->
        <param-name>contextConfigLocation</param-name>
        <!-- 纯java配置,加载替代spring.xml的类  会自动获取-->
        <param-value>config.AppConfig</param-value>
        <!-- <param-value>lianxi.text.AppConfig</param-value> -->
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dispatcherServlet</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>

三.搭建包
这里写图片描述

四.配置的java类AppConfig详解:
1.该类相当于spring.xml的配置:
2.注释详解:

@Configuration  //==Beans
@ComponentScan("lianxi")  //扫描注解 @Component
@PropertySource("classpath:db.properties")//引入外部文件,数据库驱动等的配置
@EnableTransactionManagement  //开启spring事务管理
@EnableWebMvc     //加载静态资源
//继承WebMvcConfigurerAdapter才能调用静态资源
public class AppConfig extends WebMvcConfigurerAdapter{
    //配置连接SessionFactory
    @Bean
    public LocalSessionFactoryBean sessionfactory(DataSource dataSource){
        LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
        factory.setDataSource(dataSource);
        //自动扫描注册user,数据库自动建表
        factory.setPackagesToScan("lianxi.domian");
        return factory;
    }

    //配置数据源
    @Bean                       // 依赖Environment
    public DataSource dataSource(Environment env) {
        DriverManagerDataSource ds = new DriverManagerDataSource();
        // env.getProperty("someKey") 获得属性值
        ds.setDriverClassName(env.getProperty("jdbc.driverClassName"));
        ds.setUrl(env.getProperty("jdbc.url"));
        ds.setUsername(env.getProperty("jdbc.username"));
        ds.setPassword(env.getProperty("jdbc.password"));
        return ds;
    }

    //事务管理器 事务加在service层,@Transactional注解
    @Bean
    public PlatformTransactionManager ma(SessionFactory sessionfactory){
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionfactory);
        return transactionManager;
    }
    //视图解析器
    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver view = new InternalResourceViewResolver();
        view.setViewClass(JstlView.class);
        view.setPrefix("/WEB-INF/jsp/");
        view.setSuffix(".jsp");
        return view;
    }

    //加载静态资源的配置  css和js
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // /assets/css/app.css -> /WebContent/public/css/app.css
        // /assets/js/app.js -> /WebContent/public/js/app.js
        // /WebContent/public/
        registry.addResourceHandler("/assets/**").addResourceLocations("/public/");
    }
}

五.控制类的详解:


@Controller
public class BookServlet {
    @Autowired //自动注入
    private BookService bookservice;

    //日期转换
    @InitBinder
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
        binder.registerCustomEditor(Date.class, 
                new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
    }

    @RequestMapping(method = RequestMethod.POST,value="/addbook")
    public String addBook(Book book){
        bookservice.addBook(book);
        return "success";
    }

    @RequestMapping(value="/findbooks")
    public String findBooks(Model model){
        List<Book> queryBook = bookservice.queryBook();
        for(Book book:queryBook){
            System.out.println(book);
        }
        model.addAttribute("allbooks", queryBook);
        return "showbook";
    }

    @RequestMapping(value="/findbookbyname")
    public String findBookByName(Model model,@RequestParam("name") String bookname){
        System.out.println("bookname"+bookname);
        Book queryBook = bookservice.queryByName(bookname);
        System.out.println(queryBook);
        model.addAttribute("queryBook", queryBook);
        return "bookdetails";
    }
}

六.bootstrap 前端框架的简单应用:
1.下载:http://www.bootcss.com/
2.拷贝到项目中:
这里写图片描述
3.引用它的form和css.
配置类AppConfig的配置:
(1)@EnableWebMvc //加载静态资源
(2)//继承WebMvcConfigurerAdapter
public class AppConfig extends WebMvcConfigurerAdapter{}
(3)

//加载静态资源的配置  css和js
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // /assets/css/app.css -> /WebContent/public/css/app.css
        // /assets/js/app.js -> /WebContent/public/js/app.js
        // /WebContent/public/
        registry.addResourceHandler("/assets/**").addResourceLocations("/public/");
    }

(4)jsp页面中配置:
引用项目下导入的bootstrap文件的css

<link rel="stylesheet"
    href="${contextPath}/assets/bootstrap/css/bootstrap.css">

form前端的代码:https://v3.bootcss.com/css/#forms

<form action="${pageContext.request.contextPath}/addbook" method="post">
            <div class="form-group">
                <label for="author">作者:</label> <input
                    type="text" class="author" id="author"
                    placeholder="author" name="author">
            </div>
            <div class="form-group">
                <label for="bookname">书名:</label> <input
                    type="text" class="form-control" id="bookname"
                    placeholder="bookname" name="bookname">
            </div>
            <div class="form-group">
                <label for="chubanshe">出版社:</label> <input
                    type="text" class="form-control" id="chubanshe"
                    placeholder="chubanshe" name="chubanshe">
            </div>
            <div class="form-group">
                <label for="chubandate">出版时间:</label> <input
                    type="text" class="form-control" id="chubandate"
                    placeholder="chubandate" name="chubandate">
            </div>
            <div class="form-group">
                <label for="info">简介:</label> <input
                    type="text" class="form-control" id="info"
                    placeholder="info" name="info">
            </div>
            <div class="form-group">
                <label for="booktype"> 类别:</label> <input
                    type="text" class="form-control" id="booktype"
                    placeholder="booktype" name="booktype">
            </div>
            <button type="submit" class="btn btn-default">提交</button>
        </form>

七.总结:
1.web.xml 很容易配错:当换成另一个注解类时,要修改web.xml的入口配置

<init-param>
<!--        入口配置 -->
        <param-name>contextConfigLocation</param-name>
        <!-- 纯java配置,加载替代spring.xml的类  会自动获取-->
        <param-value>config.AppConfig</param-value>
        <!-- <param-value>lianxi.text.AppConfig</param-value> -->
    </init-param>

2.实体类自动扫描创建表:factory.setPackagesToScan(“lianxi.domian”);容易忘记写

@Bean
    public LocalSessionFactoryBean sessionfactory(DataSource dataSource){
        LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
        factory.setDataSource(dataSource);
        //自动扫描注册user,数据库自动建表
        factory.setPackagesToScan("lianxi.domian");
        return factory;
    }

3.数据库的方言和自动创建表配置文件(src目录下):

hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.hbm2ddl.auto=create

4.进入h2数据库:cmd 包所在目录 -java -jar h2-1.4.190.jar (选择server)

5.清晰思路,mvc各层之间的调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值