spring boot 配置mybatis

今天搞一搞spring boot的mybatis的整合,首先搞一个简单的springboot项目:搭建简单的spring boot

然后创建数据库中对应表的实体类:我的表名user_demo(注意mysql在linux是区分大小写的)

创建domain:UserDemo

package com.shuguolili.domain;

import lombok.Data;

/**
 * @Classname UserDemo
 * @Description TODO
 * @Date 2019/4/23 12:57
 * @Created by lky
 */
@Data
public class UserDemo {

    private Integer id;

    private String name;

    private Integer age;

}

创建到层:UserDemoMapper

package com.shuguolili.mapper;

import com.shuguolili.domain.UserDemo;
import org.springframework.stereotype.Repository;

/**
 * @Classname UserDemoMapper
 * @Description TODO
 * @Date 2019/4/23 13:00
 * @Created by lky
 */
@Repository
public interface UserDemoMapper {

   void insert(UserDemo demo);
}

创建service层接口:UserDemoService

package com.shuguolili.service;

import com.shuguolili.domain.UserDemo;

/**
 * @Classname UserDemoService
 * @Description TODO
 * @Date 2019/4/23 13:01
 * @Created by lky
 */
public interface UserDemoService {

    void insert(UserDemo demo);
}

创建service层实现类:UserDemoServiceImpl

package com.shuguolili.service.impl;

import com.shuguolili.domain.UserDemo;
import com.shuguolili.mapper.UserDemoMapper;
import com.shuguolili.service.UserDemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * @Classname UserDemoServiceImpl
 * @Description TODO
 * @Date 2019/4/23 13:01
 * @Created by lky
 */
@Service
public class UserDemoServiceImpl implements UserDemoService {

    @Autowired
    private UserDemoMapper userDemoMapper;

    @Transactional
    @Override
    public void insert(UserDemo demo) {
        userDemoMapper.insert(demo);
    }
}

创建controller:DemoOne 

简单的向数据库插入一条数据,然后返回给页面访问成功。

package com.shuguolili.controller;

import com.shuguolili.domain.UserDemo;
import com.shuguolili.service.UserDemoService;
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;

/**
 * @Classname DemoOne
 * @Description TODO
 * @Date 2019/4/18 13:53
 * @Created by lky
 */
@Controller
@RequestMapping("/demo")

public class DemoOne {

    @Autowired
    private UserDemoService userDemoService;

    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){

            UserDemo demo = new UserDemo();
            demo.setName("魏大勇");
            demo.setAge(24);
            userDemoService.insert(demo);

        return "springboot -- 访问成功!";
    }
}

创建xml文件:UserDemoMapper.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.shuguolili.mapper.UserDemoMapper">
    <insert id="insert" parameterType="com.shuguolili.domain.UserDemo">
   	 	 insert into user_demo ( name, age )
        values ( #{name,jdbcType=VARCHAR}, #{age,jdbcType=DECIMAL})
    </insert>
</mapper>

接下来的呢都是模块代码,但是我感觉才是比较重要的。

首先向导入maven依赖

        <!--mybatis的依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.2.0</version>
        </dependency>
        <!--mysql的数据库连接的依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

然后配置mybatis的配置文件mybatis.xml(名字不固定)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- MyBatis 配置 -->
    <settings>
        <!-- 对在此配置文件下的所有cache 进行全局性开/关设置 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 全局性设置懒加载。如果设为'false',则所有相关联的都会被初始化加载 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 允许和不允许单条语句返回多个数据集(取决于驱动需求) -->
        <setting name="multipleResultSetsEnabled" value="true"/>
        <!-- 使用列标签代替列名称。不同的驱动器有不同的作法。参考一下驱动器文档,或者用这两个不同的选项进行测试一下 -->
        <setting name="useColumnLabel" value="true"/>
        <!-- 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行 -->
        <setting name="useGeneratedKeys" value="false"/>
        <!-- 指定MyBatis 是否并且如何来自动映射数据表字段与对象的属性。PARTIAL将只自动映射简单的,没有嵌套的结果。FULL 将自动映射所有复杂的结果 -->
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        <!-- 配置和设定执行器,SIMPLE 执行器执行其它语句。REUSE 执行器可能重复使用prepared statements 语句,BATCH执行器可以重复执行语句和批量更新 -->
        <setting name="defaultExecutorType" value="BATCH"/>
        <!-- 设置一个时限,以决定让驱动器等待数据库回应的多长时间为超时 -->
        <setting name="defaultStatementTimeout" value="25"/>
        <!--允许在嵌套语句中使用行分界(RowBounds)-->
        <setting name="safeRowBoundsEnabled" value="false"/>
        <!--开启驼峰命名规则自动转换-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。
        默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为 STATEMENT,本地会话仅用在语句执行上,
        对相同 SqlSession 的不同调用将不会共享数据。-->
        <setting name="localCacheScope" value="SESSION"/>
        <!--当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,
        多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。-->
        <setting name="jdbcTypeForNull" value="OTHER"/>
        <!--指定哪个对象的方法触发一次延迟加载。-->
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
        <!--指定 MyBatis 增加到日志名称的前缀-->
        <setting name="logPrefix" value="com.shuguolili.domain."/>
    </settings>

    <plugins> <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <property name="dialect" value="mysql" />
            <!-- 该参数默认为false -->
            <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
            <!-- 和startPage中的pageNum效果一样 -->
            <property name="offsetAsPageNum" value="true" />
            <!-- 该参数默认为false --> <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
            <property name="rowBoundsWithCount" value="true" />
            <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
            <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型) -->
            <property name="pageSizeZero" value="true" />
            <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
            <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
            <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
            <property name="reasonable" value="true" />
            <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
            <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
            <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
            <!-- <property name="params" value="pageNum=start;pageSize=limit;pageSizeZero=zero;reasonable=heli;count=contsql"/> -->
        </plugin>
    </plugins>
</configuration>

接着是application.properties文件

spring.datasource.url=jdbc:mysql://数据库地址ip:端口/数据库名
spring.datasource.username=数据库账户
spring.datasource.password=密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5


server.tomcat.uri-encoding=UTF-8



mybatis.configLocations= classpath:mybatis/mybatis.xml(mybatis.xml文件的路径)

# mybatis.config= classpath:mybatis-config.xml
mybatis.mapperLocations=classpath:mybatis/sqlMap/*.xml(mapper.xml文件的路径)

ok,启动项目访问,就会发现数据库中多了一条数据了已经。

猜你喜欢

转载自blog.csdn.net/K_Y_Lee/article/details/89523513