ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

学习笔记--Mybatis(一)

2022-03-06 11:19:23  阅读:118  来源: 互联网

标签:语句 映射 -- 笔记 sqlSession user sql Mybatis id


1.Mybatis简介

 1.1 原始Jdbc操作的分析

原始开发存在的问题如下:

1、数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能。

2、sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

3、查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位符位置。

 

解决方案:

1、使用数据库连接池初始化连接资源。

2、将sql语句抽取到xml配置文件中。

3、使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射。

 

1.2 什么是Mybatis

优秀的基于java的持久层框架,内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。

mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射最终执行的sql语句。

最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM(对象关系映射)思想解决了实体和数据库映射问题,对jdbc进行了封装、屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。

 

2. Mybatis的快速入门

2.1 Mybatis开发步骤

1、添加Mybatis的坐标

<dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

  

2、创建数据表

 

 

3、编写数据表对应的实体类

4、编写映射文件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">

<mapper namespace="userMapper">
    <select id="findAll" resultType="com.xc.domain.User">
        select * from user
    </select>
</mapper>

  

映射头是固定的,通过namespace.id来确定具体的某一sql语句,resultType配置成对应的结果集实体类。

5、编写核心文件sqlMapCongfig.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 default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载映射文件 -->
    <mappers>
        <mapper resource="com\xc\mapper\UserMapper.xml"/>
    </mappers>
</configuration>

  

核心文件头是固定的,里面配置数据源环境,可以配置多个环境,deflaut是其中默认的环境,

里面可以配置事务处理器,数据库种类等等。核心文件加载映射文件,映射文件对应sql语句。

6、编写测试类

   @Test
    public void test1() throws IOException {
        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得Session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得Session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作 参数就是
        List<Object> userList = sqlSession.selectList("userMapper.findAll");

        System.out.println(userList);

        sqlSession.close();
    }

  

先详细使用,之后会对这段代码进行优化,思路是获取核心配置文件,然后获得会话对象,通过会话对象执行sql语句,然后返回结果,最后关闭会话。

 

3.MyBatis的映射文件概述

 

 

 

 4.MyBatis的增删改查操作

4.1 MyBatis的插入数据操作

  <!-- 插入标签-->
    <insert id="save" parameterType="com.xc.domain.User">
        insert into user values(#{id},#{username},#{password})
    </insert>

  

   @Test
    public void test2() throws IOException {
        //自建一个插入数据
        User user = new User();
        user.setUsername("tom");
        user.setPassword("123");
        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得Session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得Session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作
        sqlSession.insert("userMapper.save",user);
        //Mybatis执行更新操作,需要提交事务
        sqlSession.commit();
        sqlSession.close();
    }

  

插入操作注意问题:

插入语句使用insert标签

在映射文件中使用parameterType属性指定要插入的数据类型

Sql语句中使用#{实体属性名}方式引用实体中的属性值

插入操作使用的API是sqlSeesion.insert(“命名空间.id”,实体对象)

插入操作涉及数据库变化,所以要使用sqlSession对象显示的提交事务,即sqlSession.commit()

4.2 MyBatis的修改数据操作

除关键部分,其余和插入操作变化不大

   <update id="update" parameterType="com.xc.domain.User">
        update user set username = #{username},password=#{password} where id=#{id}
    </update>

  

  //执行操作
        sqlSession.update("userMapper.update",user);

  

注意问题:

修改语句使用update标签

修改操作使用的API是sqlSession.update("命名空间.id",实体对象)

手动提交

4.3 MyBatis的删除操作

  <delete id="delete" parameterType="java.lang.Integer">
        delete from user where id=#{id}
    </delete>

  

  //执行操作
        sqlSession.delete("userMapper.delete",7);

  

注意问题:

删除语句用delete标签

Sql语句中使用#{任意字符串}方式引用传递的单个参数

删除操作使用的API是sqlSession.delete("命名空间.id",Object)

 

5.MyBatis核心配置文件概述

5.1 MyBatis核心配置文件层级关系

Configuration 配置

  properties 属性

  settings 设置

  typeAliases 类型别名

  objectFactory 对象工厂

  plugins 插件

  environments 环境

    environment 环境变量

    transactionManager 事务管理器

    dataSource 数据源

  databaseldProvider 数据库厂商标识

  mappers映射器

5.2 常用配置解析

1.environments标签

数据库环境的配置,支持多环境配置

 

 

事务管理器:JDBC这个配置直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。

数据眼类型有三种:

UNPOOLED:数据源的实现只是每次被请求时打开和关闭连接。

POOLED:这个数据源的实现利用“池”的概念将JDBC连接对象组织起来。

JNDI:暂时没有涉及。

 

2.mapper标签

该标签的作用是加载映射的,加载方式有如下几种:

使用相对路径的资源引用,例如:<mapper resource="xx/xx/xx/xx.xml"/>,从resource目录下开始写,最常用的一种方式。

使用完全限定资源定位符(URL)。

使用映射器接口实现类的完全限定类名。

将包内的映射器接口实现全部注册为映射器。

 

3.Properties标签

实际开发中,习惯将数据库的配置信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件

 

 

 4.typeAliases标签

mybatis框架已经为我们设置好一些常用的类型的别名,可以在parameterType中直接将包名加类名改写成别名。

如String 可以写成 string

Long 写成 long

Integer 写成 int

Double 写成 double

Boolean 写成 boolean

 

除了框架帮我们已经设置好的一些别名之外,我们也可以选择自定义一些别名。

  <typeAliases>
        <typeAlias type="com.xc.domain.User" alias="user"/>
    </typeAliases>

    

需要注意的是,自定义别名的标签段有位置要求,需要放在environment标签之前,不然会报不匹配的错误。

设置好别名之后,在映射配置文件中,参数种类可以直接使用别名来代替。

<update id="update" parameterType="user">
        update user set username = #{username},password=#{password} where id=#{id}
    </update>

  

6.MyBatis相应API

    //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得Session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得Session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

  

sqlSession是MyBatis中非常强大的一个类,主要方法有:

selectOne:查询一个

selectList:查询集合

int insert:插入

int update:更新

int delete:删除

操作事务的方式主要有:

void commit() 提交事务

void rollback() 回滚事务

 

标签:语句,映射,--,笔记,sqlSession,user,sql,Mybatis,id
来源: https://www.cnblogs.com/xiaochaoheni/p/15968724.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有