首页 > 其他分享 >Mybatis(2022-09-29)

Mybatis(2022-09-29)

时间:2022-09-29 20:58:24浏览次数:85  
标签:xml 09 UserMapper 29 session SQL Mybatis import

SSM

SpringMVC + Spring + Mybatis

3SpringMVC:充当的就是Servlet的角色。可以理解为SpringMVC是Spring的WEB支持。

1Mybatis:充当的就是Dao层。

2Spring:充当的时一个润滑油的角色。

MybatisPlus:国内的团队,baomidou,可以写SQL,也可以不写SQL。介于Mybatis和Hibernate之间。

Hibernate:充当Dao层。不需要写SQL,自动生成并执行SQL语句。

Mybatis

历史

  • Mybatis是apache的一个开源项目IBatis,2010年,apache迁移给了Google code,改名Mybatis,2013年迁移到GitHub。
  • Mybatis3,IBatis1,IBatis2。

作用

  • 是一款优秀的持久层框架,支持定制化的SQL、存储过程以及高级映射。
  • 之前我们学过的所有的JDBC代码和手动设置参数获取结果集,都不用写了。
  • 使用简单的XML配置文件或者注解来映射原生信息,更加的方便。

持久化

持久化把数据存储在磁盘而不是内存。

  1. 程序产生的数据首先都是在内存
  2. 内存不可靠,我们需要通过一些技术把数据永久存储在硬盘上。

持久层

之前的dao层,之前我们通过反射,通过泛型,通用的dao,我们在操作不同的表或者逻辑的时候,我们之前会创建一个接口,再创建接口的实现类,实际上这个dao层,就叫持久层

优缺点

  • sql语句与代码分离,存放于xml文件中。(最牛逼的特点)
    • 优点:便于维护管理,不用在java代码中找sql语句。
    • 缺点:不能通过打断点的方式调试。通过日志来解决这个问题。
  • 动态SQL语句。(最牛逼的特点)
    • 优点:通过逻辑标签代替编写逻辑代码,生成不同的SQL。
    • 缺点:拼接复杂的SQL语句时,没有直接拼接直观。
  • 查询结果和java对象自动映射
    • 优点:保证名称之间的对应关系。可以下划线和驼峰自动转换。
    • 缺点:对开发人员的SQL语句依赖很强。

XML配置文件

约束

保证我们的xml能够使用哪些标签,保证xml的有效性。

主配置文件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:环境们
     配置数据库连接相关。可以配置多个数据库连接
   -->
    <environments default="development">
        <environment id="development">
            <!--  事务管理  -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 数据源配置 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1/ssm?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

另外一个mapper.xml

第一次使用Mybatis,需要两个文件。

  • 一个接口类mapper(就是咱们之前写的dao)Java文件,不需要我们写实现类
  • 一个接口对应着一个xml文件
  • 两个文件的名字最好相同,UserMapper.java->UserMapper.xml
  • 框架会根据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接口的全类名 -->
<mapper namespace="com.jsoft.dao.UserMapper">

<!--  写sql语句  -->
<!--
    id:mapper接口中的方法名
    resultType:方法的返回值类型,如果是entity类型,需要写全类名
    parameterType:方法的入参的类型,可以省略
    #{id}:代表方法的入参,类似于之前的?占位符,Mybatis底层使用的是什么?PreparedStatement
  -->
    <select id="selectUserById" resultType="com.jsoft.entity.User">
        select id,username,password from user where id = #{id}
    </select>

</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>
<!-- environments:环境们
     配置数据库连接相关。可以配置多个数据库连接
   -->
    <environments default="development">
        <environment id="development">
            <!--  事务管理    -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 数据源配置 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1/ssm?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    
<!-- 注册各个映射文件   -->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
    </mappers>
    
</configuration>

测试类

package com.jsoft.test;

import com.jsoft.dao.UserMapper;
import com.jsoft.entity.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.InputStream;

// 测试我们的UserMapper
public class UserMapperTest {

    @Test
    public void testSelectUserById() {
        // 构建一个session工厂
        // 需要加载mybatis的主配置文件
        InputStream inputStream = UserMapperTest.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

        // 获取session
        SqlSession session = sqlSessionFactory.openSession();
        // 获取到接口的代理实现类
        UserMapper mapper = session.getMapper(UserMapper.class);

        // 调接口里的方法
        User user = mapper.selectUserById(1);
        System.out.println(user);
    }
}

标签:xml,09,UserMapper,29,session,SQL,Mybatis,import
From: https://www.cnblogs.com/369-1/p/16743022.html

相关文章

  • maven(2022-09-29)
    Maven:项目构建工具,主流整个项目架构,source,resource,test,testresource依赖:导入的jar包。对项目进行打包。apache基金会作为一个java程序员,有必要连接一下apache的官网命......
  • JAVA学习9/29
    1、继承extends//关键字1.1、测试:子类继承父类后,能使用子类对象调用父类方法吗?可以,因为子类继承父类后,这个该方法就属于子类了。当然可以使用子类对象来调用1.......
  • springboot+mybatis 双数据源配置
    maven依赖spring-boot-starter-webmybatis-spring-boot-startermysql-connector-javalombokapplication.ymlserver:port:8080#启动端口spring:datasource:......
  • 05. MyBatis缓存
    一、MyBatis的一级缓存  一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问。  ......
  • 20220929
    20220929(中)t1智力大冲浪传送门思路​ 非常明显的贪心,能尽可能的少扣钱就少扣钱,即将每个游戏按其价值从大到小排序。那么考虑如何在该基础上加入时间的情况下贪心。......
  • 随笔0929
     ......
  • mybatis 参数为String,用_parameter 取值
    mybatis参数为String,iftest读取该参数代码:<selectid="getMaxDepartId"parameterType="java.lang.String"resultType="java.lang.String">SELECTMAX(DEPART_ID......
  • com.panie 项目开发随笔(NoF)_环境搭建(2016.12.29)
    (一)最近做的框架一直在spring+springmvc+mybatis的基础上,使用框架的好处自然是简化了自己的开发工作,定义好大的结构体系后就在里面套用方法了!可是框架的毛病......
  • mybatis中大于等于小于等于的写法
    第一种写法(1):原符号<<=>>=&'"替换符号<<=>>=&amp;&apos;"例如:sql如下:create_date_time>=#{startTime}andcreate_date_time<=#{endTime} 第二种写法......
  • MyBatisPlus入门
    1、MyBatisPlus简介MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率。官网:https://mybatis.plus/  https://mp.baomidou.com/1.1、......