【MyBatis】Mybatis的增删改查与配置文件的使用

一、初识MyBatis

MyBatis官网:MyBatis官网
1.什么是MyBatis
MyBatis是一个支持普通sql查询、存储过程以及高级映射的持久层框架,MyBatis框架也被称为ORM(Object/Relational Mapping,对象关系映射)框架

ORM的主要作用是在编程中,使用面向对象的方式来操作持久化对象,把面向对象的概念与数据库中表的对应起来。
在这里插入图片描述

举个栗子:我定义一个类,此时就对应着数据库的一张表,这个对象的实例,就对应着表中的一条记录。

Java概念 数据库概念
属性 字段/列
对象 记录/行

2.特点
(1)轻量级,性能出色,面向接口编程
(2)sql与Java业务代码分离
(3)可以使用xml或注解用于配置和映射
3.MyBatis面向接口编程的两个一致:
(1)映射文件的namespace要和mapper接口的全类名保持一致
(2)映射文件中sQL语句的id要和mapper接口中的方法名一致
在这里插入图片描述
4.Mybatis框架的执行流程
(1)读取mybatis配置文件;
(2)加载映射文件xxxMapper.xml;
(3)构建会话工厂SqlSessionFactory;
(4)构建会话对象SqlSession;
(5)Executor执行器,执行相关操作;
(6)MappedStatement对象;
(7)输入映射;
(8)输出映射;

@Test
public void insertUser() throws Exception {
    
    
    // 1.读取配置文件
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
    // 2.根据配置文件构建SqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    // 3.通过sqlSessionFactory创建SqlSession
    //SqlSession默认不自动提交事务,若需要自动提交,需要设置sqlSessionFactory.openSession(true)即可自动提交
    SqlSession session = sqlSessionFactory.openSession(true);
    // 4.使用SqlSession对象执行映射文件中定义的sql,并返回映射结果
    // 4.1获取mapper接口对象
    UserMapper userMapper = session.getMapper(UserMapper.class);
    // 4.2测试功能
    int result = userMapper.insertUser();
    // 4.3提交事务
    //session.commit();
    // 4.4输出结果
    System.out.println("result="+result);
    //5.关闭SqlSession
    session.close();
}

5.log4j日志的级别
FATAL(致命)> ERROR(错误)> WARN(警告)> INFO(信息)> DEBUG(调试)
从左到右打印的信息越来越详细。
6.四种mapper映射文件的引入方式

<!-- 配置映射文件:用来配置sql语句和结果集类型等 -->
<!--1.使用类路径引入-->
<mappers>
    <mapper resource="com/jd/wds/mappers/ParameterMapper.xml"/>
</mappers>
<!--2.使用本地文件路径引入-->
<mappers>
    <mapper url="file:\\\E:\Spring\Mbatis\mybatis-demo02\src\main\resources\com\jd\wds\mappers\ParameterMapper.xml"/>
</mappers>
<!--3.使用接口类引入-->
<mappers>
    <mapper class="com.jd.wds.mappers.ParameterMapper"/>
</mappers>
<!--4.使用包名引入-->
<mappers>
    <package name="com.jd.wds.mappers"/>
</mappers>

二、Mybatis开发说明

1.需要引入的依赖

<!-- mybatis依赖 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.0</version>
</dependency>
<!-- MySQL数据库依赖 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
</dependency>
<!--Junit单元测试依赖-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<!--log4j日志管理-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

2.查询功能的标签必须设置resultType或resultMap
resultType:设置默认的映射关系(字段名和属性名一致)
resultMap:设置自定义的映射关系(字段名和属性名不一致、多对一、一对多映射)
3.对user表的增删改查操作(UserMapper.xml)

<!--1.插入一条记录-->
<insert id="insertUser">
 insert into user values(null,"小王","男",17,"[email protected]")
</insert>
<!--2.删除一条记录-->
<delete id="deleteUser">
delete from user where id = #{id}
</delete>
<!--3.修改一条记录-->
<update id="updateUserById">
update user set name = "小张" where id = #{id}
</update>
<!--4.查询一条记录-->
<select id="findUserById" resultType="com.jd.wds.pojo.User" >
select * from user where id = #{id}
</select>
<!--5.查询所有记录-->
<select id="findAllUser" resultType="com.jd.wds.pojo.User">
select * from user
</select>

4.mybatis核心配置文件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>
    <!-- 1.引入外部资源文件 -->
    <properties resource="jdbc.properties"></properties>
    <!-- 2.设置驼峰匹配 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <!-- 3.设置包扫描(别名) -->
    <typeAliases>
        <package name="cn.itcast.pojo"/>
    </typeAliases>
    <!-- 4.配置环境:可以配置多个环境,default:配置某一个环境的唯一标识,表示默认使用哪个环境 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 配置连接信息 -->
                <property name="driver" value="${jdbc.driverClass}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 5.配置映射文件:用来配置sql语句和结果集类型等 -->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

三、Mybatis获取参数值两种方式

Mybatis获取参数值有两种方式:#{} 和 ${}
#{}本质:占位符?赋值
${}本质:字符串拼接
(1)mapper接口的方法参数为单个的字面量类型,可以通过#{} 和 ${}以任意的名称获取参数值( ${} 需要加单引号)

<select id="findUserByName" resultType="com.jd.wds.pojo.User">
    select * from user where name = '${name}'
    <!--select * from user where name = #{name}-->
</select>

(2)mapper接口方法的参数为多个时,以两种方式存储:
① 以0,1…为键,以参数为值;
② 以param1,param2为键,以参数为值;
此时只需要使用{arg0}或{param1}的形式访问值即可( ${}需要加单引号)

<select id="checkLogin" resultType="com.jd.wds.pojo.User">
    select * from user where username=#{0} and password=#{1}
    <!--select * from user where username='${param1}' and password='${param2}'-->
</select>

(3)mapper接口方法的参数为多个时,可以将这些参数手动放在一个map集合中存储,只需要通过#{} 和 ${}以键的形式访问值即可( ${}需要加单引号)

<select id="checkLoginByMap" resultType="com.jd.wds.pojo.User">
    <!--select * from user where username = #{username} and password = #{password}-->
    select * from user where username = '${username}' and password = '${password}'
</select>
@Test
public void checkLoginByMap(){
    
    
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    ParameterMapper parameterMapper = sqlSession.getMapper(ParameterMapper.class);
    Map<String, Object> hashMap = new HashMap<>();
    hashMap.put("username","小张");
    hashMap.put("password","2356");
    User user = parameterMapper.checkLoginByMap(hashMap);
    System.out.println(user);
}

(4)mapper接口方法的参数是实体类型的参数,只需要通过#{} 或 ${}的方式访问属性值即可( ${}需要加单引号)

<insert id="insertUser" >
    <!--insert into user values(null,#{username},#{password},#{age},#{email})-->
    insert into user values(null,'${username}','${password}','${age}','${email}')
</insert>

(5)使用@Param注解命名参数,此时mybatis会将这些参数放在一个map集合中,以两种方式进行存储:
① 以@param注解的值为键,以参数为值;
② 以param1,param2…为键,以参数为值;
此时只需要使用{arg0}或{param1}的形式访问值即可( ${}需要加单引号)

User checkLoginByParam(@Param("username")String username,@Param("password") String password);
<select id="checkLoginByParam" resultType="com.jd.wds.pojo.User">
    <!--select * from user where username = #{username} and password = #{password}-->
    select * from user where username = #{param1} and password = #{param2}
</select>

猜你喜欢

转载自blog.csdn.net/weixin_46081857/article/details/123286914