【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建

【前言】

本文需要参考前文:【从无到有】IDEA + maven + java web + springMVC + Tomcat 项目搭建

本文主要以 JAVA 代码配置 springMVC,用 xml 配置 MyBatis

本文适用读者:了解 java web 相关知识,了解 ajax 的使用,对 spring 的相关注解,如 @Configuration、@Controller、@Service、@Autowired、@RequestMapping 有过使用经验,了解 SQL 语句。熟读前文:【从无到有】IDEA + maven + java web + springMVC + Tomcat 项目搭建

本文对Tomcat只字未提,有关内容请参考前文:【从无到有】IDEA + maven + java web + springMVC + Tomcat 项目搭建。

【本文参考文章】

以下文章顺序不分先后。

Idea SpringMVC+Spring+MyBatis+Maven+Tomcat调整

Mybatis和JDBC区别

Mybatis 报错`Parameter '0' not found. Available parameters are [arg1, arg0, param1, param2]`

MySql驱动8.0.11版本的一些使用注意事项

[Spring]Cannot enhance @Configuration bean definition....

@Bean 的用法

【本文涉及软件】

1、Windows 操作系统

2、IntelliJ IDEA 

3、JDK(Java Development Kit)

4、Tomcat

5、MySQL

【IDEA 版本】

IntelliJ IDEA 2019.1.2 (Ultimate Edition)
Build #IU-191.7141.44, built on May 7, 2019
Licensed to ssc

JRE: 1.8.0_202-release-1483-b49 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第1张图片

【JDK 版本】

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第2张图片

【MySQL 版本】

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第3张图片

【目录】

一、名词解释

二、下载安装配置 MySQL

三、正文

1、数据库、依赖

2、构建目录结构

3、配置 spring、mybatis

4、构建实体类、Mapper、MySQL

5、使用构建的 Mapper

6、前端部分

四、测试

【名词解释】

MySQL:是一个关系型数据库管理系统。

JDBC:是 Java 提供的一个操作数据库的 API。

MyBatis:是一个支持普通SQL查询存储过程 高级映射 的优秀持久层框架。MyBatis 是对 JDBC 的封装。

【下载安装配置 MySQL】

软件下载安装过程请自行学习,此处仅说明:

0、数据库登录名为 root,数据库密码为 admin。

1、我们有一个叫 example 的数据库。

2、该数据库里面有一个叫 user 的表。

3、该表有两个字段,loginName 和 password,类型都是 varchar。

4、该表中有两条数据,第一条 loginName 是 example,password 是 123;第二条 loginName 是 test,password 是 admin。

【正文】

〇、搭建项目

1、本文按前文介绍构建一个 java web 项目,采用 java 代码方式配置 springMVC,文件目录结构参考前文。

一、数据库、依赖

2、构建数据库,信息详看上一部分。

3、在 pom 文件中添加依赖,在 标签中增加  标签。

jackson 相关依赖是方便前端后台数据交互,

mysql:mysql-connector-java 相关依赖是 JDBC 核心,

mybatis 相关依赖是跟 Mapper.xml 有关,

mybatis spring 相关依赖是跟在 spring 中配置 mybatis 有关,

c3p0 相关依赖是跟数据池有关。

(具体干嘛用的请自行学习)具体代码如下:

        
        
          com.fasterxml.jackson.core
          jackson-core
          2.9.8
        
        
          com.fasterxml.jackson.core
          jackson-annotations
          2.9.8
        
        
          com.fasterxml.jackson.core
          jackson-databind
          2.9.8
        
        
        
            mysql
            mysql-connector-java
            8.0.16
        
        
        
            org.mybatis
            mybatis
            3.5.1
        
        
        
            org.mybatis
            mybatis-spring
            2.0.1
        
        
        
            com.mchange
            c3p0
            0.9.5.4
        

4、在 resources 文件夹中新建文件夹 config,然后在 config 文件夹中新建文件 db.properties,该文件中写如下代码。

jdbc.driver = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
jdbc.username = root
jdbc.password = admin

说明:1)driver:由于 pom 文件中引入的 mysql-connector-java 版本为 8.x ,所以 driver 需要是 com.mysql.cj.jdbc.Driver 而不是 com.mysql.jdbc.Driver,该类下存在和数据库交互的方法。

2)url:localhost 表示访问本地数据库,3306 表示数据库的接口(在安装 MySQL 时可以设置,默认就是3306),example 是数据库的名字,?后面的参数是为了防止后期报错。

3)username 和 password 就是登录数据库的用户名和密码。

4)等号左边的内容不是固定的,只是习惯上大家都这么写,后续读取配置文件会用到。

二、构建目录结构

5、在 java/cn/example 下新建 package “pojo” 、 “mapper” 、 “interfaces” 、 “impl”,后续我们都会用到。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第4张图片

6、在 resources 文件夹中新建文件夹 “mapper”。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第5张图片

三、配置 spring、mybatis

7、在 cn/example/config 中新建一个类 DatabaseProperties.java,代码如下,此处注解 @Value 里面的值与第 4 步的值对应。

package cn.example.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@PropertySource(value = {"classpath:config/db.properties"})
public class DatabaseProperties {
    @Value(value = "${jdbc.driver}")
    private  String driver;
    @Value(value = "${jdbc.url}")
    private  String url;
    @Value(value = "${jdbc.username}")
    private  String username;
    @Value(value = "${jdbc.password}")
    private  String password;

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第6张图片

8、在 cn/example/config 中新建一个类 ApplicationConfig.java,我们注入一些 Bean。

8.1 先在类名上面写两个注解,代码如下。

@MapperScan 注解的作用就是扫描 Mapper 文件。

package cn.example.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(basePackages = "cn.example.mapper")
public class ApplicationConfig {


}

8.2 注入第一个 Bean,代码如下。

因为需要使用到 db.properties 配置文件,所以在入参传入 DatabaseProperties 对象。

具体的各 set 方法的作用,请自行学习。

package cn.example.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.beans.PropertyVetoException;

@Configuration
@MapperScan(basePackages = "cn.example.mapper")
public class ApplicationConfig {

    @Bean
    ComboPooledDataSource comboPooledDataSource(DatabaseProperties databaseProperties) throws PropertyVetoException {
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        comboPooledDataSource.setDriverClass(databaseProperties.getDriver());
        comboPooledDataSource.setJdbcUrl(databaseProperties.getUrl());
        comboPooledDataSource.setUser(databaseProperties.getUsername());
        comboPooledDataSource.setPassword(databaseProperties.getPassword());
        comboPooledDataSource.setMaxPoolSize(50);
        comboPooledDataSource.setMinPoolSize(2);
        comboPooledDataSource.setMaxIdleTime(60);
        return comboPooledDataSource;
    }
}

8.3 注入第二个 Bean,代码如下。

一定要确保路径正确,否则会报错文件不存在(is not exist),"classpath:mapper/*.xml" 对应的是第6步创建的文件夹,虽然我们目前还没有在该文件夹下创建 xml 文件。

package cn.example.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import java.beans.PropertyVetoException;
import java.io.IOException;

@Configuration
@MapperScan(basePackages = "cn.example.mapper")
public class ApplicationConfig {

    @Bean
    ComboPooledDataSource comboPooledDataSource(DatabaseProperties databaseProperties) throws PropertyVetoException {
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        comboPooledDataSource.setDriverClass(databaseProperties.getDriver());
        comboPooledDataSource.setJdbcUrl(databaseProperties.getUrl());
        comboPooledDataSource.setUser(databaseProperties.getUsername());
        comboPooledDataSource.setPassword(databaseProperties.getPassword());
        comboPooledDataSource.setMaxPoolSize(50);
        comboPooledDataSource.setMinPoolSize(2);
        comboPooledDataSource.setMaxIdleTime(60);
        return comboPooledDataSource;
    }

    @Bean
    SqlSessionFactoryBean sqlSessionFactoryBean(ComboPooledDataSource comboPooledDataSource) throws IOException {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(comboPooledDataSource);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/*.xml"));
        return sqlSessionFactoryBean;
    }
}

四、构建实体类、Mapper、MySQL

9、在 cn/example/pojo 中写一个实体类 User,写两个属性,对应数据库的字段。(当然不对应也行,此处先对应,后期再介绍不对应如何处理)

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第7张图片

10、在 cn/example/mapper 中写一个接口文件 UserMapper.java,写一个方法来查找 User 表信息,代码如下。

在接口上面写上 @Service,因为我们后续要用这个接口的方法。

因为后续我们要用两个参数的查询语句,因此加上 @Param 注解,这个注解里的字符串很重要,形参名字不重要。

package cn.example.mapper;

import cn.example.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public interface UserMapper {
    List findUsers(@Param("loginName") String loginName, @Param("password") String password);
}

11、在 resources/mapper 文件夹中写一个 UserMapper.xml 文件,代码如下。




    

说明:1)namespace 与 上一步创建的 UserMapper 相对应,需要写全类名。

2)select 标签的 id 与 UserMapper.java 的方法名对应一致。

3)parameterType 表示入参类型,与 UserMapper 的 isExist 方法的入参类型对应一致。(如果入参不全为 String 类型,需要写 parameterMap 标签进行配置)

4)resultType 表示结果类型,因为 UserMapper 的 isExist 方法的返回值类型是 User 类集合,因此这里写 User 的全类名。(第9步中,如果数据库中的字段名和 User 类的属性不一致,则需要写 resultMap 标签进行配置)

5)#{loginName} 和 #{password} 与 UserMapper 的 isExist 方法的入参注解对应一致。

注:如果你写完,或复制完之后发现如下图所示,报红,可以进行如下操作。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第8张图片

1)光标放置报红处,按 Alt + Enter ,或点击左侧的红色小灯泡,然后点击 Configure data source。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第9张图片

2)点击左上角 “+” 加号,然后点击 “MySQL”。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第10张图片

3)然后输入 User:root、Password:admin、Database:example,然后在 URL 后面加上参数
“?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC”

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第11张图片

4)点击下方的 Test Connection,可以发现测试成功,如果测试失败请自行查找原因,可以使用它提示的“troubleshooting”。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第12张图片

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第13张图片

5)点击 Schemas,会发现什么都没有,稍等一会,弹出提示,输入密码,点击OK。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第14张图片

6)勾选 Current schema 或 example,点击 OK。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第15张图片

7)弹出一个页面,这个页面可以用来写 sql 语句测试的,如下图。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第16张图片

8)该页面可以从右侧的 Database 中找到。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第17张图片

五、使用构建的 Mapper

12、在 cn/example/interfaces 里写一个接口文件 UserService.java,代码如下。

package cn.example.interfaces;

public interface UserService {
    boolean isExist(String loginName, String password);
}

13、在 cn/example/impl 里写一个接口文件 UserServiceImpl.java,代码如下。

package cn.example.impl;

import cn.example.interfaces.UserService;
import cn.example.mapper.UserMapper;
import cn.example.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    private UserMapper userMapper;

    @Override
    public boolean isExist(String loginName, String password) {
        List users = userMapper.findUsers(loginName, password);
        for (User user : users) {
            System.out.println("UserServiceImpl文件开始打印");
            System.out.println("loginName: " + user.getLoginName());
            System.out.println("password: " + user.getPassword());
        }
        return users.size() != 0;
    }

    @Autowired
    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }
}

说明:1)该类使用到了刚刚注解了 @Service 的 UserMapper 接口,然后该类也需要注解 @Service,因为该类的 isExist 方法也需要在另外的地方调用。

2)正常操作是 isExist 方法直接返回 userMapper.findUsers(loginName, password).size() != 0 即可,此处为了后续演示打印结果。

14、在 cn/example/controller 里新建一个类,我取名为 Request(名字随意,符合 java 语法规范即可),代码如下。(各注解语法、用处不解释了,累了)

package cn.example.controller;

import cn.example.interfaces.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/requestAction")
public class Request {
    private UserService userService;
    
    @RequestMapping("/findUser")
    @ResponseBody
    public boolean findUser(String loginName, String password) {
        return userService.isExist(loginName, password);
    }

    @Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
}

六、前端部分

15、后台部分全部完成,开始前端部分。打开 index.jsp,写两个input,写一个div以供点击,引入 jQuery,然后发送请求。代码如下。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>



    Title
    
    


Hello World

登录

注:我用了 ECMA Script 6 语法,IDEA默认使用的是 ECMA Script 5 语法,因此,这个代码会报错,如下图。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第18张图片

按 Ctrl + Alt + S 打开 Settings,搜索 ECMA,点击最后一个“JavaScript”,右侧改为 ECMAScript 6。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第19张图片

说明:前端代码的意思就是将两个 input 里面的值通过 ajax 发送给后台,看如下示意图,看不懂建议你学一下html、ajax。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第20张图片

【测试】

1、先回顾一下数据库数据。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第21张图片

2、我们运行一下。先故意输错一个,用户名为“admin”,我们数据库中没有用户名为“admin”的数据。

3、输入正确的试一下。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第22张图片

同时控制台也打印了信息。

【从无到有】数据库,IDEA + maven + java web + springMVC + MySql + MyBatis项目搭建_第23张图片

你可能感兴趣的:(其他)