[实习记录]搭建简易SSM

//Markdown version
实习的时候第一次接触java Spring,mentor要求写一个基于SSM框架的数据库整理系统,感觉google上一些教程对新手不太友好,搭建过程中也出现很多问题,这里整理了一个搭建笔记,希望能帮到其他Spring新手。
(由于作者也是初学者,对spring没有深层次的理解,暂时只能给出解决问题的方法,可能无法解释出现问题的原因,见谅)。

一个建议:
如果真的是像我一样的新手,可以不要太在意每一步实现的意义,照着做就可以了,后来改程序改多了自然会有感觉。

搭建目标:
搭建一个简单的基于SSM的系统,实现数据库的增删改查操作。

数据库:H2(使用mysql只需改数据库部分配置)

构建工具:gradle(maven只需要根据格式改dependency部分)

开发环境:idea

1 使用idea创建新工程,选择gradle,springMVC。

文件目录结构:

/src/main/java/com.yourpackage/dao(生成mapper文件在这里)

/src/main/java/com.yourpackage/model(生成数据模型在这里)

/src/main/java/com.yourpackage/service(调用的服务接口)

/src/main/java/com.yourpackage/sevice/impl(服务接口的实现)

/src/main/resources/mapper(mapper对应sql的xml文件在这里)

resources中还有application.yml(也可以是.properties文件)、mybatis-config.xml和schema.sql(数据库初始化建库)和data.sql(数据库初始化操作如insert)

springboot的application.java在com.yourpackage中。

2 mybatis-config配置

可以直接使用mybatis插件,在file-settings-plugins中可以找到free mybatis plugin,它真的是免费的。安装完成后可以和其他文件一样右键new生成。

需要填的部分:

classpathentry location:是你的数据库jar包地址,一般在home/.gradle/caches/modules-2/files-2.1里可以找到。

jdbcconnection:
driverclass:

  • H2:org.h2.driver
  • mysql:com.mysql.jdbc.Driver

url:

  • H2:jdbc:h2:file:~/Desktop/yourdatabasename
    这里表示我把数据库文件存储在桌面上.
  • mysql:jdbc:mysql://localhost:3306/yourdatabasename
    userID和password就不用说了。

javaModelGenerator
targetPackage="com.yourpackage.model" ,数据模型地址

sqlMapGenerator targetPackage="mapper",sql语句xml地址

javaClientGenerator
targetPackage="com.yourpackage.dao",mapper文件地址

table tableName="yourtablename",配置你的数据表,后面的选项可以根据需要配置。

配置mybatis-config文件主要为了让我们可以用插件直接生成对应文件,实现一些常用功能,而不需要我们自己来写。对配置文件右键可以找到run选项,即可生成需要的文件,其中包括dao、model和mapper几个文件夹中的文件。我们可以看到基本的insert和select已经在mapper和dao中写好了。

3 application.yml配置文件

搭建一个简单框架需要的部分

mybatis:

  mapper-locations: classpath:mapper/*.xml

  type-aliases-package: com.yourpackage.dao #重要,否则程序会找不到dao文件地址

spring:

  h2:

    console:

    enabled: true #使用H2数据库需要添加,mysql则不需

    path: /h2-console #localhost:8080/h2-console,打开H2数据库交互界面地址

datasource:

    driver-class-name: org.h2.Driver

url: jdbc:h2:file:~/Desktop/yourdatabasename;MODE=MYSQL;

    username: sa

    password: sa #sa是H2常用用户和密码

如果mysql数据库只需要改datasource部分。

4 一份该程序中的gradle配置

buildscript {

ext {

springBootVersion ='1.4.2.RELEASE'

    }

repositories {

mavenCentral()

}

dependencies {

classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

}

}

applyplugin:'java'

applyplugin:'org.springframework.boot'

jar {

baseName ='demo'

    version ='0.0.1-SNAPSHOT'

}

sourceCompatibility =1.8

targetCompatibility =1.8

repositories {

mavenCentral()

}

dependencies {

compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.1.1')

compile('org.springframework.boot:spring-boot-starter-thymeleaf')

compile('com.alibaba:druid:1.0.26')

compile('mysql:mysql-connector-java:5.1.40')

runtime('com.h2database:h2')

testCompile('org.springframework.boot:spring-boot-starter-test')

    }

}

gradle基本缺哪个包就加哪个包就好了,https://mvnrepository.com/可以找到需要的包,部分包下面可能会说明要从那个地址引用,记得在repository中加上就好了。

5 如何使用mybatis提供的数据库操作

mybatis-plugin一般会提供insert和selectbyprimarykey等方法,我们可以在service接口类中声明这个方法,在impl中具体实现。

如在insert方法,我们在某个接口Service中可以这样写:

public interface EmployeeService {

void addEmployee(String employeename,String age,String salary);

}

然后在impl中implements实现:

@Service

public class EmployeeServiceImpl implements EmployeeService {

@Autowired

    EmployeeMapper employeeMapper;

@Override

    public void addEmployee(String employeename,String age,String salary) {

Employee employee=new Employee();

employee.setEmployeename(employeename);

......

employMapper.insert(employee);

}

然后我们在需要调用时直接注入一个service类,从service调用写好的方法。

这里只要看清楚xml文件中各个sql操作的参数和返回值就可以了。如果是findAll方法得到所有符合条件的结果可以使用List作返回。

使用spring时,只要在需要注入的类前标注@Service,而在使用之前用@Autowired直接注入,就不需要用new来实例化。如果在使用类时要一层一层嵌套地使用,一个类调用另一个类,就需要中间的部分全部使用注入而不能有手动new的对象,否则会报错。

6 将springboot的启动类application和需要执行的操作分来

这里我单独建了一个runnerable类来运行所有需要的任务,需要运行的任务只要在类之前加上@Component就可以了,如果要决定执行顺序还可以再加上@Order(value = 1)

7 其他问题

  • mybatis-config run出现问题可能是classpathentry的jar包不对,可以试着换一个地址。

  • 主程序出现问题可以使用bootrun来查看报错信息。

  • 出现找不到dao文件可以看看各个配置文件中dao文件夹的地址是否正确,或者yml文件中是否有加dao地址。

  • 可以使用dataAccessException来捕获sql部分异常。

  • 经常会碰发already use情况,不要慌,看一下有没有其他连接数据库的程序没有关闭,或者如果8080占用可以lsof然后kill掉,实在不行重启大法好。

如果出现问题可以联系我,但是同样作为初心者并不一定能解决。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容