最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

全球今日讯!day01-项目介绍+SSM环境搭建

来源:博客园

项目介绍+SSM环境搭建

1.项目功能/界面

  • SSM整合项目界面:使用Vue完成
  • 技术栈:前后端分离开发,前端框架Vue3+后端框架SSM
    1. 前端框架-Vue3
    2. 后端框架-SSM(SpringMVC+Spring+MyBatis)
    3. 数据库-MySQL
    4. 项目依赖管理-Maven
    5. 分页-pagehelper
    6. 逆向工程-MyBatis Generator
    7. 其他...

2.项目基础环境搭建

2.1创建项目

(1)创建maven项目(注意配置maven的仓库镜像,不然创建的时候会很慢),File--New--Project--Maven

(2)手动创建java和test相关目录


【资料图】

(3)pom.xml文件中引入项目基本的jar包

      UTF-8    1.8    1.8              junit      junit      4.11      test                  org.springframework      spring-webmvc      5.3.8                  org.springframework      spring-jdbc      5.3.8                  org.springframework      spring-aspects      5.3.8                  org.mybatis      mybatis      3.5.7                  com.alibaba      druid      1.2.6                  mysql      mysql-connector-java      5.1.49      

(4)给项目配置Tomcat

(5)启动tomcat,测试成功

2.2项目全局配置web.xml

    Archetype Created Web Application                contextConfigLocation                classpath:applictionContext.xml                    org.springframework.web.context.ContextLoaderListener                    springDispatcherServlet        org.springframework.web.servlet.DispatcherServlet                        1                springDispatcherServlet        /                    characterEncodingFilter        org.springframework.web.filter.CharacterEncodingFilter                    encoding            utf-8                                        forceRequestEncoding            true                                        forceResponseEncoding            true                        characterEncodingFilter        /*                    hiddenHttpMethodFilter        org.springframework.web.filter.HiddenHttpMethodFilter                hiddenHttpMethodFilter        /*    

如果web.xml的报红,选择只是高亮syntax即可,本身是没有问题的,只是DTD本身的约束

2.3SpringMVC配置

WEB-INF 目录下创建SpringMVC的配置文件 springDispatcherServlet-servlet.xml

文件的命名要根据上面web.xml的配置

                                                                                            

2.4配置Spring和MyBatis,并完成整合

(1)在resource目录下创建jdbc.properties,配置连接mysql的信息

# The key value is arbitraryjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/furn_ssm?useSSL=true&useUnicode=true&characterEncoding=UTF-8jdbc.user=rootjdbc.pwd=123456

(2)在pom.xml文件引入mybatis整合spring的适配包

  org.mybatis  mybatis-spring  2.0.6

(3)在resource目录下创建 Spring 的配置文件 applicationContext.xml

右键-->New-->XML Configuration-->Spring Config

                                                                                                                                                                                                                                                                                                                                        

(4)在resource目录下创建mapper目录,存放xxxMapper.xml文件

(5)在resource目录下创建mybatis的配置文件 mybatis-config.xml(原因和上面一致,因为在spring配置文件中指定了路径)

    

2.5创建表,使用逆向工程生成Bean、XxMapper和XxMapper.xml

(1)创建数据库和表

-- 创建数据库CREATE DATABASE furn_ssm;USE furn_ssm;-- 创建家居表CREATE TABLE furn(`id` INT(11) PRIMARY KEY AUTO_INCREMENT, #id`name` VARCHAR(64) NOT NULL, #家居名`maker` VARCHAR(64) NOT NULL, #厂商`price` DECIMAL(11,2) NOT NULL, #价格`sales` INT(11) NOT NULL, #销量`stock` INT(11) NOT NULL, #库存`img_path` VARCHAR(256) NOT NULL #照片路径);-- 初始化家居数据INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`) VALUES(NULL , "北欧风格小桌子" , "熊猫家居" , 180 , 666 , 7 , "assets/images/product-image/6.jpg");INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`) VALUES(NULL , "简约风格小椅子" , "熊猫家居" , 180 , 666 , 7 , "assets/images/product-image/4.jpg");INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`) VALUES(NULL , "典雅风格小台灯" , "蚂蚁家居" , 180 , 666 , 7 , "assets/images/product-image/14.jpg");INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`) VALUES(NULL , "温馨风格盆景架" , "蚂蚁家居" , 180 , 666 , 7 , "assets/images/product-image/16.jpg");SELECT * FROM furn;

(2)使用MyBatis Generator 逆向生成bean mapper接口和mapper.xml

如果逆向工程生成的代码不能满足需求,再自己编写

2.1)修改Mybatis-config.xml,增加typeAliases别名配置,配置日志输出

                                            

2.2)在pom.xml引入MyBatis Generator包

  org.mybatis.generator  mybatis-generator-core  1.4.0

2.3)在项目目录下创建mbg.xml(mybatis generator),并参考文档进行配置

文档和模板:MyBatis Generator Core – MyBatis Generator XML Configuration File Reference

                                                                                                                                                                                                                                    

2.4)在test目录下创建一个MBGTest.java,该文件可以生成相关bean、mapper接口和mapper.xml

文件模板:MyBatis Generator Core – Running MyBatis Generator With Java

package com.li.furn.test;import org.junit.Test;import org.mybatis.generator.api.MyBatisGenerator;import org.mybatis.generator.config.Configuration;import org.mybatis.generator.config.xml.ConfigurationParser;import org.mybatis.generator.internal.DefaultShellCallback;import java.io.File;import java.util.ArrayList;import java.util.List;/** * @author 李 * @version 1.0 */public class MBGTest {    @Test    public void generator() throws Exception {        List warnings = new ArrayList();        boolean overwrite = true;        //这里根据自己的情况指定配置的 mbg.xml文件        //如果下面这样访问,需要将文件放在项目目录下        File configFile = new File("mbg.xml");        ConfigurationParser cp = new ConfigurationParser(warnings);        Configuration config = cp.parseConfiguration(configFile);        DefaultShellCallback callback = new DefaultShellCallback(overwrite);        MyBatisGenerator myBatisGenerator =             new MyBatisGenerator(config, callback, warnings);        myBatisGenerator.generate(null);    }}

运行上述方法后,可以看到成功生成了指定的文件:这样我们就可以直接使用逆向工程成功的方法操作数据库,而不必在接口和映射文件来回编写代码。

(3)使用Junit测试Spring和MyBatis是否整合成功,能否通过MyBatis添加furn到数据库

3.1)修改bean:Furn.java,分别添加全参和无参构造器(略)

3.2)在test目录下增加测试文件,测试逆向工程生成的方法是否可用。

@Testpublic void insertSelective() {    //初始化spring容器    ApplicationContext ioc =            new ClassPathXmlApplicationContext("applicationContext.xml");    //获取到 FurnMapper的代理对象(类型=class com.sun.proxy.$Proxy17)    FurnMapper furnMapper = ioc.getBean(FurnMapper.class);    //添加数据    Furn furn = new Furn(null, "小电灯", "一等家居",            new BigDecimal(66), 123, 45,            "/assets/images/product-image/1.jpg");    int affected = furnMapper.insertSelective(furn);    System.out.println("操作影响行数=" + affected + ",操作成功!");}

测试成功:

2.6注意事项和细节说明

关于逆向生成的方法中,insertSelective() 和 insert() 方法的区别:

  1. insertSelective-选择性保存数据

比如User中有三个字段:id,name,age,但是在插入数据时只设置了name字段:

User u = new User();u.setName("张三")insertSelective(u);

它在底层发出的sql语句为:insert into db_user (id,name) value (null,"张三");,也就是说生成的sql的字段是有选择性的,会根据你设置的值来生成(ps:这里的id是自增长的)

  1. insert 则是无论设置多少个字段,统一都要添加一遍,即使是一个。如:
User u = new User();u.setName("张三")insert(u);

底层生成的sql语句为:insert into db_user (id,name,age) value (null,"张三",null,null)

因此在使用insert方法时要注意,如果表的字段不允许为null,调用方法时又没有设置值,就会出错。通常情况下推荐使用 insertSelective() 方法。

关键词: 逆向工程 配置文件 测试成功