【狂神Mybatis】2、第一个Mybatis程序

news/2024/5/18 22:22:39 标签: mybatis, mysql, java, jdbc, maven

第一个Mybatis程序

思路:搭建环境 --> 导入MyBatis --> 编写代码 --> 测试

1、搭建环境

新建项目

  1. 创建一个普通的maven项目

  2. 删除src目录 (就可以把此工程当做父工程了,然后创建子工程)

  3. 导入maven依赖

     <!--导入依赖-->
    <dependencies>
        <!--mysqlq驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.12</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
  4. 创建一个Module模块

2、创建一个模块

  • 编写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核心配置文件-->
    <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://localhost:3306/db_mybatis?userSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
    </configuration>
    
  • 编写mybatis工具类

    java">//sqlSessionFactory --> sqlSession
    public class MybatisUtils {
    
        static SqlSessionFactory sqlSessionFactory = null;
    
        static {
            try {
                //使用Mybatis第一步 :获取sqlSessionFactory对象
                String resource = "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(){
            return sqlSessionFactory.openSession();
        }
    }
    

3、代码编写

  • pojo实体类,实现构造方法,set/get方法,toString方法

  • Dao/Mapper接口

    java">public interface UserDao {
        public List<User> getUserList();
    }
    
  • 接口实现(Mapper.xml配置文件),由原来的UserDaoImpl转变为一个Mapper配置文件,相当于原来的的UserDaoImpl

    <?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.kuang.dao.UserDao">
        <select id="getUserList" resultType="com.hhb.pojo.User">
        select * from users
      </select>
    </mapper>
    
  • 开始测试

    注意点,常见错误:

    org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the MapperRegistry.

    MapperRegistry是什么?

    核心配置文件中注册mappers,在resource中的mybatis-config.xml文件中配置注册UserMapper.xml

    <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://localhost:3306/db_mybatis?userSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
    
        <!-- 每一个Mapper.xml 都需要在Mybatis核心配置文件中注册 -->
        <mappers>
            <mapper resource="com/hhb/dao/UserMapper.xml"/>
        </mappers>
    </configuration>
    
  • junit测试代码

    java">@Test
        public void test(){
    
            //1.获取SqlSession对象
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            //2.执行SQL
            // 方式一:getMapper
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            List<User> userList = userDao.getUserList();
            for (User user : userList) {
                System.out.println(user);
            }
    
            //关闭sqlSession
            sqlSession.close();
        }
    

可能会遇到的问题:

  1. 配置文件没有注册
  2. 绑定接口错误
  3. 方法名不对
  4. 返回类型不对
  5. Maven导出资源问题

http://www.niftyadmin.cn/n/1846255.html

相关文章

俄罗斯没有那么大,欧洲真的超小,我们看到的地图一直都错得离谱……

俄罗斯没有那么大&#xff0c;欧洲真的超小&#xff0c;我们看到的地图一直都错得离谱…… 首先要说的是&#xff0c;我们平时看到的地图&#xff0c;都是这样的&#xff1a; 这就是我们的世界。 今天要告诉你的是&#xff0c;你看到的这个地图&#xff0c;其实是错误的。。至少…

[javascript]接雨水问题

接雨水问题描述示例思路与代码描述 给定一个整形数组arr&#xff0c;已知其中所有的值都是非负的&#xff0c;将这个数组看作一个柱子高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。(数组以外的区域高度视为0) 示例 输入&#xff1a; [3,1,2,5,2,4…

【JavaWeb】邮件发送

实现邮件发送 1、邮件发送原理图 2.jar包的支持 activation-1.1.1.jar mail-1.4.7.jar 3.获取连接邮件服务器的授权码&#xff08;以连接qq邮箱为例&#xff09; 开启连接POP3/SMTP服务 4、简易文本邮件发送的实现 由上图我们可以确定几个必须步骤 1.创建session对象 …

typescript学习(5)---模块

export function square(x) {return Math.pow(x, 2); }; export function log10(x) {return Math.log10(x); }; export const PI Math.PI; 上面定义了一个简单的ES2015模块&#xff0c;定义并导出了square和log10两个函数以及常量PI。 若不想多次使用export&#xff0c;可以这…

AngularJs angular.element

angular.element 将DOM元素或者HTML字符串一包装成一个jQuery元素。 格式&#xff1a;angular.element(element); element&#xff1a;包装成jquery对象的html字符串或者dom元素 jqLite提供的方法&#xff1a; addClass()after()append()attr()bind() – 不支持命名空间,选择器…

[前端必刷75题]60.判断是否符合USD格式

判断是否符合USD格式描述代码描述 给定字符串 str&#xff0c;检查其是否符合美元书写格式 1、以 $ 开始2、整数部分&#xff0c;从个位起&#xff0c;满 3 个数字用 , 分隔3、如果为小数&#xff0c;则小数部分长度为 24、正确的格式如&#xff1a;$1,023,032.03 或者 $2.03…

【LeetCode】20、有效的括号,map和stack

问题描述 给定一个只包括 ‘(’&#xff0c;’)’&#xff0c;’{’&#xff0c;’}’&#xff0c;’[’&#xff0c;’]’ 的字符串&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意…

typescript学习(6)---静态类型概述

1、ts允许我们显式声明变量的类型&#xff1a; let foo: number 42; 明确声明foo的类型为number&#xff0c;如果在后面将foo的值改为42&#xff0c;ts编译器就会报错。2、any类型 ts中所有类都是any类的子类&#xff0c;声明为any类型的变量可以持有任何类型的值。 let foo: …