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

来源:互联网 发布:linux ping 显示丢包 编辑:程序博客网 时间:2024/05/20 10:12

题目:

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/");    }}

五.控制类的详解:

@Controllerpublic 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.H2Dialecthibernate.hbm2ddl.auto=create

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

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

阅读全文
0 0
原创粉丝点击