天天看点

Springboot+mybatis搭建项目

用惯了SSM,会发现配置文件是真的烦,既然有了化繁为简的工具Springboot,今天我们就来实践一下,体会一下Springboot搭建一个SSM的应用有多么方便。

配置环境如下:

 jdk:1.7及以上,

maven:3.5.2

mybatis:3.4.5

mysql:5.5

首先搭建一个maven项目(下载maven3,然后配置环境变量,更改eclipse中的userSetting以及maven所在目录),

新建maven项目之后,会生成pom.xml。要使用mybatis,我们的配置文件可以按照这样来配置:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sgx</groupId>
  <artifactId>SpringBoot</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>SpringBoot Maven Webapp</name>
  <url>http://maven.apache.org</url>
  	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.1.RELEASE</version>
    </parent>

    
    <dependencies>
    
    	<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>spring-boot-starter-basic</artifactId>
            <version>5.17.0</version>
        </dependency> -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
            
        </dependency>
        <!-- <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency> -->
        
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
           

主要是引入parent的依赖以及mysql的依赖和starter的依赖即可。下面是数据库的简单配置,

我们先下载Mysql的安装文件,本地安装了Mysql之后,

然后我们在resources下面新建一个application.properties,这个文件用来存放所有配置信息。

使用SSM需要的配置如下:

#Spring datasource && jpa
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mysql?charset=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.show-sql=true

mybatis.mapper-locations: classpath:mapper/*.xml
mybatis.type-aliases-package: com.sgx.model
           

主要是连接数据库以及mybatis编写XML文件的地方还有表结构映射的Java实体类存放的地方;

在Web应用中操作数据库的方法其实还是挺多的,Springboot官方推荐的是JPA

(使用hibernate来自动映射,不用手动建表)简化配置,这也是Springboot的初衷,

当然用惯了SSM的同学或者还不习惯HQL的同学可能会跟我一样选择mybatis而不是hibernate。

使用JPA自动建表需要引入我上面注释的那个JPA的依赖。

一、JDBCTemplate操作数据库

Spring官方传送门,这种方法好用是好用,但是把太多的SQL代码会写到实现类里面,

这样的话一旦业务逻辑复杂,代码里面会遍布SQL语句。

二、SSM

经过上面的配置,我们应该会得到类似下面的目录结构:

Springboot+mybatis搭建项目

这是个标准的SSM开发的结构,现在我们启动Springboot应用,运行Application.class,

然后写一个测试类MyController:

package com.sgx.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.sgx.model.Customer;
import com.sgx.service.TestService;
@ResponseBody
@Controller
public class MyController {
	@Autowired
	private JdbcTemplate jdbcTemplate;
	@Autowired
	private TestService testService;
	@RequestMapping("/hello")
	public String hello(){
		System.out.println("hello,world!");
		return "index";
	}
	
	@RequestMapping("/query/{name}")
	public Customer query(@PathVariable String name){
		String sql = "INSERT INTO CUSTOMER(NAME,GENDER,ADDRESS,PHONE) "
				+ "VALUES('shigx','male','shanghai,putuo','110')";
		jdbcTemplate.execute(sql);
		System.out.println("INSERT INTO TABLE CUSTOMER SUCCESS");
		return testService.query(name);
	}
}
           

这个query方法里面,我先使用JDBCTemplate插入一条记录,然后调用TestService中的query方法,

package com.sgx.service;

import org.springframework.stereotype.Service;

import com.sgx.model.Customer;
@Service
public interface TestService {
	public Customer query(String name);
}
           
package com.sgx.service.Impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.sgx.dao.CustomerMapper;
import com.sgx.model.Customer;
import com.sgx.service.TestService;
@Component
public class TestServiceImpl implements TestService{
	
	@Autowired
	private CustomerMapper customerMapper;
	@Override
	public Customer query(String name) {
		return customerMapper.query(name);
	}

}
           

这里调用了customerMapper中的query方法,这个mapper class要加注解,标注它是一个mapper,

或者在启动Application的时候,注解mapperScan扫描这个包也可以;

package com.sgx.dao;

import org.apache.ibatis.annotations.Mapper;
import com.sgx.model.Customer;

@Mapper
public interface CustomerMapper {
	public Customer query(String name);
}
           

然后是我们的mapper.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sgx.dao.CustomerMapper">
 <resultMap id="CustomerMap" type="Customer" >
      <result property="name" column="name" javaType="java.lang.String"/>
      <result property="gender" column="gender" javaType="java.lang.String"/>
      <result property="address" column="address" javaType="java.lang.String"/>
      <result property="phone" column="phone" javaType="java.lang.String"/>
  </resultMap>
  
    <insert id="addCustomer" parameterType="Customer"  useGeneratedKeys="true">
        insert into customer(name,gender,address,phone) values
        (#{name},#{gender},#{address},#{phone})
    </insert>
    <select id="query" resultMap="CustomerMap" parameterType="String">
        select * from customer where name=#{name}
    </select>
</mapper>
           

这样一来,controller中的方法最终其实就是这个XML中的query语句,结果就是去数据库查出这个对象

返回一个Customer对象,然后结果显示到页面。

测试:浏览器输入http://localhost:8080/query/shigx

返回结果会自动转成JSON:

Springboot+mybatis搭建项目

OK,至此,测试成功,后面就是写业务代码了!

继续阅读