MyBatis入门(三)---接口+注解的方式

一、使用meavn创建项目,并导入相应的包

<?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>me.mybatis</groupId>
    <artifactId>mybatis-study1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- mybatis核心包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</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>
    </dependencies>

</project>

二、创建数据库和表,针对MySQL数据库

create database mybatis;
use mybatis;
CREATE TABLE `User` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);
INSERT INTO `User` VALUES (1, 'test', 18);
INSERT INTO `User` VALUES (2, '张三', 25);

三、添加Mybatis的配置文件

1、在src/main/resources下创建mysql.properties文件,代码如下

properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.0.111:3306/mybatis
jdbc.username=root
jdbc.password=root

2、在src/main/resources下创建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>
    <properties resource="mysql.properties"/>
    <settings>
        <!--全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载,默认值为false-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。默认值为true-->
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>
    <!--对事务的管理和连接池的配置-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED"><!--POOLED:使用Mybatis自带的数据库连接池来管理数据库连接-->
                <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>
</configuration>

四、创建数据库表对应的实体类

在src/java下新建一个包me.mybatis.entity,然后在该包下创建一个java文件,文件名User,增加代码如下 :

package me.mybatis.entity;

/**
 * User 表所对应的实体类
 */
public class User {
    //实体类的属性和表的字段名称一一对应
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int 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;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
}

五、创建接口并添加注解

在src/java下新建一个包me.mybatis.dao,然后在该包下创建一个java接口文件,文件名IUser,增加代码如下 :

package me.mybatis.dao;

import me.mybatis.entity.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

public interface IUser {
    @Select("select * from User where id = #{id}")
    public User getUserById(int id);

    @Select("select * from User")
    public List<User> getUserList();

    @Insert("insert into User (name, age) values (#{name}, #{age})")
    public void insertUser(User user);

    @Update("update User set name = #{name}, age = #{age} where id = #{id}")
    public void updateUser(User user);

    @Delete("delete from User where id = #{id}")
    public void deleteUser(int userId);
}

User.java 对应的 XML 配置文件UserMapper.xml 可以省略,不用创建,

即:使用注解方式,不需要配置 SQL映射文件 UserMapper.xml

六、编写测试类

src/main/resources下创建一个文件夹mapper,在该文件夹下创建一个UserMapper.xml文件,代码如下

package me.mybatis.test;

import me.mybatis.dao.IUser;
import me.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 java.io.Reader;
import java.util.List;

public class UserTest {

    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    static {
        try {
            String resource = "mybatis-config.xml";
            reader = Resources.getResourceAsReader(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            //使用注解时,不需要使用SQL映射文件,但是需要在此添加接口类。
            sqlSessionFactory.getConfiguration().addMapper(IUser.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // 用户数据列表
        getUserList();
        // 插入数据
//        testInsert();

        // 更新用户
//        testUpdate();

         //删除数据
//        testDelete();
    }


    private static void getUserList() {
        SqlSession session = sqlSessionFactory.openSession();
        IUser iUser = session.getMapper(IUser.class);
        List<User> users = iUser.getUserList();
        for (User user : users){
            System.out.println(String.format("[%d, %s, %d]", user.getId(), user.getName(), user.getAge()));
        }
    }

    private static void testInsert() {
        SqlSession session = sqlSessionFactory.openSession();
        IUser iUser = session.getMapper(IUser.class);
        User user = new User();
        // 设置id和不设置id都一样,自动增加
//        user.setId(10);
        user.setName("Lili");
        user.setAge(25);
        iUser.insertUser(user);
        // 一定要进行commit,否则操作失败
        session.commit();
        getUserList();
    }

    private static void testUpdate() {
        SqlSession session = sqlSessionFactory.openSession();
        IUser iUser = session.getMapper(IUser.class);
        User user = iUser.getUserById(2);
        user.setName("Luxi");
        iUser.updateUser(user);
        session.commit();
        getUserList();
    }


    private static void testDelete() {
        SqlSession session = sqlSessionFactory.openSession();
        IUser iUser = session.getMapper(IUser.class);
        iUser.deleteUser(2);
        session.commit();
        getUserList();
    }
}

猜你喜欢

转载自blog.csdn.net/u011026329/article/details/80849887