第一个Mybatis 程序

第一个Mybatis 程序

1.在数据库创建一张user表:

 2.新建一个maven项目:

博客:https://www.cnblogs.com/love2000/p/14155577.html

3.导入pom依赖:

opm.xml 文件下:

    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--Mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--junit 单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

4.建立mybatis核心配置文件:

 在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核心配置文件-->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>  <!--数据库驱动配置-->
                <!--数据库连接url配置 之前jdbc的& 符号这里是不能直接使用的 需要 &amp; 进行转义-->
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;useSSL=false&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai&amp;autoReconnect=true&amp;failOverReadOnly=false"/>
                <property name="username" value="root"/>  <!--数据库用户名-->
                <property name="password" value="1234"/>  <!--数据库密码-->
            </dataSource>
        </environment>
    </environments>

</configuration>

把上面的配置 复制进 mybatis-config.xml

5.编写mybatis工具类:

 新建一个utils包来存放我们的工具类

 在utils下新建一个MybatisUtils 来实现mybatis工具类

mybatis工具类要做两件事情:

1.获取SqlSessionFactory对象

2.返回SqlSession实例(SqlSession实例 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句)

package com.xiaofu.utils;

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.IOException;
import java.io.InputStream;

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory = null;
    static {

        try {
            //使用mybatis第一步:获取sqlSessionFactory对象
            String resource = "org/mybatis/example/mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //既然有了sqlSessionFactory,顾名思义,我们就可以从中获取SqlSession的实例了。
    //SqlSession 完全包含了面向数据库执行sql 命令所需的所有方法
    public static SqlSession getSqlSession(){
        //返回 SqlSession 实例
        /*全的写法是这样的
        SqlSession sqlSession = sqlSessionFactory.openSession();
         return sqlSession;*/
        
        return sqlSessionFactory.openSession();
    }
}

将上面的代码复制进 MybatisUtils 。

6.编写数据库对应pojo实体类:

 在pojo新建一个User类当实体类

package com.xiaofu.pojo;

//实体类
public class User {
    //字段要对应数据库的字段
    private int id;
    private String name;
    private String pwd;

    //无参构造器
    public User() {
    }

    //有参构造器
    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    //get和set方法
    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 String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    //重写toString
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}

上面是实体类的代码。

7.编写DAO接口:

 在dao下新建一个UserDao(官方文档上要求取名为 .....Mapper 这里简单取名为UserDao方便理解)接口

UserDao代码:

package com.xiaofu.dao;

import com.xiaofu.pojo.User;

import java.util.List;

public interface UserDao {

    //获取所有的用户
    List<User> getUserList();
}

8.编写实现类:

在jdbc中实现类,需要继承它的接口,然后实现它 但在mybatis中只需要用 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">

<!--namespace= 绑定一个Dao/mapper接口-->
<mapper namespace="com.xiaofu.dao.UserDao">
<!--    select查询语句  id是接口的方法名 resultType是返回的类型-->
    <select id="getUserList" resultType="com.xiaofu.pojo.User">
      select * from text.user
    </select>

</mapper>

9.junit测试:

 在src下新建一个text 来做测试文件夹 后面的测试类也写成对应的目录结构

 UserDaoText 代码:

package com.xiaofu.dao;
import com.xiaofu.pojo.User;
import com.xiaofu.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoText {
    @Test
    public void text(){
        //第一步:获取sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //第二步:执行sql
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }

        //第三步:关闭sqlSession
        sqlSession.close();
    }

}

现在运行一下测试类:

 就会发现报错了 他说没有找到 UserMapper.xml文件 这是在mybatis-config.xml 中没有注册我们写好的实现类mapper

来到mybatis-config.xml

 注册写好的mapper实现类

UserMapper.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核心配置文件-->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>  <!--数据库驱动配置-->
                <!--数据库连接url配置 之前jdbc的& 符号这里是不能直接使用的 需要 &amp; 进行转义-->
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;useSSL=false&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai&amp;autoReconnect=true&amp;failOverReadOnly=false"/>
                <property name="username" value="root"/>  <!--数据库用户名-->
                <property name="password" value="1234"/>  <!--数据库密码-->
            </dataSource>
        </environment>
    </environments>

<!-- 每一个 mapper.xml 都需要在mybatis核心配置文件中注册   -->
    <mappers>
        <mapper resource="com/xiaofu/dao/UserMapper.xml"/>
    </mappers>


</configuration>
View Code

再次运行:

 还是找不到写好的UserMapper为什么呢?

 查看生成的target文件就会发现 dao下面并没生成 UserMapper.xml 这是maven的资源导出问题 我们写好了的UserMapper并没有被导出 怎么解决呢?

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

要在pom.xml文件中加上 上面的代码 这样我们写的xml文件就会被识别了(如果有子项目也要在子项目中的pom.xml中加上这个)。

再次运行测试类:

 可以看到 用户的数据已经被查出来了。

 

 

 

 

 

 

 

 

 

 

posted @ 2020-12-28 15:41  lovelife80  阅读(85)  评论(0编辑  收藏  举报