spring-boot 集成mybatis配置使用

基本照搬了mybatis-spring-boot-samples中的代码,先上手。

添加maven依赖

在pom文件中增加如下内容

<dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.1.1</version>
</dependency>

创建表

在数据库中增加一张表用于测试,以下是建表语句

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `name` varchar(128) DEFAULT NULL,
  `money` decimal(10,2) DEFAULT NULL,
  `create_date` datetime NOT NULL,
  `modify_date` datetime NOT NULL,
  `is_deleted` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户';

添加相关配置信息

首先在resources目录下增加mybatis-config.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>
    <mappers>
        <mapper resource="mybatis/mapper/UserMapper.xml"/>
    </mappers>
</configuration>
在resources目录下创建mybatis/mapper目录,并在其下创建UserMapper.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.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.model.UserMo">
        <id column="id" jdbcType="BIGINT" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="money" jdbcType="DECIMAL" property="money" />
        <result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
        <result column="modify_date" jdbcType="TIMESTAMP" property="modifyDate" />
        <result column="is_deleted" jdbcType="TINYINT" property="isDeleted" />
    </resultMap>
    <select id="selectUserById" resultMap="BaseResultMap">
        select * from test_user where id = #{id}
    </select>
</mapper>

在application.propertise文件中添加以下配置,指定mybatis-config.xml的位置

mybatis.config-location=classpath:mybatis-config.xml
如果在application.propertise文件中添加以下配置,则mybatis-config.xml无需再配置<mappers></mappers>中的内容

mybatis.mapper-locations=classpath:mybatis/mapper/*Mapper.xml

相关java代码

创建表user对应的实体类UserMo.java

package com.model;

import java.math.BigDecimal;
import java.util.Date;

public class UserMo {

    private Long id;
    private String name;
    private BigDecimal money;
    private Date createDate;
    private Date modifyDate;
    private Integer isDeleted;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getMoney() {
        return money;
    }

    public void setMoney(BigDecimal money) {
        this.money = money;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    public Date getModifyDate() {
        return modifyDate;
    }

    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }

    public Integer getIsDeleted() {
        return isDeleted;
    }

    public void setIsDeleted(Integer isDeleted) {
        this.isDeleted = isDeleted;
    }
}

创建对应的UserMapper.java

package com.mapper;

import com.model.UserMo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface UserMapper {

    UserMo selectUserById(@Param("id") Long id);
}
创建UserDao.java

package com.dao;

import com.model.UserMo;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Component;

@Component
public class UserDao {

    private final SqlSession sqlSession;

    public UserDao(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    public UserMo findUserById(Long id) {
        return this.sqlSession.selectOne("selectUserById", id);
    }
}

测试

OK,准备工作都已就绪,开始测试,增加如下内容

    @Autowired
    private UserMapper userMapper;
    @Autowired
    private UserDao userDao;

    @RequestMapping("/find/mybatis/id")
    public String findMailByToFromMybatis(HttpServletRequest request, Long id) {
        UserMo userMo = userMapper.selectUserById(id);
        UserMo userMo1 = userDao.findUserById(id);
        return "userMapper: " + JSON.toJSONString(userMo) + ", userDao: " + JSON.toJSONString(userMo1);
    }
启动项目,在浏览器中输入 http://127.0.0.1:8080/find/mybatis/id?id=1,会看到如下

userMapper: {"createDate":1483586613000,"id":1,"isDeleted":0,"modifyDate":1483586613000,"money":1.20,"name":"sss"} 
userDao: {"createDate":1483586613000,"id":1,"isDeleted":0,"modifyDate":1483586613000,"money":1.20,"name":"sss"}
而且在控制台看到如下输出

INFO 1238 --- [nio-8080-exec-1] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
[http-nio-8080-exec-1] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
可以看到用的连接池正是之前配置的druid连接池。


其中很多代码入model,mapper等可以通过mybatis的逆向工程直接生成。

另一种方式

使用Mapper注解,不需要对应的mapper.xml文件,创建UserMapper1.java

package com.mapper;

import com.model.UserMo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface UserMapper1 {

    @Select("select id, name, money, create_date as createDate, modify_date as modifyDate, is_deleted as isDeleted" +
            " from test_user where name = #{name}")
    UserMo selectUserByName(@Param("name") String name);
}
其中部分字段使用了别名,不这样的话无法得到其中的内容。

测试代码如下

    @Autowired
    private UserMapper1 userMapper1;

    @RequestMapping("/find/mybatis/name")
    public String findMailByToFromMybatis(HttpServletRequest request, String name) {
        UserMo userMo = userMapper1.selectUserByName(name);
        return "userMapper1: " + JSON.toJSONString(userMo);
    }
启动服务后,输入 http://127.0.0.1:8080/find/mybatis/name?name=sss,可以看到如下内容

userMapper1: {"createDate":1483586613000,"id":1,"isDeleted":0,"modifyDate":1483586613000,"money":1.20,"name":"sss"}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值