mybatis注解开发-创建maven工程,执行查询(@Select)

最终工程目录

创建mybatis工程

使用idea创建工程,如下截图:

idea maven工程修改配置

修改pom.xml配置

添加依赖

修改pom.xml文件,增加下面代码

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.1</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

在 idea2020 版本中,必须使用junit测试,所以添加 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>top.malaoshi</groupId>
    <artifactId>std_mybatis2</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

mybatis主配置文件

在 resources文件夹下创建mybatis-config.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!-- 配置环境 。default名字随意起-->
    <environments default="mysql">
    <!--    id名字必须同上面default名    -->
        <environment id="mysql">
            <!-- 配置事务管理器类型,JDBC 是 JdbcTransactionFactory.class 的别名 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源。POOLED 是 PooledDataSourceFactory.class 的别名 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3308/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>
<mappers>
    <package name="top.malaoshi.mapper"/>
</mappers>

</configuration>

注意: 由于没有了 mapper.xml 文件,所以此处通过 <package name="top.malaoshi.mapper"/> ,加载 top.malaoshi.mapper 包下的 mapper 接口

log4j日志配置文件

在 resources文件夹下创建 log4j.properties,内容如下:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

创建实体类User

创建 User类 ,该类中的属性名,与 user表 中的字段名 几乎相同,并且要有 setter 和 getter 方法

mybatis将 User类 与 user表 建立映射关系,此时该类称之为: 实体类

映射关系如下图:

package top.malaoshi.entity;

import java.io.Serializable;

public class User implements Serializable {
    private String id;
    private String username;
    private String password;
    private Integer age;
    private String sex;
    private String status;

    public Integer getAge() {
        return age;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

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

}

创建 IUserMapper 接口

package top.malaoshi.mapper;


import org.apache.ibatis.annotations.Select;
import top.malaoshi.entity.User;

import java.util.List;

public interface IUserMapper {

    @Select("select id,username,password,age,sex,status from user")
    public List<User> query();

}

解释

  • 这里使用了 @Select 查询注解,所以在调用该方法时,会自动查询 注解中的sql语句

  • 由于方法的返回类型是 List<User> ,指定了泛型,所以自动将结果中的每一行数据,封装到 User 类对象中

测试

在maven工程的test文件夹下,创建类 top.malaoshi.Test

内容如下:

package top.malaoshi;

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 top.malaoshi.entity.User;
import top.malaoshi.mapper.IUserMapper;

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

public class Test {
    @org.junit.Test
    public void test() throws IOException {

        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);

        List<User> list=mapper.query();
        for(User u:list) {
            String info = String.format("id:%s,用户名:%s", u.getId(), u.getUsername());
            System.out.println(info);
        }

        sqlSession.close();
        inputStream.close();
    }
}

执行结果:

DEBUG [main] - ==>  Preparing: select id,username,password,age,sex,status from user 
DEBUG [main] - ==> Parameters: 
DEBUG [main] - <==      Total: 4
id:1000,用户名:admin2
id:10001,用户名:李雷
id:10002,用户名:李四
id:10003,用户名:李娜

原文出处:/show_1IXd2fD5PD.html