码迷,mamicode.com
首页 > 其他好文 > 详细

MyBatis快速入门

时间:2019-02-01 18:54:39      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:原因   pos   sof   epo   nbsp   doc   word   end   有一个   

先说说缘由为啥今天才来学习和总结MyBatis。。

我自己学Springboot刚入门的时候,用SptingBoot+JdbcTemplate+thmysef搭建了一个bug管理平台

后来自己用自己的接口,测试DB连接数对性能的影响,TPS会特别受到程序中连接池的配置影响

后来DB中就涌现了很多数据,我的bug管理平台,有一个接口是列出所有的bug,这个页面就会特别特别地慢,于是想到分页。

 

在网上查找分页信息的时候,发现大多数都是针对MyBatis的,用JdbcTemplate的查询,将没有现成的分页插件,需要自己改写JdbcTemplate中的一些方法,要添加页码和每页的条数

 

每天依旧,工作依旧。

忽然一日得闲,又开始自学SpringBoot,于是根据教程先用springboot+MyBatis+MyBatis自动生成了Mapper和实体类。

难道MyBatis必须在SpringBoot框架中? 忽然冒出这样的疑问之后,就开始搜索MyBatis的历史,也开始最简单的学习。

 

 

mybatis是什么?最初开发出来做什么的?

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。
iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)

 

http://blog.mybatis.org/        mybatis官方网站   ---   需要FQ

http://www.mybatis.cn/     MyBatis的中文官网

 

https://github.com/mybatis/mybatis-3/releases

技术分享图片

 下载第一个zip格式的,解压后如下图,其中有个pdf文档,可以参考用来配置mapper以及配置config文件。 License和Notice只是一些证书说明等,可以忽略。lib目录下是一些常搭配的jar包。

mybatis-xx.xx.x.jar 可以放置到自己的项目源中。用了maven的话,可以自己去找maven的路径。

 技术分享图片

 

 

 

 

mybatis是怎么用的呢?

不管是何种程序,持久化的数据都是重中之重。不可能让前段用户直接去操作数据库吧,这样都不安全,而且也不是任何一个人都会的。

所以要用程序编写页面,编写后台接口,让mybaits操作对象,就像操作数据库这么简单。

user表, user对象,一一对应

想查看,想更新,想新增,直接操作对象,就能存入持久化数据DB中

use test

select * from user

create table user(
id INT NOT NULL auto_increment primary key,
name VARCHAR(20),
age int,
phone varchar(20),
password varchar(20)
)ENGINE=InnoDB AUTO_INCREMENT=300;

insert user(name,age,phone,password) values ("王族 ",33,"18962811111","12345")  

以上是创建了user表,接下来创建User对象

public class User {

    private Integer id;
    private String name;
    private String phone;
    private String password;
    private Integer age;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public User(){

    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ", phone=‘" + phone + ‘\‘‘ +
                ", password=‘" + password + ‘\‘‘ +
                ", age=" + age +
                ‘}‘;
    }
}

 

表和对象都有了,现在就是mybatis的作用了,首先要进行配置config.xml,然后配置映射文件UserMapper.xml.这些在刚下载的pdf中都有介绍,有例子。

技术分享图片

上面是项目的目录结构,我创建的有点随意,下面l两个分别是config.xml 和UserMapper.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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>


    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>


</configuration>

  

  

<?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="useraaa">
    <select id="selectById" resultType="com.test.mybatis.entity.User">
        select * from user where id = #{id}
    </select>

    <select id="selectAll" resultType="com.test.mybatis.entity.User">
        select * from user
    </select>


</mapper>

  

下面是如何读取配置文件config.xml,如何将UserMapper中的查询语句打印出表中的信息

用了testNG来测试,具体测试内容如下

import com.test.mybatis.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.testng.annotations.Test;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.List;

public class TestMyBatis {

    @Test(description = "通过InputStream读取配置config文件")
    public void TestInputStream() throws IOException {

        String resource = "config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory sessionFactory= new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession session =sessionFactory.openSession();
        String statement = "useraaa.selectById";


        User user = session.selectOne(statement,300);
        System.out.println(user);
        session.close();


    }

    @Test(description = "通过Reader读取配置config文件")
    public void Reader() throws IOException {

        Reader reader =Resources.getResourceAsReader("config.xml");
        SqlSessionFactory sessionFactory= new SqlSessionFactoryBuilder().build(reader);

        SqlSession session =sessionFactory.openSession();
        String statement = "useraaa.selectById";
        User user = session.selectOne(statement,300);
        System.out.println(user);
        session.close();
    }

    @Test(description = "读取所有的对象")
    public void selectAll() throws IOException {

        Reader reader =Resources.getResourceAsReader("config.xml");
        SqlSessionFactory sessionFactory= new SqlSessionFactoryBuilder().build(reader);

        SqlSession session =sessionFactory.openSession();
        String statement = "useraaa.selectAll";


        List<User> user = session.selectList(statement);
        System.out.println(user);
        session.close();
    }

}

  pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>mybatis01</groupId>
    <artifactId>mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.14</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.testng/testng -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>test</scope>
        </dependency>


    </dependencies>


</project>

  

mybatis使用中要注意的地方?

1. config.xml 和 Mapper.xml 中的头部分要复制正确,是不一样的,config中是configration,后者是Mapper

2. config.xml中数据的连接url,驱动,用户名和密码要全部填写正确

3.UserMapper.xml中的namespace 要用到,之后读取的是namespace.select的id的值,如下

技术分享图片

 

技术分享图片

4. 有很多报错原因是两个xml中的路径没有写对,pay attention~

 

MyBatis快速入门

标签:原因   pos   sof   epo   nbsp   doc   word   end   有一个   

原文地址:https://www.cnblogs.com/qianjinyan/p/10346569.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!