mybatis学习02:第一个Mybatis程序

mybatis学习02:第一个Mybatis程序

  • 第一个Mybatis程序:

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

       

    • 搭建环境:

      • 搭建数据库;

        -- 创建数据库
        CREATE DATABASE `mybatis`;

        -- 使用数据库
        USE `mybatis`;

        -- 创建表
        CREATE TABLE `user`(
        `id` INT NOT NULL ,
        `name` VARCHAR(50) DEFAULT NULL,
        `pwd` VARCHAR(50),
        PRIMARY KEY (`id`)
        )ENGINE=INNODB DEFAULT CHARSET=UTF8;

        -- 插入数据
        INSERT INTO `user` (`id`,`name`,`pwd`)VALUES(1,'demo','1111111');
        INSERT INTO `user` (`id`,`name`,`pwd`)VALUES(2,'demo1','123456');
        INSERT INTO `user` (`id`,`name`,`pwd`)VALUES(3,'demo2','1111111');
      • 新建项目:

        • 新建一个普通maven项目;

        • 删除src目录 ( 删除后当前项目就可以当作父工程 );

        • 导入依赖

          <!-- mybatis -->
          <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis</artifactId>
             <version>3.5.9</version>
          </dependency>

          <!-- mysql驱动-->
          <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>8.0.28</version>
          </dependency>

          <!-- junit-->
          <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>4.11</version>
          </dependency>

           

      • 创建一个Model(模块):

        • 编写mybatis核心配置文件: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.cj.jdbc.Driver"/>
                         <property name="url" value="jdbc:mysql://locahost:3306/demo?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8"/>
                         <property name="username" value="root"/>
                         <property name="password" value="root"/>
                     </dataSource>
                 </environment>
             </environments>

             
          </configuration>
        • 编写mybatis工具类;

          /**
          * SqlSessionFactory-->sqlSession
          *
          */
          public class MybatisUtils {

             private static SqlSessionFactory sqlSessionFactory ;
             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();
            }


          }

           

      • 编写代码:

        • 实体类

          /**
          * 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;
            }

             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;
            }

             @Override
             public String toString() {
                 return "User{" +
                         "id=" + id +
                         ", name='" + name + '\'' +
                         ", pwd='" + pwd + '\'' +
                         '}';
            }
          }
        • Dao接口

          public interface UserDao {
             List<User> getUserList();
          }
        • 接口实现类:由原来的UserDaoImpl转换为一个Mapper配置文件

          <?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.ljxdemo.dao.UserDao">

             <!--查询语句-->
             <select id="getUserList" resultType="com.ljxdemo.pojo.User">
                select * from mybatis.user;
             </select>


          </mapper>

           

      • 测试!

        • 注意点1:org.apache.ibatis.binding.BindingException:

          • Type interface com.xxx.dao.UserDao is not known to the MapperRegistry.

          • MapperRegistry是什么:核心配置文件中注册mappers

          • 产生原因:mapper的核心配置文件没有注册该mapper.xml

            <!--每一个Mapper.xml都需要在mybatis核心配置文件中注册 -->
            <mappers>
               <mapper resource="com/ljxdemo/dao/UserMapper.xml"/>
            </mappers>
        • 注意点2:java.lang.ExceptionInInitializerError

          • The error may exist in com/ljxdemo/dao/UserMapper.xml

          • 产生原因:因为该Mapper配置文件在java下面,maven的pom文件build的时候,需要配置该资源;(maven是约定大于配置)

            <!--在build中配置resources,来防止我们资源导出失败的问题-->
            <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>
        • 测试类:

          public class UserDaoTest {

             @Test
             public void test(){
                 //第一步:获得SqlSession对象
                 SqlSession sqlSession = MybatisUtils.getSqlSession();
                 //执行SQL:方式1
                 UserDao userDao = sqlSession.getMapper(UserDao.class);
                 List<User> userList = userDao.getUserList();
                 for (User user : userList) {
                     System.out.println("id:"+user.getId());
                     System.out.println("name:"+user.getName());
                     System.out.println("pwd:"+user.getPwd());
                }
                 //关闭SqlSession
                 sqlSession.close();
            }

          }
        • 可能会遇到的问题:

          • 配置文件没有注册;

          • 绑定接口错误;

          • 方法名不对;

          • 返回类型不对;

          • Maven导出资源问题;

           

 

 

posted @   gzs1024  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示