Mybatis 上手

每一个 Mybatis 应用都基于一个 SqlSesionFactory 实例。
SqlSesionFactory 用于构建 SqlSession 来进行数据库操作。
SqlSesionFactory 实例是由 SqlSessionFactoryBuilder 构建。

SqlSessionFactoryBuilder => SqlSessionFactory => SqlSession

工程结构图.png

一、 SqlSessionFactoryBuilder:

该类用于加载 数据库元配置 和数据库具体操作的相关Mapper

1、从 XML 文件中加载配置 http://www.mybatis.org/mybatis-3/zh/configuration.html
image.png
<?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-config.properties">
        <property name="username" value="123456"/>
        <property name="password" value="123456"/>
    </properties>
    <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="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/user-mapper.xml"/>
    </mappers>
</configuration>

<properties resource="mysql-config.properties"/><mapper resource ="mapper/user-mapper.xml"/> 都是从类路径中加载的,所以直接使用工程项目中的resources下的路径即可。

从 xml 配置文件中构建 SqlSessionFactory:

InputStream in = Resources.getResourceAsStream("mybatis-config.xml");//从类路径下直接加载
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);

也可以使用Java代码来构建 http://www.mybatis.org/mybatis-3/zh/getting-started.html

dataSource 中的 property 可以被<properties 中的 property 或者 <properties resource="mysql-config.properties"> 指定的 properties 文件来代替。

优先级如下:
Java 代码 >= properties 元素 中的resource属性或者url 属性指定的文件 >= propertiesproperty子元素

2、Mapper 映射文件

<mapper resource="mapper/user-mapper.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`中声明了该接口的权限定名,
    该接口中定义了数据库操作
-->
<mapper namespace="mapper.user.UserMapper">
    <select id="getUser" parameterType="String" resultType="mybatis.model.User">
        SELECT * FROM user where NAME =#{name} LIMIT 1
    </select>
</mapper>

<mapper namespace="mapper.user.UserMapper"> 对应于

package mapper.user;
import mybatis.model.User;
public interface UserMapper {
    User getUser(String name);// 指定数据库操作和返回类型
}

返回值类型:

package mybatis.model;

public class User {
    String name;
    String address;
    int age;
    String comment;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getComment() {
        return comment;
    }
    public void setComment(String comment) {
        this.comment = comment;
    }
    @Override
    public String toString(){
        return name + address;
    }
}

最终代码

public static void main(String[] args) throws IOException {
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        SqlSession session = factory.openSession();
        System.out.println(session.getMapper(UserMapper.class).getUser("bella"));
        session.close();
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 11,125评论 0 4
  • MyBatis 理论篇 [TOC] 什么是MyBatis  MyBatis是支持普通SQL查询,存储过程和高级映射...
    有_味阅读 8,072评论 0 26
  • 严格意义上《川北旧事》不算是小说,只是以石头的视角和片段式情节来反映川北的民俗风情以及80、90后的儿时记忆。 石...
    鱼呀嘛鱼摆摆阅读 2,662评论 2 2
  • 一 ...
    poolaz阅读 3,060评论 0 2
  • 四 师父累了 明知不可为而为之,这是老师吴道子常说的话,每次作为吴道子说给李雨儿的末尾话,话的前头,无非是讲那些忠...
    市井清流阅读 3,427评论 0 0