Mybatis必知必会
一、Mybatis动态加载数据源
在配置数据源连接时,在企业的真实开发中数据源一般都会写在配置文件中,而不会直接写在mybatis的核心配置文件中
所以,Mybatis为了方便开发人员去动态的获取数据源连接制定了一些特定的标签用于加载这些数据源。
具体做法如下:
<!--用于加载配置文件-->
<properties resource="jdbc.properties"></properties>
全部的配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--用于加载配置文件-->
<properties resource="jdbc.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 这的键要和 配置文件中的键保持一致-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
</configuration>
jdbc的配置文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC&rewriteBatchedStatements=true&characterEncoding=utf-8
jdbc.username=用户名
jdbc.password=密码
二、Mybatis参数传递
在jdbc时,参数传递可以通过?
来生成动态的SQL语句,然后进行SQL的动态赋值。但在Mybatis中
我们需要学习特定的标签进行参数的传递以及属性的赋值。
第一种方式:
#{参数名}
参数的取值 告诉 MyBatis 创建一个预处理语句(PreparedStatement)参数,在 JDBC 中,这样的一个参数在 SQL 中会由一个“?”来标识,并被传递到一个新的预处理语句中
第二种方式:
${参数名}
字符串替换 有时你就是想直接在 SQL 语句中直接插入一个不转义的字符串,就可以使用 ${}
来进行字符串的替换
单值传递:
原则: 在传递参数时,mybatis取值时和参数列表中的名字无关,和下标的索引有关
原因: java中jvm不维护形参变量
举例: 一下代码可以取到值。
List<User> getUserList(String name);
<select id="getUserList" reslutType="user">
SELECT * FROM user WHERE name = #{abc}
</select>
多值传递:
原则 如果在传递多个参数的时候,由于jvm不维护形参变量,Mybatis会按照索引下表来取值
有两种方式来进行取值
- 第一种 arg0,arg1,…
- 第二种 param1,param2,…
举例:
Map getUserByNA(String name,String age);
<select id="getUserByNA" resultType="map">
SELECT * FROM user WHERE name=#{param1} AND age=#{param2}
</select>
通过@Param注解进行参数传递 作用类似于map
import org.apache.ibatis.annotations.Param;
Map getUserByNA(@Param("name") String name,@Param("age") String age);
<select id="getUserByNA" resultType="map">
SELECT * FROM user WHERE name=#{name} AND age=#{age}
</select>
三、 Mybatis中的包扫描
在配置映射文件时,当有多个xml映射文件时,开发人员需要配置多个resource,所以Mybatis官方为了减少这种频繁的配置资源
就引入了 package 标签用于配置多个 xml资源。
<mappers>
<!--
开启包扫描之后 在映射文件中无须写全类名
配置该标签时 一定要注意 建立的文件夹要和接口的文件夹保持一致
-->
<package name="com.atguigu.mapper"/>
</mappers>
Mybatis中的主键自增回显功能
通常在进行sql语句的增加和删除时,开发者通常需要考虑增加的数据的主键时多少?此时就需要开启主键回显功能
<!--
useGeneratedKeys 开启主键回显
keyProperty 映射的属性 一般为 id
-->
<insert id="addUser" useGeneratedKeys="true" keyProperty="id">
insert into user values(null,#{name},#{age},#{sex})
</insert>