MyBatis 1. 入门与使用

1. 概述

MyBatis 是支持定制化 SQL 、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。

MyBatis 的中文文档:http://www.mybatis.org/mybatis-3/zh/index.html

用 Maven 构建项目,在 pom.xml 加入如下依赖:

<dependency>
     <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>x.x.x</version>
</dependency>

2. 快速入门

1.先写个 POJO

    public class User {
        private int id;
        private String name;
        private int age;
        //get,set方法
    }

2.再添加 Mybatis 的配置文件 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>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql:///mybatis" />
                    <property name="username" value="root" />
                    <property name="password" value="root" />
                </dataSource>
            </environment>
        </environments>
    </configuration>

3.定义操作 users 表的 sql 映射文件 UserMapper.xml ,其中id是其唯一标识,#{id} 表示从传递过来的参数中取出 id 值。

    <?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.chen.userMapper">
        <select id="getUser" parameterType="int" resultType="com.chen.entity.User">
            SELECT * FROM  users where id = #{id}
        </select>
    </mapper>

4.在 mybatis-config.xml 中注册 UserMapper.xml 文件

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

5.写测试代码

public class MyBatisTest {
    @Test
    public void test() throws IOException {
        String resource = "mybatis-config.xml";

        InputStream inputStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = factory.openSession();
        try {
            User user = sqlSession.selectOne("com.chen.userMapper.getUser", 2);
            //打印结果:User{id=2, name='Jack', age=11},即测试成功
            System.out.println(user);
        } finally {
            sqlSession.close();
        }
    }
}

3. 通过自定义接口实现

1.定义一个接口 UserMapper

public interface UserMapper {
    public User getUser(Integer id);
}

2.将接口与 UserMapper.xml 配置文件绑定(修改 namespace 为接口全类名和 修改id为接口的方法)

<?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.chen.dao.UserMapper">
    <select id="getUser" parameterType="int" resultType="com.chen.entity.User">
        SELECT * FROM  users where id = #{id}
    </select>
</mapper>

3.编写测试代码

@Test
public void test() throws IOException {
    String resource = "mybatis-config.xml";

    InputStream inputStream = Resources.getResourceAsStream(resource);

    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = factory.openSession();
    try {
           //通过 getMapper 方法得到接口实现对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.getUser(2);
        //打印结果:User{id=2, name='Jack', age=11},即测试成功
        System.out.println(user);
    } finally {
        sqlSession.close();
    }
}

1.SqlSession 的实例不是线程安全的,因此是不能被共享的。

2.SqlSession每次使用完成后需要正确关闭

3.SqlSession可以直接调用方法的id进行数据库操作,但是我们一般还是推荐使用 SqlSession 获取到 dao 接口的代理类,执行代理对象的方法,可以更安全的进行类型检查操作。

4.两个重要的配置文件:

  • mybatis 的全局配置文件:包含数据库连接池信息等
  • sql 映射文件:包含每一个 sql 语句的映射信息

猜你喜欢

转载自blog.csdn.net/qq_37138933/article/details/79496135