zoukankan      html  css  js  c++  java
  • 【MyBatis】我的mybatis第一个程序

    本文使用IDEA和maven项目搭建,数据库使用MySQL 8。

    定义:MyBatis

    • MyBatis 是一款优秀的持久层框架

    • 它支持自定义 SQL、存储过程以及高级映射

    • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作

    • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

    • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

    • 以上内容摘自官网和百度百科

    获得MyBatis

    • maven仓库

          
          <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
              <dependency>
                  <groupId>org.mybatis</groupId>
                  <artifactId>mybatis</artifactId>
                  <version>3.5.4</version>
              </dependency>
    • GITHUB:https://github.com/mybatis/mybatis-3/releases

    • 中文文档:https://mybatis.org/mybatis-3/zh/getting-started.html

    • 数据库准备

     

    CREATE DATABASE `mybatis`;
    
    USE `mybatis`;
    
    CREATE TABLE `user`(
      `id` INT(20) NOT NULL PRIMARY KEY,
      `name` VARCHAR(30) DEFAULT NULL,
      `pwd` VARCHAR(30) DEFAULT NULL
    )ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    INSERT INTO `user`(`id`,`name`,`pwd`) VALUES 
    (1,'狂神','123456'),
    (2,'张三','123456'),
    (3,'李四','123890')

    sql语句

    1. 导入基本依赖

           使用Maven项目导入基本依赖

         
    <?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>org.example</groupId>
        <artifactId>MybatisDemo</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
        <modules>
            <module>Mybatis-01</module>
        </modules>
        <dependencies>
            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.21</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.mybatis/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>
    
        <build>
            <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>
    
                </resource>
            </resources>
        </build>
    </project>

    2. 配置mybatis-configxml文件

      在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>
        <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://localhost:3306/mybatis?useUnicode=true&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=UTF-8&amp;useSSL=FALSE"/>
                    <property name="username" value="root"/>
                    <property name="password" value=""/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="com/lei/dao/UserMapper.xml"/>
        </mappers>
    </configuration>

    3.创建sqlSessionFactory工具类及其对象

      创建MybatisUtils类,出于开发习惯按以下结构配置。

    package com.lei.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;
    
    /**
     * @Description: sqlSessionFactory-->sqlSession
     * //每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。
     *  SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。
     *  而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
     * @Author: cckong
     * @Date: 2021/1/23
     */
    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
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession();
        }
    }

    4.编写代码

    示例

    • 注意事项:要把IDEA的编译方式改成UTF-8,否则编译出来的xml文件中文是乱码,导致程序执行会报错:1字节的UTF-8序列的字节1无效

    • 总览

    • 实体类User

    package com.lei.pojo;

    public class User {
       private int id;
       private String name;
       private String 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;
      }

       public User() {
      }

       public User(int id, String name, String pwd) {
           this.id = id;
           this.name = name;
           this.pwd = pwd;
      }
    }
    • Mapper接口(UserDao)

    public interface UserDao {
       List<User> getUserList();
    }
    • Mapper对应xml文件(UserMapper.xml)文件

      •   注意这个文件名字和路径必须和我们第一个xml配置文件:mybatis-config.xml中最后一项配置的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">
    
    <mapper namespace="com.lei.dao.UserDao">
    
    
        <select id="getUserList" resultType="com.lei.pojo.User">
           select * from mybatis.user
       </select>
    
    </mapper>
     

    测试结果

    拓展1

    • java 7开始支持try-with-resource方法,写法是:

    try(在这里放入要new的对象){
       
    }catch(){
       
    }
    try catch执行完以后会自动关闭对象的资源,用于IO或者sqlSession都可以,其实就相当于省略了finally的关闭资源
    • 就可以改成这样


           try(SqlSession sqlSession = MybatisUtils.getSqlSession()){
               //执行SQL
               //方式一:getMapper
               UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
               List<User> userList = userMapper.getUserList();

               for (User user : userList) {
                   System.out.println(user);
              }
          }catch (Exception e){
               e.printStackTrace();
          }

    • 但是如果是maven项目,pom文件要制定jdk版本,否则会发生编译错误:Try-with-resources are not supported at language level '5’

        <build>
           <plugins>
               <plugin>
                   <groupId>org.apache.maven.plugins</groupId>
                   <artifactId>maven-compiler-plugin</artifactId>
                   <configuration>
                       <source>8</source>
                       <target>8</target>
                   </configuration>
               </plugin>
           </plugins>
       </build>

    拓展2

    除了使用getMapper方法外,还可以使用以下方式调用:

    //获得sqlSession对象
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    try{
       //方式二:
       List<User> usersList = sqlSession.selectList("com.rzp.dao.UserMapper.getUserList");
       for (User user : usersList) {
           System.out.println(user);
      }
    }catch (Exception e){
       e.printStackTrace();
    }finally {
       //关闭sqlSession
       sqlSession.close();

    }
    • 这是旧版本的方法。

    • 显然,这个方法在编写的时候必须选择合适的方法,而且调用的UserMapper的方法时也没有那么方便。这个方法官方不推荐使用。

    可能遇到的问题 

    1.运行显示不支持Java发行版本:5

    或者 不支持Java发行版本:14

    根据我以前的博客进行更改:https://www.cnblogs.com/cckong/p/14198638.html

    2.注意路径的符号  究竟是   /    还是     .

     

    3.如果把xml文件放进了Java文件夹下 

    如下

     需要在pom里面进行配置

     <build>
            <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>
    
                </resource>
            </resources>
        </build>

    在main文件夹下的两个文件夹  Java  resource   里面的xml文件以及properties文件 都可以导出

    4.在xml里面尽量不要出现中文注释,如果要写中文注释参考上面把xml设置为uf-8

    5.如果数据库无法连接设置SSL为false

  • 相关阅读:
    linux上配置apache实现二级域名访问目录
    C++数组的使用
    linux 上安装C++编译环境
    qt下qmake:提示could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or directory
    Qt4.8.5移植
    oracle使用已有vid快速新建虚拟机
    各种编程语言鸡汤网站
    linux下 git使用小记下
    CodeForces-650B Image Preview 二分+模拟
    HDU-6351 Beautiful Now 全排列暴力
  • 原文地址:https://www.cnblogs.com/cckong/p/14317372.html
Copyright © 2011-2022 走看看