mybatis创建项目

导入jar包

编写pom.xml文件导入三个jar包(mysql、mybatis、lombok)

<?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>example_mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <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>
    <dependencies>
    <!--项目依赖的第三方的jar包-->
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.49</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
        <scope>provided</scope>
    </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.2</version>
            <scope>test</scope>
        </dependency>

</dependencies>

</project>

创建项目结构目录

bean文件夹存放持久化类、dao存放相应的操作类、utils存放连接数据库、mybatis-cinfig.xml存放mybatis配置信息

image-20201021185843294.png

编写mybatis-config.xml

  1. environments可包含多个环境
  2. 每个环境使用JDBC的方式来处理
  3. 连接池POOLED里面包含4个属性
  4. driver 值为com.mysql.jdbc.Driver
  5. urljdbc:mysql://localhost:3306/student_db
  6. usernameroot
  7. password123456

    <?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="mysql01">
            <environment id="mysql01">
    <!--            使用JDBC的方式来处理事物-->
                <transactionManager type="JDBC"></transactionManager>
    <!--使用数据库连接池技术对连接进行管理-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/student_db?useUnicode=true&characterEncoding=utf8&severTimezone=GMT%2B8&useSSL=false"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
    <!--注册和登记每一个实体类对应映射文件-->
    <mappers>
        <mapper class="com.mybatis.mapper.StudentMapper"/>
    </mappers>
    </configuration>

编写测试类

  1. 编写mybatis配置文件
  2. mybatis解析配置文件,得到输入流
  3. mybatis从输入流中获取数据库的要素信息,最终创建数据库对象
package com.mybatis.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 Test {
    public static void main(String[] args) throws IOException {
//    1.告诉mybatis的配置文件在哪里
        String path = "mybatis/mybatis-config.xml";
//    2.让mybatis解析这个配置文件,得到输入流
        InputStream in = Resources.getResourceAsStream(path);
//    3.mybatis会从in中获取数据库的要素信息,最终创建“数据库对象”
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession =factory.openSession();
        System.out.println(sqlSession);
    }
}

编写连接数据库类

利用静态方法直接调用,减少资源消耗

package com.mybatis.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 SessionUtils {
    //数据库连接类
    static SqlSessionFactory factory;
    static{
        //利用静态方法,最先执行,只用执行一次,减少资源消耗
        //1.编写mybatis的配置文件路径
        String path = "mybatis/mybatis-config.xml";
        //2.让mybatis解析这个配置文件,得到数据输入流
        InputStream in = null;
        try {
             in = Resources.getResourceAsStream(path);
        } catch (IOException e) {
            e.printStackTrace();
        }
        factory = new SqlSessionFactoryBuilder().build(in);
    }

    public static SqlSession openSession(){
    SqlSession sqlSession =factory.openSession();
    return sqlSession;
    }
}

编写实体类

导入lombok,省去getter和setter

package com.mybatis.bean;

import lombok.Data;

import java.util.Date;

@Data
public class Student {

    private int id;
    private String name;
    private Date birthday;
    private String gender;

}

编写实体类的映射文件

每一个数据库对应一个实体类,每一个实体类对应一个映射文件。

通过namespace.id来区别不同的语句

<?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">
<!--每一张数据表对应一个实体类-->
<!--每一个实体类对应一个映射文件-->
<!--如果sql名称一样,可以通过namespace(命名空间)来区分-->
<mapper namespace="mapper.Student">
    <select id="findAll" resultType="com.mybatis.bean.Student">
    select * from student
    </select>

    <select id="findById" resultType="com.mybatis.bean.Student">
        select * from student where id = #{id}
    </select>
</mapper>

编写sql语句的映射接口

此方法比编写映射文件更加简洁。

但是需要在 mybatis-config.xml中将注册映射文件的 resource改为 class

package com.mybatis.mapper;

import com.mybatis.bean.Student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

public interface StudentMapper {
    //根据ID查找
    @Select("select * from student where id = #{id}")
    public Student findById(Integer id);
    //查找所有内容
    @Select("select * from student")
    public List<Student> findAll();
    //更新内容
    @Update("update student set name = #{name},birthday = #{birthday},gender = #{gender} where id = #{id}")
    public void update(Student student);
    //插入内容
    @Insert("insert into student values(#{id},#{name},#{birthday},#{gender})")
    public void insert(Student student);
    //根据ID删除
    @Delete("delete from student where id = #{id}")
    public void delById(Integer id);
}

编写方法类

package com.mybatis.dao;

import com.mybatis.bean.Student;
import com.mybatis.mapper.StudentMapper;
import com.mybatis.utils.SessionUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.Date;
import java.util.List;

public class StudentDao {
    //查找该表所有内容方法
    public List<Student> findAll(){
        SqlSession sqlSession = SessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> list = mapper.findAll();
 //此方法是调用映射文件来进行查询
//      List<Student> list = sqlSession.selectList("mapper.Student.findAll");
        sqlSession.close();
        return list;
    }
    //更新
    public void update(Student student){
        SqlSession sqlSession = SessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        mapper.update(student);
        sqlSession.commit();
        sqlSession.close();
    }

    //插入
    public void insert(Student student){
        SqlSession sqlSession = SessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        mapper.insert(student);
        sqlSession.commit();
        sqlSession.close();
    }

    //删除
    public void delById(Integer id){
        SqlSession sqlSession = SessionUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        mapper.delById(id);
        sqlSession.commit();
        sqlSession.close();
    }


    //根据ID查找
    public Student findById(Integer id){
    SqlSession sqlSession = SessionUtils.openSession();
    StudentMapper mapper =sqlSession.getMapper(StudentMapper.class);
//    Student student = sqlSession.selectOne("mapper.Student.findById",id);
    Student student =mapper.findById(id);
    sqlSession.close();
    return student;
    }
    //运行测试
    public static void main(String[] args) {
//        List<Student> list = new StudentDao().findAll();
//        list.forEach(student -> {
//            System.out.println(student);
//        });
//        System.out.println(new StudentDao().findById(4));
          Student student = new Student();
          student.setId(13);
          student.setName("李四");
          student.setBirthday(new Date());
          student.setGender("女");

          new StudentDao().insert(student);

//        new StudentDao().delById(1);
    }
}

最后一定要记得在mybatis-config.xml文件里面注册和登记实体类和对应的映射文件

一段可以解决很多连接问题的url

url: jdbc:mysql://localhost:3306/test1?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false

最后修改:2020 年 10 月 31 日 11 : 08 AM
请我喝杯奶茶吧!啾咪~