1快速入门MyBatis

开发前的准备

准备数据库表:汽⻋表t_car

确定表中的字段以及字段的数据类型

  • guide_price是decimal类型,专⻔为财务数据准备的类型
  • produce_time可以用char类型 , 格式’2022-10-11’

1快速入门MyBatis_第1张图片

使用navicat for mysql⼯具向t_car表中插⼊两条数据
1快速入门MyBatis_第2张图片

配置IDEA中maven的相关设置
1快速入门MyBatis_第3张图片

基于Maven开发一个MyBatis程序

编程步骤

第一步New Project: 如创建一个Empty Project,然后设置Project Structure(工程结构), 设置软件开发环境版本和Java的编译版本
1快速入门MyBatis_第4张图片

第二步New Module: 创建普通的Maven工程,这样生成的目录更标准
1快速入门MyBatis_第5张图片
第三步:配置Maven工程自动生成的pom.xml文件指定打包方式jar并引入相关依赖


<groupId>com.powernodegroupId>
<artifactId>mybatis-001-introductionartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>jarpackaging>


<dependency>
 <groupId>org.mybatisgroupId>
 <artifactId>mybatisartifactId>
 <version>3.5.10version>
dependency>


<dependency>
 <groupId>mysqlgroupId>
 <artifactId>mysql-connector-javaartifactId>
 <version>8.0.30version>
dependency>

第四步:在resources根目录下新建mybatis核心配置文件mybatis-config.xml , 配置文件的模板可以参考mybatis中文手册

  • 这个文件名不是必须叫做mybatis-config.xml,只是大家都采用这个名字
  • 这个文件存放的位置可以随意,但为了项目的移植性和健壮性,最好将这个配置文件放到类的根路径下面
  • 放到resources目录下的资源文件和配置文件等同于放到了类的根路径下/src路径的一级目录下, 将来打包时都会放到target/classes目录下

resources/mybatis-config.xml


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/"/>
                <property name="username" value=""/>
                <property name="password" value=""/>
            dataSource>
        environment>
    environments>
    
    <mappers>
        
        <mapper resource=""/>
    mappers>
configuration>

第五步:在resources目录下新建存放sql语句的配置文件XxxMapper.xml, 配置文件的模板可以参考mybatis中文⼿册

  • 在命令行中执行的sql语句以分号结尾 , 但配置文件中的SQL语句结尾的分号";"可以省略
  • 配置文件名和其存放的位置可以随意,一般命名规范XxxMapper.xml , 放在类的根路径下(resources目录下)

resources\CarMapper.xml


DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN">

<mapper namespace="fdsafdsa">  

<insert id="insertCar">
  insert into t_car(id,car_num,brand,guide_price,produce_time,car_type) values(null,'1003','丰田霸道',30.0,'2000-10-11','燃油车'); 
insert> 
mapper>

第六步:在mybatis-config.xml核心配置文件中指定XxxMapper.xml文件的路径用来引入文件

  • resource属性的方式引入:这种方式是从类路径当中加载资源
  • url属性的方式引入:这种方式是从绝对路径当中加载资源 , url需要指定file:/// + 文件的绝对路径的形式 (注意是三个斜杠)

<mapper resource="CarMapper.xml"/> :这种方式是从类路径当中加载资源。

<mapper url="file:///d:/CarMapper.xml"/> 

第七步:使用ibatis的类库中的内置类连接数据库完成增删改查

package com.powernode.mybatis.test;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisCompleteTest {
    public static void main(String[] args) {
        SqlSession sqlSession = null;
        try {
            // 获取SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            
            // 获取SqlSessionFactory对象(一般情况下一个数据库对应一个SqlSessionFactory对象)
            // ibatis包下的工具类Resources.getResourceAsStream方法默认从类的根路径下开始查找资源,底层是使用ClassLoader类加载器加载资源
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
            
            // 获取执行sql语句的数据库操作对象SqlSession(开启会话)
            // mybatis默认采⽤的事务管理器是JDBC,默认会开启事务,需要我们手动提交事务, 底层实际上会执行:conn.setAutoCommit(false) 
            sqlSession = sqlSessionFactory.openSession();
            
            // 这种方式实际上是不建议的,因为没有开启事务
			// sqlSession = sqlSessionFactory.openSession(true);
            
            // 通过sql语句的id执行对应的sql语句,处理相关业务
            int count = sqlSession.insert("insertCar");
            //返回值是影响数据库表当中的记录条数
            System.out.println(count);
            
            // 执行到这里,没有发生任何异常,提交事务并终止事务
            sqlSession.commit();
        } catch (Exception e) {
            // 最好回滚事务
            if (sqlSession != null) {
                sqlSession.rollback();
            }
            e.printStackTrace();
        } finally {
            // 关闭会话(释放资源)
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
}

封装MyBatis⼯具类SqlSessionUtil

每⼀次获取SqlSession对象代码太繁琐,封装⼀个⼯具类SqlSessionUtil用来返回一个SqlSession会话对象

  • 工具类中所有的方法都是静态的,不需要new对象直接采用类名即可调用(为了防止new对象构造方法可以私有化)
public class SqlSessionUtil {
    private SqlSessionUtil(){}
    // SqlSessionUtil工具类在进行第一次类加载的时候,解析mybatis-config.xml文件,创建SqlSessionFactory对象
    // 服务器启动时初始化一次sqlSessionFactory对象
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    //每调⽤⼀次openSession()可获取⼀个新的会话对象,该会话需手动提交事务
    public static SqlSession openSession(){
        return sqlSessionFactory.openSession();
        // 每调⽤⼀次openSession()可获取⼀个新的会话,该会话⽀持⾃动提交,一个数据库可以存在多个会话
        // return sqlSessionFactory.openSession(true);
    }
}

你可能感兴趣的:(MyBatis,mybatis,java)