idea中mybatis入门

在系统地学习mybatis之前,可以先写一个简单的例子,使用Idea,结合maven。首先新建一个项目,
配置pom.xml如下:核心包为mybatis和mysql驱动包,junit是为了后面的测试。日志就不用说了。

<?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>cn.edu.cqu</groupId>
    <artifactId>qxcv</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>

        <!-- mybatis核心包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.3.0</version>
        </dependency>
        <!-- mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.29</version>
        </dependency>
        <!-- junit测试包 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!-- 日志文件管理包 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>

    </dependencies>

</project>

接着在resources底下写一个配置文件config.properties,附整个项目的框架图:

这里写图片描述

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8
jdbc.username = root
jdbc.password = root

需要注意的是,要提前建好这个数据库,我们也顺便建好表,并添加一条数据进去。

这里写图片描述

那么这个时候,我们需要写一个实体类User,注意路径
cn.edu.cqu.domains

package cn.edu.cqu.domains;

public class User {

  //注意这里的属性名要与数据库中字段相同,否则获取不到值,同样不区分大小写
  private long id;

  private String name;

  private int age;

  public long getId() {
    return id;
  }

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

  public String getName() {
    return name;
  }

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

  public int getAge() {
    return age;
  }

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

接下来,写mybatis的核心配置文件mybatis-config.xml,同样在resources路径下面。

<?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="config.properties">
        <!--properties中还可以配置一些属性名和属性值 -->
        <!-- <property name="jdbc.driver" value=""/> -->
    </properties>

    <!-- 全局配置参数,需要时再设置 -->
    <!-- <settings> </settings> -->

    <typeAliases>
        <!-- 别名定义 -->
        <!-- 针对单个别名定义 type:类型的路径 alias:别名,类名不能写错
         别名可以随便起,但最好规范-->
        <typeAlias type="cn.edu.cqu.domains.User" alias="user" />
        <!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) -->
        <package name="cn.edu.cqu.domains" />
    </typeAliases>

    <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理,事务控制由mybatis -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池,由mybatis管理 -->
            <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>
        <!--通过resource方法一次加载一个映射文件 -->
        <!--注意这里的路径和xml文件 -->
        <mapper resource="mappers/user.xml" />

        <!-- 批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载 -->
        <!-- 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 -->
        <!-- 中上边规范的前提是:使用的是mapper代理方法
        <package name="...." />-->

    </mappers>

</configuration>

接着写一个xml映射文件,对应类User,路径为resources\mappers\user.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="test">

    <!-- 在映射文件中配置很多sql语句 -->
    <!-- 将sql语句封装到mappedStatement对象中,所以将id称为statement的id -->
    <!-- parameterType:指定输入参数的类型,这里指定int型 #{}表示一个占位符号 -->
    <!-- #{id}:其中的id表示接收输入的参数,参数名称就是id,如果输入 -->
    <!-- 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 -->
    <!-- resultType:指定sql输出结果的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 -->
    <!-- 表名要对,但是不区分大小写,resultType要写类名,同样不区分大小写 -->
    <select id="findUserById" parameterType="int"  resultType="user">
        SELECT * FROM user WHERE id = #{value}
    </select>
</mapper>

最后我们可以简单地写一个测试文件,注意路径:

import cn.edu.cqu.domains.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.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class UserTest {
  public SqlSessionFactory getSqlSessionFactory() throws IOException {
    // mybatis配置文件,这个地方的root地址为:resources,路径要对。
    String resource = "mybatis-config.xml";
    // 得到配置文件流
    InputStream inputStream = Resources.getResourceAsStream(resource);
    // 创建会话工厂,传入mybatis的配置文件信息
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    return sqlSessionFactory;
  }

  // 根据id查询用户信息,得到一条记录结果
  @Test
  public void findUserByIdTest() throws IOException {

    // 通过工厂得到SqlSession
    SqlSession sqlSession = this.getSqlSessionFactory().openSession();

    // 通过SqlSession操作数据库
    // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
    // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
    // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象

    // selectOne查询出一条记录(这种很麻烦的!!!往后看看)
    //这里的参数test.findUserById,test为命名空间,要与user.xml中的对应起来,
    //同理,findUserById也要在user.xml中存在,不然都会报错
    User user = sqlSession.selectOne("test.findUserById", 1);
    System.out.println(user.getId());
    System.out.println(user.getName());
    System.out.println(user.getAge());
    // 释放资源
    sqlSession.close();
  }
}

最后运行效果如下,找到了id为1的User:

这里写图片描述

扫描二维码关注公众号,回复: 154808 查看本文章

本文参考到的博客如下:
https://blog.csdn.net/lucia_fanchen/article/details/49386327
https://blog.csdn.net/javawebrookie/article/details/52654526

猜你喜欢

转载自blog.csdn.net/qxconverse/article/details/80204881