mybatis入門學習

1、背景

好久之前據說過ibatis,後來知道ibatis更名mybatis了,以前只是簡單的接觸過mybatis,沒有使用太多,不是太瞭解。因此趁着週末看了看。html

本文主要參考網站:java

https://mybatis.org/mybatis-3/zh/index.htmlmysql

https://www.cnblogs.com/benjieqiang/p/11183580.htmlgit

http://www.mybatis.cn/679.htmlgithub

網上關於mybatis的入門文章不少,可是通過實踐,發現許多寫的都不全。有些代碼根本就只是一個示例,根本就沒法執行。web

寫這篇文章,一方面是記錄本身的學習,另外一方面是給像我這樣的小白參考。可以真正執行的代碼。spring

(文章是有目錄的,在右下角。。可能須要滾動一下屏幕纔出來)sql

2、mybatis簡單使用

 一、引入依賴

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>${mybatis.version}</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

 

所有依賴請查看文末的git源碼。數據庫

二、對象類

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

  private String name;

  private Integer age;

}

 

三、對應的數據庫表語句

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='用戶表';

 

四、在resources目錄下建立Mapper

<?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">
<!--namespace:用來區別不一樣的類的名字 -->
<mapper namespace="test">

    <!-- 經過Id查詢一個用戶   -->
    <select id="findUserById" parameterType="Integer" resultType="com.shuimutong.learn.mybatis.domain.User">
        select * from t_user where id = #{v}
    </select>

</mapper>

 

五、在resources下建立mybatis鏈接數據庫的配置文件

1)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>
    <properties resource="mysql.properties"></properties>

    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
        <mapper resource="mapper/User2Mapper.xml"/>
    </mappers>
</configuration>

 

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文件中,須要主要「&」的轉義,應該使用「&amp;」(大概是這個,我是根據IDEA提示改的),否則文件會報錯。apache

六、代碼調用

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。

3、mybatis+springboot使用

一、引入依賴

由於我引入的依賴較多,因此請直接經過git查看,那裏最全。

二、User對象和sql

和(二)中的同樣。

三、建立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);
}

 

四、建立User3Mapper對應的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.shuimutong.learn.mybatis.dao.User3Mapper">
<!--java對象和數據庫中表字段的映射關係-->
<resultMap id="User3Map" type="com.shuimutong.learn.mybatis.domain.User"> <id column="id" property="id" jdbcType="BIGINT"/> <result column="name" property="name" jdbcType="VARCHAR"/> <result column="age" property="age" jdbcType="INTEGER"/> </resultMap> <sql id="BaseColumn"> id, name, age </sql> <select id="selectUser" parameterType="java.lang.Long" resultMap="User3Map"> SELECT <include refid="BaseColumn" /> FROM t_user WHERE id = #{id, jdbcType=BIGINT} </select> </mapper>

 

五、建立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

 

六、建立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代碼這裏就不貼了。

七、建立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);
    }
}

 

八、最後是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註解,我在項目裏試了,不加也能運行。具體說明參考對應的連接文章。

九、啓動項目請求鏈接

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

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

 

 

最後,git地址:https://github.com/shuimutong/spring_learn/tree/master/mybatis(項目較多,須要點開後才能clone)

祝你們生活開心、工做順利。

相關文章
相關標籤/搜索