Mybatis_笔记(一)

一、Mybatis简介

1. Mybatis的理解

  Mybatis是一个基于ORM(对象关系映射)的半自动持久层框架,将数据库中表通过映射的方式,通过pojo的实体类和xml配置文件来操作。

2. Mybatis的特性

  •   Mybatis是定制化的SQL、存储过程以高级映射的优秀的持久层框架
  •   Mybatis可以使用简单的XML文件或者注解用于配置映射关系,将接口和java的pojo映射成数据库中的字段属性
  •   Mybatis是一个半自动的持久层框架

3. 和其他持久层框架的对比

JDBC ---手动的持久层框架

sql语句夹杂在java代码中,耦合度较高,后期不易维护、修改sql语句,开发效率低

Hibernate -----全自动的持久层框架

   自动生成hql语句,操作简单,开发效率高;但是sql无法修改,一些复杂的sql语句需要不经过框架实现;每一次查询都需要查询全部字段的信息,导致查询效率低

二、Mybatis实际操作

 1. Maven項目导入依赖  

<!--引入数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--mybatis的包 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>

 2. Maven項目創建核心配置文件

    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">
  <configuration>
  	
  	<!-- environments数据库环境配置 -->
  	<!-- 和Spring整合后environments配置将配废除 -->
  	<environments default="development">
  		<environment id="development">
  			<!-- 使用JDBC事务管理器 -->
  			<transactionManager type="JDBC" />
  			<!-- 数据库连接池 -->
  			<dataSource type="POOLED">
  				<property name="driver" value="${driver}"/>
  				<property name="url" value="数据库地址"/>
  				<property name="username" value="数据库账号"/>
  				<property name="password" value="数据库库密码"/>
  			</dataSource>
  		</environment>
  	</environments>
  	
  	<!-- 8.引入加载映射文件 -->
  	<mappers>
        <!--加载单个的xml文件-->
  		<mapper resource="mappers/mapper/UserMapper.xml" />
      
  	</mappers>
  </configuration>

3. 创建实体类

package com.jt.pojo;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * @author 86138
 * 时间 2021/4/2
 */
@Data  //lombok提供的注解,自动生成get\set方法
@Accessors(chain = true)  //开启链式编程
public class User {
    private Integer id;
    private String username;
    private String password;
    private String phone;
    private String email;
    private Boolean status;
    
}

4. 创建Mapper接口

public interface UserMapper {

    /**
     * Mybatis 面向接口编程有两个一致性的原则:
     * 1. 映射文件的namespace要和mapper接口的全类名保持一致,如过核心配置文件中做了类别名设置可以只写mapper文件名
     * 2. 映射文件中的SQL语句的id要和mapper文件中对应的方法名一致
     */

    /**
     * 插入
     * @param user
     */
    int insertData(User user);

}

 5. 创建Mybatis的映射文件

映射关系:

     java中的实体类   ------    数据库中的表

     java中的属性名    ------   数据库中的字段名

     java中的对象      -------    数据库中的一行数据

映射文件的命名规则: 

   mapper接口所对应的实体类名 + mapper.xml    所以一个实体类对应一张表,一张表对应一个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="接口的路径" -->
<mapper namespace="com.jt.mapper.UserMapper"> 
     <!--插入方法-->
     <insert id="insertData" >
        insert into user value (null,"root","root","1324","123@qq.com")
    </insert>
    
    <!--查询方法-->
    <select id="" resultType="User">
    </select>
    
    <!--更新方法-->
    <update id="" >
    </update>

    <!--删除方法-->
    <delete id="" >
    </delete>
</mapper>

三、Mybatis核心配置文件详解

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

    <!-- 1.properties (2)resource:属性引入外部配置文件 -->
    <properties resource="jdbc.properties">
        <!-- (3) property里面的属性全局均可使用 -->
        <property name="username" value="root"/>
    </properties>

    <!--2. 全局配置参数 -->
    <settings>
        <!-- 设置是否启动缓存 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 设置是否启用懒加载 -->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>

    <!-- 3.别名设置 载sql的xml文件可以简写实体类的路径名称-->
    <typeAliases>
        <!--  第一种方式
          type: 设置需要设置别名类型   
          alias:设置某个类型的别名 设置了alias别名就是alias的值 没有设置那么默认别名为类名 (不区分大小写)
        -->
        <typeAlias type="com.jt.pojo.User" alias="User"/>
        <!--第二种方式
           以包为单位,将这个包路径下类的别名设置为默认的类名 (不区分大小写)
        -->
        <package name="com.jt.pojo"/>
    </typeAliases>

    <!-- 4.类型转换器 -->
    <typeHandlers>
        <!-- 一个简单类型转换器 -->
        <typeHandler handler="com.mybatis.example.ExampleTypeHandler"/>
    </typeHandlers>

    <!-- 5.对象工厂 -->
    <objectFactory type="com.mybatis.example.ExampleObjectFactory">
        <!-- 对象工厂注入的参数 -->
        <property name="someProperty" value="100"/>
    </objectFactory>

    <!-- 6.插件 -->
    <plugins>
        <plugin interceptor="com.mybatis.example.ExamplePlugin">
            <property name="someProperty" value="100"/>
        </plugin>
    </plugins>

    <!-- 7.environments 配置数据库环境 default指定使用哪一个环境  default="id"-->
    <!-- 注意:::: 和Spring整合后environments配置将配废除 -->
    <environments default="development">
        <environment id="development">
            <!-- transactionManager: 设置事物管理方式
                  type: JDBC 表示当前环境执行SQL时使用JDBC事务管理器
                        MANAGED  被管理 例如:spring-->
            <transactionManager type="JDBC" />
            <!-- dataSource:数据库连接池
                 type: "POOLED\UNPOOLED\JNDI"
                       POOLED: 表示使用数据库连接池缓存数据库连接
                       UNPOOLED: 表示不使用数据库连接池
                       JNDI: 表示使用上下文的数据源
                  注意: 数据源可以在spring里进行数据源配置
             -->
            <dataSource type="POOLED">
                <!--设置连接数据库的驱动
                (1)可以直接在这里写-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--(2)通过properties 的resource引入外部配置文件来取值-->
                <property name="url" value="${jdbc.url}}"/>
                <!--(3) 通过properties 标签中的<property name="username" value="root"/>来定义-->
                <property name="username" value="${username}}"/>
                <property name="password" value="数据库库密码"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 8.引入加载映射文件 -->
    <mappers>
        <!--加载单个的xml文件-->
        <mapper resource="mappers/mapper/UserMapper.xml" />
        <!--加载这个包下的所有映射文件 -->
        <package name="mappers.mapper"/>
    </mappers>
</configuration>

特别强调: 以上标签的设置顺序是固定的不可以改变 

  environments标签是用来配置数据库环境 里面可以有多个环境通过default=“id”来指定加载那个数据库环境  

四、Mybatis获取参数的两种方式

1. Mybatis获取参数值的两种方式:

  ${}:

  •  本质是 字符串拼接 
  • SQL直接拼接
  • 所对应的变量值不会添加引号
  • 不能防止SQL注入攻击

  #{}:

  • 本质是 占位符赋值
  • SQL预编译,具有预编译效果
  • 会给对应的变量自动添加引号
  • 能够防止SQL注入攻击

2. 单个变量类型的参数

  在mapper接口中方法的参数为单个变量时,两者都可以使用

${}  ---  select * from user where id ='${id}'   要用单引号引起来

#{}  ---  select * from user where id =#{id}    自动添加引号

3. 多个变量类型的参数

  mappe接口参数为多个时,mybatis自动会将这些参数放在一个map集合里,以两种方式存储

a> 以(arg0,arg1...)为key  以参数值为value

  mapper接口层 -- list<User> getListUser(String username, String password);

  select * from user where id =#{arg0}, name=#{arg1}   ${}同理,注意添加引号

b> 以(param1,param2 ...)为key  以参数值为value

  mapper接口层 -- list<User> getListUser(String username, String password);

  select * from user where id =#{param1}, name=#{param2 }   ${}同理,注意添加引号

c> 以map集合的形式 自己将多个参数封装为一个map集合,用的就是自己定义的key

  mapper接口层 -- list<User> getListUser(Map<String,Object> map );

  select * from user where id =#{username}, name=#{password}   ${}同理,注意添加引号

4. 以实体类的方式来传递参数

使用实体类的方式可以直接使用里面的变量名称

  mapper接口层 -- list<User> getListUser(User user);

  select * from user where id =#{username}, name=#{password}   ${}同理,注意添加引号

5.  通过@param注解命名参数

mybatis会将参数封装为map,以两种方式进行存储

  mapper接口层 -- list<User> getListUser(@Param("username")String username, @Param("passwoed")String password);

a> 以@Param 注解的值为键,传递参数

  select * from user where id =#{username}, name=#{password}   ${}同理,注意添加引号

b> 以(param1,param2 ...)为key  以参数值为value

  select * from user where id =#{param1}, name=#{param2 }   ${}同理,注意添加引

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值