今天搞一搞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,启动项目访问,就会发现数据库中多了一条数据了已经。