【Java】mybatis入门

4 篇文章 0 订阅
2 篇文章 0 订阅
本文详细介绍了Mybatis的基础用法,包括如何配置DAO接口、XML映射文件,实现增删改查操作,以及参数类型和结果类型的最佳实践。从新建用户到模糊查询,还涵盖了SqlSessionFactory的抽取和参数管理技巧。
摘要由CSDN通过智能技术生成

目录

1.mybatis入门 -查询所有

2.规范

3.使用Mybatis完成CRUD

1.新增用户

2.获取新增用户 id的返回值

3.新增用户 id 的返回值(字符串类型)

4.修改用户

5.删除用户

6.模糊查询

4.抽取SqlSessionFactory

5.Mybatis的参数parameterType

6.Mybatis的参数 resultType


  • MyBatis 是什么?

    • mybatis是一套位于dao层,封装了jdbc,使用了ORM对象关系映射的框架。 ​​​​​​​

1.mybatis入门 -查询所有

  1. 创建Maven工程(jar), 添加坐标

  2. 创建pojo (javabean)

  3. 创建UserDao接口

  4. 创建UserDao映射文件 (xml配置文件)

  5. 创建MyBatis核心配置文件SqlMapConfig.xml (xml配置文件)

  6. 编写java代码测试

//    1.读取核心配置文件
//    2.创建构建器 SqlSessionFactoryBuilder
//    3.使用构建器创建工厂 SqlSessionFactory工厂
//    4.问工厂要对象 SqlSession对象
//    5.问对象要代理对象 UserDao的代理对象
//    6.调用方法
//    7.关闭对象 SqlSession对象
 <!--1. 添加依赖-->
    <dependencies>
        <!--MyBatis坐标-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>

        <!--lombok 依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>
    </dependencies>

 

2.规范

Mapper接口开发需要遵循以下规范:

1、 Mapper.xml(UserDao.xml)文件中的namespace必须和mapper(Dao)接口的全限定名相同。

Type interface com.itheima.dao.UserDao is not known to the MapperRegistry.

2、Mapper.xml文件中select,update等的标签id的值必须和mapper(Dao)接口的方法名相同

Invalid bound statement (not found): com.itheima.dao.UserDao.findAll

3、Mapper.xml文件中select,update等的标签的parameterType必须和mapper(Dao)接口的方法的形参类型对应

4, Mapper.xml文件中select,update等的标签的resultType必须和mapper(Dao)接口的方法的返回值类型对应

5, Mapper.xml文件的文件名尽量和mapper(Dao)接口的名字一样

6, Mapper.xml文件的路径尽量和mapper(Dao)接口的路径在同一层目录

3.使用Mybatis完成CRUD

  1. 在Dao接口定义方法

  2. 在Dao映射文件配置

1.新增用户

//    1.读取核心配置文件
//    2.创建构建器            SqlSessionFactoryBuilder
//    3.使用构建器创建工厂     SqlSessionFactory工厂
//    4.问工厂要对象          SqlSession对象
//    5.问对象要代理对象       UserDao的代理对象
//    6.调用方法
//    7.提交事务,增删改必用
//    8.关闭对象              SqlSession对象

2.获取新增用户 id的返回值

  • 方式一 标签SelectKey获取主键

  • 方式二:属性配置

3.新增用户 id 的返回值(字符串类型)

字符串类型的主键通常就是UUID生成的一串32个字符的字符串。 数据库合并!

4.修改用户

//    1.读取核心配置文件
//    2.创建构建器            SqlSessionFactoryBuilder
//    3.使用构建器创建工厂     SqlSessionFactory工厂
//    4.问工厂要对象          SqlSession对象
//    5.问对象要代理对象       UserDao的代理对象
//    6.调用方法
//    查询数据
//    修改数据
//    执行修改动作
//    7.提交事务,增删改必用
//    8.关闭对象              SqlSession对象

5.删除用户

6.模糊查询

模糊查询要添加 % , 有两种办法来处理:
        1. 在外面传递进来参数|数据的时候,先把这个%跟查询的参数 拼接到一起,
                那么到xml里面取值的时候,直接使用#{username}来取值即可
        2. 不在外面拼接 % ,选择在 xml 拼接 %

#{}与${}的区别【面试】

  • #{}

    • 可以防止sql注入

    • 会对sql语句进行预编译|解析,传递什么参数进来,仅仅是顶替占位#{}而已。

    • 一般使用的都是这个#{}

    • #{} 背后会自动的拼接上 ' '

  • ${}

    • 不能防止sql注入

    • 不会对sql语句进行预先编译,传递什么参数进来,不会仅仅认为这数据,会和sql语句做拼接之后再解析SQL语句 ' or '1=1'

    • 一般比较少用这个,能使用#{}就先使用这个#{}

    • ${} 不会拼接上 ' ' 所以有时候,我们需要做一些order by 这样的列名指定,需要的是准确的列名,而不是 '列名'

    • 如果只有一个简单参数的话,那么名字只能用${value}不能使用其他的名字

一般来说,只要 #{} 能用的,基本都用它,只要它不能用的时候,再想想这个 ${}

增删改查

  • 增加

<insert id="" parameterType="" resultType="" keyProperty="" useGeneratedKeys="true">
    sql语句
</insert>
  • 更新

<update id="" parameterType="" resultType="" >
    sql语句
</update>
  • 删除

<delete id="" parameterType="" resultType="" >
    sql语句
</delete>
  • 查询

<select id="" parameterType="" resultType="" >
    sql语句
</select>

4.抽取SqlSessionFactory

package com.jcli.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;

/*
    这是专门用来创建SqlSession的工具类
        1. 对外提供一个方法,这个方法供其他人来获取SqlSession
        2. 对外提供一个方法,这个方法供其他人来收尾(commit &  close)
        3. 使用静态代码块来创建SqlSessionFactory
 */
public class SqlSessionFactoryUtil {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //1. 读取核心配置文件
            InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");

            //2. 创建构建器SqlSessionFactoryBuilder
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();


            //3. 使用构建器创建SqlSessionFactory工厂
            sqlSessionFactory = builder.build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 问工厂要SqlSession对象
     *
     * @return
     */
    public static SqlSession getSession() {
        //4. 问工厂要SqlSession对象
        return sqlSessionFactory.openSession();
    }

    /**
     * 关闭SqlSession
     *
     * @param session
     */
    public static void close(SqlSession session) {
//8. 关闭SqlSession
        session.close();
    }

    /**
     * 提交并且关闭
     *
     * @param session
     */
    public static void commitAndClose(SqlSession session) {
//8. 关闭SqlSession
        session.commit();
        session.close();
    }
}

5.Mybatis的参数parameterType

1.传递简单类型

#{任意字段}或者${value}

2.传递pojo对象类型

#{javaBean属性名}或者${javaBean属性名}

3.传递的包装的pojo

#{属性名.属性名} 或者${属性名.属性名} 

6.Mybatis的参数 resultType

  1. 输出简单类型 直接写 java类型名 eg: int

  2. 输出pojo对象 直接写 pojo类型名 eg: User

  3. 输出pojo列表类型 写 列表里面的泛型的类型 eg: List<User> 写User

  4. ResultMap

  5. 解决查询出来的结果的列名和javaBean属性不一致的请求

mybatis01传送门:

https://gitee.com/li-ear/jcli_ssm.git

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值