SpringBoot+Mybatis整合(二)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/liqingwei168/article/details/81206180

说明:上篇文章搭建框架是基于注解开发的,很多公司为便于维护一般不采用这种方式,一般采用mapper.xml文件配置,这样可以更好的维护代码。接口我们搭建的框架都是基于mapper.xml文件配置的,首先我们搭建一下框架。

正题:只需要3步就完成框架搭建

首先说明一下工程目录结构:

1.配置pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.example</groupId>
   <artifactId>demo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>MySpringBoot</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.3.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <mybatis-spring-boot.version>1.2.0</mybatis-spring-boot.version>
      <mysql-connector.version>5.1.39</mysql-connector.version>
      <java.version>1.8</java.version>
   </properties>

   <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>
      <!--mybatis依赖包-->
       <dependency>
          <groupId>org.mybatis.spring.boot</groupId>
          <artifactId>mybatis-spring-boot-starter</artifactId>
          <version>${mybatis-spring-boot.version}</version>
       </dependency>
      <!--mysql数据库依赖包-->
       <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>${mysql-connector.version}</version>
       </dependency>
      <!--lombok自动生成实体类中的getset方法-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
        </dependency>
    </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
</project>

2.application.properties文件配置

server.port=9090
#视图层控制 用mvc方式访问templates下的HTML
#访问后缀  spring.mvc.view.suffix=.html类似Springmvc中的视图文件夹
spring.mvc.view.prefix=classpath:/templates/
#访问后缀  spring.mvc.view.suffix=.html类似Springmvc中的.jsp
spring.mvc.view.suffix=.html
spring.mvc.static-path-pattern=/static/**
#开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
#thymeleaf这样配置就可以直接访问static下的HTML(和mvc访问方式二选一)
spring.thymeleaf.prefix = classpath:/static/
spring.thymeleaf.suffix = .html

spring.datasource.url=jdbc:mysql://192.168.1.9:3306/test_demo_lqw?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=zp123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#mybatis.typeAliasesPackage=com.example.demo.model
mybatis.mapperLocations=classpath:mapper/*Mapper.xml

#写法不同,不过结果一样
#mybatis.type-aliases-package=com.test.dailyreport.bean
#mybatis.mapper-locations=classpath:mybatis/mapper/*Mapper.xml

#验证连接的有效性
spring.datasource.primary.test-while-idle=true
#获取连接时候验证,会影响性能
spring.datasource.primary.test-on-borrow=false
#在连接归还到连接池时是否测试该连接
spring.datasource.primary.test-on-return=false
spring.datasource.primary.validation-query=SELECT 1 FROM DUAL
#空闲连接回收的时间间隔,与test-while-idle一起使用,设置5分钟
spring.datasource.primary.time-between-eviction-runs-millis=300000
#连接池空闲连接的有效时间 ,设置30分钟
spring.datasource.primary.min-evictable-idle-time-millis=1800000
spring.datasource.primary.initial-size=5
#指定连接池中最大的活跃连接数.
spring.datasource.primary.max-active=50
#指定连接池等待连接返回的最大等待时间,毫秒单位.
spring.datasource.primary.max-wait=60000
#指定必须保持连接的最小值
spring.datasource.primary.min-idle=5
#开启驼峰命名转换
mybatis.configuration.map-underscore-to-camel-case=true
#sql打印控制台
logging.level.com.example.demo.mapper=debug

3.入口MySpringBootApplication.java文件

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//@MapperScan("com.example.demo.mapper")  在数据层配置@Mapper一个功能
@SpringBootApplication//(exclude = {DataSourceAutoConfiguration.class})
public class MySpringBootApplication {
   public static void main(String[] args) {
      SpringApplication.run(MySpringBootApplication.class, args);
   }
}

到此我们的SpringBoot+Mybatis整合已经搭建完成。

接下来是Demo 演示了

控制层 TestController

package com.example.demo.controller;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/**
 * Created by 李庆伟 on 2018/7/24.
 */
@RestController
public class TestController {

    @Autowired
    private UserService userService;


    @RequestMapping("/hello")
    public String hello (){
        return "this is HelloWord";
    }

    /**
     * 根据id获取user对象
     * @return
     */
    @RequestMapping("/getUserById")
    public User getUserById(){
        String id = "0";
        return userService.getUserById(id);
    }

    /**
     * 根据id获取Map对象
     * @return
     */
    @RequestMapping("/getUserMap")
    public Map<String,Object> getUserMap(){
        String id = "0";
        return userService.getUserMap(id);
    }

    /**
     * 添加方法
     * @param
     * @return String
     */
    @RequestMapping("/save")
    public String save (){
        User user =  new User();
        user.setId("111");
        user.setUserName("XXXX");
        int num = userService.save(user);
        if(num == 1){
            return "save sucess";
        }else {
            return "save error";
        }
    }


    /**
     * 修改方法
     * @param
     * @return String
     */
    @RequestMapping("/update")
    public String update (){
        User user =  new User();
        user.setId("111");
        user.setUserName("1111111");
        int num = userService.update(user);
        if(num == 1){
            return "update sucess";
        }else {
            return "update error";
        }
    }

    /**
     * 删除
     * @param
     * @return String
     */
    @RequestMapping("/delete")
    public String delete (){
        User user =  new User();
        user.setId("111");
        int num = userService.delete(user);
        if(num == 1){
            return "delete sucess";
        }else {
            return "delete error";
        }
    }

}

业务层接口UserService

package com.example.demo.service;

import com.example.demo.model.User;

import java.util.List;
import java.util.Map;

/**
 * Created by 李庆伟 on 2018/7/24.
 */
public interface UserService {
    /**
     * 通过id获取用户
     * @return
     */
    public User getUserById(String id);

    /**
     * 根据id获取Map对象
     * @return
     */
    public Map<String,Object> getUserMap(String id);

    /**
     * 添加方法
     * @param user
     * @return
     */
    public int save(User user);

    /**
     * 修改方法
     * @param user
     * @return
     */
    public int update(User user);

    /**
     * 删除
     * @param user
     * @return
     */
    public int delete(User user);


}

业务层接口实现类UserServiceImpl

package com.example.demo.service.impl;

import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;

/**
 * Created by 李庆伟 on 2018/7/24.
 */
@Service
public class UserServiceImpl implements UserService{

    @Autowired
    private UserMapper userMapper;
    /**
     * 通过id获取用户
     * @return
     */
    @Override
    public User getUserById(String id) {
        return userMapper.getUserById(id);
    }

    /**
     * 根据id获取Map对象
     * @return
     */
    public Map<String,Object> getUserMap(String id){
        return userMapper.getUserMap(id);
    }

    /**
     * 添加方法
     * @param user
     * @return
     */
    public int save(User user){
        return userMapper.save(user);
    }

    /**
     * 修改方法
     * @param user
     * @return
     */
    public int update(User user){
        return userMapper.update(user);
    }

    /**
     * 删除
     * @param user
     * @return
     */
    @Transactional
    public int delete(User user){
        /*
        User addUser = new User();
        addUser.setId("3333");
        addUser.setUserName("3333");
        userMapper.save(addUser);
        int a = 1/0;
        */
        return userMapper.delete(user);
    }


}

数据层UserMapper

package com.example.demo.mapper;

import com.example.demo.model.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.Map;

/**
 * Created by 李庆伟 on 2018/7/24.
 */
@Repository
@Mapper
public interface UserMapper {
    /**
     * 通过查询能够直接映射到实体类中的属性是因为  配置了驼峰模式
     *
     * @param id
     * @return
     */
    public User getUserById(String id);

    /**
     * 不配置驼峰模式
     * @param
     * @return
     */


    /**
     * 返回map
     *
     * @param id
     * @return
     */
    public Map<String, Object> getUserMap(String id);

    /**
     * 添加方法
     *
     * @param user
     * @return
     */
    int save(User user);

    /**
     * 修改方法
     *
     * @param user
     * @return
     */
    int update(User user);

    /**
     * 删除
     *
     * @param user
     * @return
     */
    int delete(User user);


}

数据层UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.2//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">

    <!-- 增加 -->
    <insert id="save">
        INSERT INTO user_t(
        id,
        user_name
        ) VALUES (
        #{id},
        #{userName}
        )
    </insert>

    <!-- 删除 -->
    <delete id="delete">
        delete from user_t WHERE id =#{id}
    </delete>

    <!--修改-->
    <update id="update">
        update user_t SET user_name=#{userName} WHERE id=#{id}
    </update>

    <!-- 查询 -->
    <select id="getUserById" resultType="com.example.demo.model.User">
        select id,user_name from user_t where id = #{id}
    </select>

    <!-- map封装 -->
    <resultMap id="UserResultMap" type="map">
        <id property="id" column="id" />
        <result property="userName" column="user_name" />
    </resultMap>
    <select id="getUserMap" resultMap="UserResultMap">
        select id,user_name from user_t where id = #{id}
    </select>



</mapper>

实体类User

package com.example.demo.model;

import lombok.Data;

/**
 * Created by 李庆伟 on 2018/7/24.
 */

@Data
public class User {
    private String id;
    private String userName;
}

数据库表user_t

到此Demo也完成了

每天进步一点点。。。。。

猜你喜欢

转载自blog.csdn.net/liqingwei168/article/details/81206180