MyBatis简单案例

目的:通过MyBatis的一个简单案例来进一步认识到MyBatis的作用。了解其中必须写的几个文件以及其逻辑关系。MyBatis的作用为简化JDBC操作。

需求:在test数据库中的pet表中插入数据,利用MyBatis的表达

MyBatis 以SqlsessionFactoryBuilder - SqlsessionFactory - Sqlsession 三层关系产生Sqlsession语句,通过语句在DAO层中封装事务的方法,最后通过DAO层中的实例化对象对方法进行调用(中间经过CRUD语句映射的作用)。

 

一、工程的架构

模块的概述:

1)Pom.xml  工程的配置文件,负责导入依赖包,在之后的Spring框架中,这些配置文件会被注解所代替

2)pojo 层 代表的是实现类层,一个pojo 层中的类对象对应的是一张实体的表 ,要求类的属性和数据库中表的列完全对应,插入的是pet表所以 pojo 对象命名为pet

3)Dao 层代表数据持久化层,在Dao层中对于pet对象进行操作

4)resources层   这里放置的是静态资源。 mybatis.xml 放置的是数据库的配置和CRUD语句映射的文件位置。  petMapper.xml 表示CRUD语句映射,在mybatis.xml中有对它的位置说明

5)utils 层  util层 放置了MyBatis的通用工具类MyBatisUtil,通过Reader 对象去加载读取mybatis.xml ( 一个文件在编写出来之后需要有调用的位置 ) utils层中也包括了生成Sqlsession语句的方法 

二、pom.xml

其实可以为固定的内容,Maven的特性会去自动下载。导入Mybatis的依赖,mysql的依赖,junit用于测试的依赖  

<?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>cn.guyuan</groupId>
    <artifactId>testProj8</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>

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

    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

</project>

三、pojo层

package pojo;

public class pet {
    String name;
    String owner;
    char sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getOwner() {
        return owner;
    }

    public void setOwner(String owner) {
        this.owner = owner;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "pet{" +
                "name='" + name + '\'' +
                ", owner='" + owner + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

    public pet(String name,String owner,char sex){
        this.name = name;
        this.owner = owner;
        this.sex = sex;
    }
}

 

四、resources资源

mybatis.xml

Url 链接表示选择了test数据库

<?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>

    <!--    加载类路径下的属性文件-->
<!--    <properties resource="db.properties">-->
<!--    </properties>-->

    <!--    设置实体类的类型别名-->
    <typeAliases>
        <typeAlias type="pojo.pet" alias="pet"></typeAlias>
    </typeAliases>

    <!-- 设置一个默认的连接环境信息,支持多数据源 -->
    <environments default="mysql_env">
        <!-- 连接环境信息,取一个唯一的编号 -->
        <environment id="mysql_env">
            <!-- mybatis使用的jdbc事务管理方式 -->
            <transactionManager type="jdbc">
            </transactionManager>

            <!-- mybatis使用连接池方式来获取链接 -->
            <dataSource type="pooled">
                <!-- 配置与数据库交互的四个属性 -->
<!--                选择test 数据库,建立对应的表-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value=""/>
                <property name="password" value=""/>
            </dataSource>

        </environment>
    </environments>
    <mappers>
        <!--  这里放置的是Mapper文件 petMapper.xml的位置,petMapper.xml存放表映射和CRUD-->
        <mapper resource="petMapper.xml"></mapper>
    </mappers>
</configuration>

petMapper.xml

<?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="petNameSpace">
    <resultMap id="petMap" type="pet">
        <result property="name" column="name"/>
        <result property="owner" column="owner"/>
        <result property="sex" column="sex"/>
    </resultMap>



    <insert id="add2" parameterType="pojo.pet">
       insert into pet(name,owner,sex) values(#{name},#{owner},#{sex})
    </insert>
</mapper>

 

五、util

package 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.Reader;
import java.sql.Connection;

public class MyBatisUtil {
//    读取多线程的sqlsession,同时也建立sqlsessionFactory
    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try{
            Reader reader = Resources.getResourceAsReader("myBatis.xml");
            //  建立一个工厂类实例
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    //  禁止外界通过new 方法来实现
    private MyBatisUtil(){};
    //  从当前线程中获取sqlsession对象
    public static SqlSession getSqlSession(){

        SqlSession sqlSession = threadLocal.get();
        if(sqlSession==null){
            sqlSession = sqlSessionFactory.openSession();
            threadLocal.set(sqlSession);
        }

        return sqlSession;
    }

    public static void closeSqlSession()
    {
        SqlSession sqlSession = threadLocal.get();
        if(sqlSession!=null){
            sqlSession.close();
            threadLocal.remove();
        }
    }

    public static void main(String[] args) {
        //  获取连接
        Connection conn = MyBatisUtil.getSqlSession().getConnection();

    }

}

六、Dao层

放置的是实现类

package dao;

import org.apache.ibatis.session.SqlSession;
import pojo.pet;
import utils.MyBatisUtil;

public class petDao {
    public void add(pet pet) throws Exception {
        SqlSession sqlSession = null;

        try{
            // 创建语句
            sqlSession = MyBatisUtil.getSqlSession();
            // 写语句
            int i = sqlSession.insert("petNameSpace.add2",pet);
            sqlSession.commit();
        }catch (Exception e)
        {
            e.printStackTrace();
            sqlSession.rollback();
            throw e;
        }
        finally {
            MyBatisUtil.closeSqlSession();
        }
    }


    public static void main(String[] args) throws Exception {
        petDao petDao = new petDao();
        petDao.add(new pet("dio","jotaro",'M'));
    }
}

七、其他问题

在编译mybatis.xml过程中报了错,找不到petMapper.xml  其实添加了Resource 关键字则代表了在书写路径是直接定位到了resources 文件夹下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值