zoukankan      html  css  js  c++  java
  • Mybatis-01

    一、mybatis准备及介绍

    mybatis避免了几乎所有的jdbc代码和手动设置参数以及获取结果集代码。

    1、如何获得mybatis

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

    github:https://github.com/mybatis/mybatis-3

    maven仓库:

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

    2、持久化:数据持久化

    持久化就是将程序的数据在持久状态和瞬时状态转化的过程

    内存:断电即失

    为什么需要持久化:有一些对象不能让他丢掉(比如账户余额...) 另一个原因就是内存太贵了,做持久化也能更好地节省内存。

    3、持久层

    Dao层 Service层 Controller层...等等都是层,每个层都有自己具体的业务

    mybatis是一款优秀的持久层框架

    框架 : 按照相应的步骤填写相应的东西,他就能帮你做原来要很多代码才能做的事情。

    就好比一张白纸,你要填写简历,你要自己画出来框框再写,才能用。现在面试的公司直接给你一张已经画好表格的纸,你只需要直接填写好个人信息就能当作简历。

    二、Mybatis程序

    1、思路:搭建环境-->导入jar包(Mybatis jar包)-->编写代码-->测试代码

    0.1、搭建环境 数据库

    0.2、新建项目 新建一个普通的maven项目 删除src目录 就可以当作父工程

      导入Maven依赖

       <!--导入依赖-->
        <dependencies>
            <!--mysql驱动jar-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.20</version>
            </dependency>
            <!--mybatis jar-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.5</version>
            </dependency>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <!--在build中配置resources,来防止我们资源导出失败的问题-->
        <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>
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>

    0.3、创建模块

    这样做的好处就是子项目再也不用去导包,因为它父项目中已经导过包了

    在创建好的模块中的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">
    <!--核心配置文件-->
    <!--自己修改property中的value参数-->
    <configuration>
        <environments default="development"><!--环境-->
            <environment id="development"><!--具体环境-->
                <transactionManager type="JDBC"/><!--事务管理,默认用的是jdbc的-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:8080/mybatis?serverTimezone=UTC&amp;userSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="space/urbeautiful/dao/UserMapper.xml"/>
        </mappers>
    </configuration>
    <!--写完得mapper记得在这里注册mapper才能使用 不然Java怎么知道你调用得mapper是谁 路径记得用/-->
    <!--不配置就会报一个异常  org.apache.ibatis.binding.BindingException: Type interface space.urbeautiful.dao.UserDao is not known to the MapperRegistry.-->

    0.4、编写mybatis工具类

    //其实就做了两件事  把资源加载进来,并创建一个能执行sql的对象
    //SqlSessionFactory  工厂模式   --->SqlSession
    public class MybatisUtils {
        private static SqlSessionFactory sqlSessionFactory;//提升作用域 方便下面方法调用 不然在trycatch中调用不到
        static{
            InputStream inputStream = null;
            try {
                //使用mybatis的第一步,获取SqlSessionFactory对象
                //有了获取SqlSessionFactory对象,我们就可以从中获得SqlSession实例了 SqlSession完全包含了面向数据库执行sql命令所需的所有方法
                String resource = "mybatis-config.xml";
                inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    if(inputStream!=null){
                        inputStream.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        //static方便调用对象
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession();//.openSession之后拿到一个SqlSession对象
        }
    }

    2、编写代码

    0.1、编写实体类 操作数据库那就要写实体类 一个表对应一个类

    0.2、接口---->接口实现类 操作实体类的实现类

    public interface UserDao {
        List<User> getUser();
    }
    <!--接口实现类  现在用.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"> <!--命名空间namespace=绑定一个对应Dao/Mapper接口 绑定之后就相当于是之前实现了这个接口--> <!-- id=“” 代表之前实现类中重写的方法名 resultType="" 代表实现类方法中的返回值类型 可以这样理解:和以前做的操作没有本质上的区别 以前是创建一个UserDao的实现类,现在我们是写一个标签 以前重写接口中的方法,现在id中设置重写的方法 以前是返回一个结果,现在在resultTtpe中设置返回值类型 以前写实现类的时候还要写一些connection prepareStatement resultSet等 现在mybatis都给简化了 现在的这个Mapper配置文件就相当于之前的实现类 --> <mapper namespace="space.urbeautiful.dao.UserDao"> <select id="getUser" resultType="space.urbeautiful.pojo.User"> select * from mybatis.user </select> </mapper>

    0.3、测试代码

    三、CRUD

    查询的时候不需要提交,因为只是在数据库中查询,并不会对表结构造成影响。

    但是增删改操作会对数据库中的表造成影响,所以必须提交事务,保持事务的特性。ACID

     

    个人对sqlSession的理解:可以把sqlSession看作是Connection,也可以把sqlSession看成是PrepareStatement;因为提交事务是connection.commit() 执行sql是PrepareStatement对象。

    sqlSession是执行sql的对象,sqlSession用于提交事务。所以看不明白时可以先把它看成是Connection + PrepareStatement结合体~

  • 相关阅读:
    python3全栈开发-并发编程的多进程理论
    python3全栈开发-补充UDP的套接字、操作系统、并发的理论基础
    python3全栈开发-什么是粘包、粘包现象、如何解决粘包
    python3全栈开发-socket编程
    python3全栈开发- 元类metaclass(面试必考题)
    浏览器窗口
    SQL 笔记
    数据库连接字符串
    获取网卡地址信息
    启动所选择的应用程序
  • 原文地址:https://www.cnblogs.com/jzspace/p/13168539.html
Copyright © 2011-2022 走看看