【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

原文地址:https://www.cnblogs.com/cckong/p/14317372.html