Mybatis学习之路——第一个Mybatis程序

一、第一个mybatis程序

1.1 搭建环境

① 创建一个maven的父项目
② 删除src
③ 配置maven父项目的配置文件(mysql、mybatis)
配置代码如下:

注意配置静态文件的配置

<?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">
    <parent>
        <artifactId>MybitsDemo</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jzq</groupId>
    <artifactId>Demo01</artifactId>
    <packaging>war</packaging>

    <name>Demo01 Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>Demo01</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <resources>
            <resource>
                <!-- 设定主资源目录  -->
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>

    </build>
</project>


1.2 创建maven子项目,练习Mybatis

① 配置mybatis的核心配置文件xml

& amp;是 &的转义
⭐每个mapper.xml都需要在Mybatis核心配置文件中注册!

<?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 是mybatis的核心配置文件-->
<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://ip:3306/mybatis?userSSL=true&amp;useUnicode=true&amp;charaterEncoding=UTF-8"/>
               <property name="username" value="xxxxxxxxxx"/>
               <property name="password" value="xxxxxxxxx"/>
           </dataSource>
       </environment>
   </environments>
    <!--  每个mapper.xml都需要在Mybatis核心配置文件中注册!-->
   <mappers>
       <mapper resource="com/jzq/dao/user/UserMapper.xml"/>
   </mappers>
</configuration>

② 从 XML 中构建 SqlSessionFactory

创建一个工具类
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。

package com.jzq.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;

public class MybatisUtils {

    // 从 XML 中构建 SqlSessionFactory
    // 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

③ 从 SqlSessionFactory 中获取 SqlSession

// 既然 有了 SqlSesstionFactory, 顾名思义,我们就可以从中获得SqlSession的实例了
// SqlSession 完全包含了面向数据库执行SQL命令所需的所有方法.
在上面的②中的工具类里编写如下代码

public static SqlSession getSqlSession() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }

1.3 编写代码

① 实体类

package com.jzq.pojo;

public class User {
    private String user_id;
    private String username;
    private String password;
    private String phone;
    private String head_img;

    public  User(){}

    public User(String user_id, String username, String password, String phone, String head_img) {
        this.user_id = user_id;
        this.username = username;
        this.password = password;
        this.phone = phone;
        this.head_img = head_img;
    }

    public String getUser_id() {
        return user_id;
    }

    public void setUser_id(String user_id) {
        this.user_id = user_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;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getHead_img() {
        return head_img;
    }

    public void setHead_img(String head_img) {
        this.head_img = head_img;
    }

    @Override
    public String toString() {
        return "User{" +
                "user_id='" + user_id + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", phone='" + phone + '\'' +
                ", head_img='" + head_img + '\'' +
                '}';
    }
}


② Dao接口

package com.jzq.dao.user;

import com.jzq.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> getUserList();
}


③接口实现层

这里通过xml实现
⭐ namespace是接口层
⭐ 里面对应了很多sql操作的标签,id指的是接口内的方法,resultType是该方法的返回类型

<?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">
<!--namespace=绑定了一个对应的Dao/Mapper接口-->
<mapper namespace="com.jzq.dao.user.UserMapper">
    <!--  id对应的namespace内的某个方法  -->
    <!--  resultType对应了返回结果类型  -->
    <select id="getUserList" resultType="com.jzq.pojo.User">
        select * from mybatis.user
    </select>
</mapper>

1.4 测试第一个mybatis程序

⭐获取SqlSession对象
存储这个接口中的方法
执行某个实现的方法
⭐关闭SqlSession对象
该程序中捕获异常的结构最终目的只为finally内的可以保证所有数据库资源都能被正确地关闭。

package dao.user;

import com.jzq.dao.user.UserMapper;
import com.jzq.pojo.User;
import com.jzq.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoTest {
    @Test
    public void test() {
        // 第一步:获取SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        try {
            // 方式一: getMapper
            // userDao 存储了所有这个接口中的方法
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            // 我们通过实现其中声明的一个方法getUserList(这个方法与一个UserMapper.xml绑定)
            List<User> userList = userMapper.getUserList();

            // 方式二 (通过这种方式也可以执行,但是官方不推荐)
            // List<User> userList = sqlSession.selectList("com.jzq.dao.user.UserDao.getUserList");

            for (User user:userList
            ) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭SqlSession
            sqlSession.close();
        }
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值