mybatis入门学习

一、背景

很久以前听说过ibatis,后来知道ibatis改名mybatis了,之前只是简单的接触过mybatis,没有使用太多,不是太了解。所以趁着周末看了看。
本文主要参考网站:
https://mybatis.org/mybatis-3/zh/index.html
https://www.cnblogs.com/benjieqiang/p/11183580.html
http://www.mybatis.cn/679.html
网上关于mybatis的入门文章很多,但是经过实践,发现许多写的都不全。有些代码根本就只是一个示例,根本就无法执行。
写这篇文章,一方面是记录自己的学习,另一方面是给像我这样的小白参考。能够真正执行的代码。
(文章是有目录的,在右下角。。可能需要滚动一下屏幕才出来)

二、mybatis简单使用

1、引入依赖


    org.mybatis
    mybatis
    ${mybatis.version}


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    1.3.0


    mysql
    mysql-connector-java
    runtime

全部依赖请查看文末的git源码。

2、对象类

@Data //使用了lombok,自动生成get/set方法
public class User {
  private Long id;

  private String name;

  private Integer age;

}

3、对应的数据库表语句

CREATE TABLE `t_user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '名称',
  `age` int(15) unsigned NOT NULL DEFAULT 0 COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户表';

4、在resources目录下创建Mapper






    
    
        select * from t_user where id = #{v}
    


5、在resources下创建mybatis连接数据库的配置文件

1)mybatis-config.xml




    

    
        
            
            
                
                
                
                
            
        
    
    
        
        
    

2)相同目录下创建对应的mysql.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/simple?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8
jdbc.username=simple
jdbc.password=123456

这一步主要是想把经常变动的部分和变的部分分开,也可以选择不要这个文件,直接写在mybatis-config.xml中。如果直接在xml文件中,需要主要“&”的转义,应该使用“&”(大概是这个,我是根据IDEA提示改的),不然文件会报错。

6、代码调用

public class UserTest {
    public static void main(String[] args) throws IOException {
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = sqlSessionFactory.openSession();
        //4.执行Sql语句
        User user = session.selectOne("test.findUserById", 2);
        //5. 打印结果
        System.out.println(JSON.toJSONString(user));
        //6.释放资源
        session.close();
        in.close();
    }
}

小结:
代码写到这里,你应该已经学会了mybatis的基本使用。
但是工作中如果用到,许多情况下会跟其他框架一起使用,比如说springboot。

三、mybatis+springboot使用

1、引入依赖

因为我引入的依赖较多,所以请直接通过git查看,那里最全。

2、User对象和sql

和(二)中的一样。

3、创建User3Mapper接口

已经使用spring了,不能再通过Session工厂找方法了,要通过定义的接口去访问。(工作中要保证少出错,虽然代码会一些)

package com.shuimutong.learn.mybatis.dao;

import com.shuimutong.learn.mybatis.domain.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface User3Mapper {
    User selectUser(long id);
}

4、创建User3Mapper对应的xml





    
    
        
        
        
    

    
        id, name, age
    

    
        SELECT  FROM t_user WHERE id = #{id, jdbcType=BIGINT}
    

5、创建application.yml

在resources目录下创建此文件。

server:
  port: 8080
spring:
  #数据库连接
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/simple?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8
    username: simple
    password: 123456
mybatis:
  type-aliases-package: com.shuimutong.learn.mybatis.domain
  mapperLocations: classpath:mapper/*.xml

6、创建UserService方法

前面的User3Mapper接口相当于是UserDao,User3Mapper.xml相当于UserDao的实现。
DAO层写了,所以这里就是service层了。

package com.shuimutong.learn.mybatis.service.impl;

import com.alibaba.fastjson.JSON;
import com.shuimutong.learn.mybatis.dao.User3Mapper;
import com.shuimutong.learn.mybatis.domain.User;
import com.shuimutong.learn.mybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private User3Mapper user3Mapper;

    @Override
    public User findById(long id) {
        System.out.println("user3MapperIsNull?");
        System.out.println(JSON.toJSONString(user3Mapper));
        return user3Mapper.selectUser(id);
    }
}

UserService代码这里就不贴了。

7、创建UserController

创建controller代码,咱这可是springboot项目。

package com.shuimutong.learn.mybatis.controller;

import com.shuimutong.learn.mybatis.domain.User;
import com.shuimutong.learn.mybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/getUser")
    public User getUser(long id) {
        return userService.findById(id);
    }
}

8、最后是spring的启动类MybatisApplication

package com.shuimutong.learn.mybatis;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.shuimutong.learn.mybatis.dao") //这个注解从运行结果看:加不加都行
//如果不加,只扫描和主类处于同包下的Class  https://blog.csdn.net/lisheng19870305/article/details/102816358
public class MybatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);
    }
}

关于MapperScan注解,我在项目里试了,不加也能运行。具体说明参考对应的链接文章。

9、启动项目请求连接

http://localhost:8080/getUser?id=1

{"id":1,"name":"trans-634541697","age":6}

最后,git地址:https://github.com/shuimutong/spring_learn/tree/master/mybatis(项目较多,需要点开后才能clone)
祝大家生活开心、工作顺利。