首页 > 其他分享 >MyBatis--快速入门

MyBatis--快速入门

时间:2023-08-13 16:24:47浏览次数:41  
标签:入门 -- sqlSession user MyBatis import password id

MyBatis--1.快速入门

MyBatis简介

原始jdbc操作的弊端

  1. 创建、释放频繁导致系统资源浪费
  2. sql语句在代码中硬编码,不易维护
  3. 查询操作时,需要手动将结果集中的数据封装到实体中。插入操作同理需要手动

解决方案:

  1. 使用数据库连接池初始化连接资源
  2. 将sql语句抽取到xml配置文件中
  3. 使用反射、内省等底层技术,自动将实体与表进行属性和字段的自动映射

MyBatis简介

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

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

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

MyBatis快速入门

MyBatis开发步骤:

  1. 添加MyBatis的坐标

        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.32</version>
            </dependency>
    
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.6</version>
            </dependency>
    <!--        测试-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
    <!--        日志-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
            </dependency>
        </dependencies>
    
  2. 创建user数据表

  3. 编写user实体类

    public class User {
        private int id;
        private  String username;
        private  String password;
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    '}';
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }
    
  4. 编写映射文件UserMapper.xml(写sql语句)

    <?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="userMapper">
    <!--    resultType是得到的结果封装成的对象-->
        <select id="findAll" resultType="com.xxx.User">
            select  * from user
        </select>
    
    </mapper>
    
  5. 编写核心文件SqlMapConfig.xml(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>
    <!--    配置数据源的环境 default默认环境的id-->
        <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://localhost:3306/jdbcstudy"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        
        <!--    加载映射文件-->
        <mappers>
            <mapper resource="com/xxx/mapper/UserMapper.xml"/>
        </mappers>
    </configuration>
    
  6. 编写测试类

    在test目录下创建一个测试类

package com.xxx;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.lf5.util.Resource;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class test {
    @Test
    public  void  test1() throws IOException {
//        获取配置文件Resources是ibatis包下的
        InputStream resourceAsFile = Resources.getResourceAsStream("sqlMapConfig.xml");
//        获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsFile);
//        获得session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
//        执行操作,userMapper是映射文件中的一个命名空间,findAll是该命名空间下的一个id
        List<User> userList = sqlSession.selectList("userMapper.findAll");
//        打印数据
        System.out.println(userList);
//        释放资源
        sqlSession.close();
    }
}

结果:

映射文件概述

MyBatis增删改查

insert操作

映射文件中:

<!--    插入 parameterTyp是传入参数-->
    <insert id="save" parameterType="com.xxx.User">
--         参数是com.xxx.User的属性名
        insert  into user values (#{id},#{username},#{password})
    </insert>

测试:

//        模拟user对象
        User user = new User();
        user.setId(5);
        user.setPassword("123456");
        user.setUsername("lili");
//        获取配置文件Resources是ibatis包下的
        InputStream resourceAsFile = Resources.getResourceAsStream("sqlMapConfig.xml");
//        获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsFile);
//        获得session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
//        执行操作,userMapper是映射文件中的一个命名空间,findAll是该命名空间下的一个id
        sqlSession.insert("userMapper.save",user);
//      MyBatis更新时需要手动提交事务,在sqlSessionFactory.openSession()设置参数为true会自动提交
		sqlSession.commit();
//        释放资源
        sqlSession.close();

相关注意:

update操作

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

测试和insert同理,只需要修改

 sqlSession.update("userMapper.update",user);

delete操作

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

测试和insert同理,只需要修改

sqlSession.delete("userMapper.delete",7);

MyBatis核心配置文件

environments标签介绍

事务管理器和数据源类型:

mappers标签

使用mapper加载映射时,加载方式有:

Properties标签

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

typeAliases标签

MyBatis的相应API

sqlSession工厂构造器sqlSessionFactoryBuilder

sqlSessionFactory

sqlSession

标签:入门,--,sqlSession,user,MyBatis,import,password,id
From: https://www.cnblogs.com/rainaftersummert/p/17626669.html

相关文章

  • 【RL】CH2-Bellman equation
    thediscountedreturn\[\begin{aligned}G_t&=R_{t+1}+\gammaR_{t+2}+\gamma^2R_{t+3}+\ldots\\&=R_{t+1}+\gamma\left(R_{t+2}+\gammaR_{t+3}+\ldots\right)\\&=R_{t+1}+\gammaG_{t+1}\end{aligned}\]state-valuefunction/the......
  • SVN安装-win
    下载路径https://sourceforge.net/projects/tortoisesvn/files/1.14.5/Application/TortoiseSVN-1.14.5.29465-x64-svn-1.14.2.msi/download安装的时候要将命令行工具安上-否则IDEA会报错配置IDEA参考:https://blog.csdn.net/i_nclude/article/details/103768412......
  • git常用命令记录
    git仓库初始化gitinit查看git仓库状态gitstatus将文件加入缓存区gitadd.gitaddtest_*将缓存区的文件提交到仓库gitcommit-m"提交信息"将本地仓库代码push到远程仓库gitpushoriginbranch_name分支管理gitbranch#显......
  • Windows电脑怎么设置局域网内共享磁盘?
    前言:我有一台主机硬盘容量比较大,想做为一个共享硬盘,方便我其他笔记本能够往这台硬盘传输文件,想到的最好最快的方法就是通过局域网内部进行文件传输。通过局域网共享磁盘,这种方法也是非常便捷的。那如何设置操作呢?请详细看下文。局域网共享磁盘,共享文件的电脑主机需要链接相同......
  • svg foreignObject 作用总结
    svgforeignObject主要能实现文本换行和dom转图片两个功能1.svg文本换行svg文字功能很弱,不支持自动换行,需要用tspan进行截断<svgxmlns="http://www.w3.org/2000/svg"><textfont-size="16"><tspanx="0"y="10">这个是一段要换</tspan>......
  • Codeforces Round 892 (Div. 2)
    手速慢了,掉分C.AnotherPermutationProblemProblem-C-Codeforces题意给定一个正整数\(n\),设序列\(p\)为\(n\)的排列,求\(\sum_{i=1}^{n}p_i\timesi-max_{j=1}^np_j\timesj\)的最大值。思路打表可知,答案的排列一定为翻转一部分后缀。暴力枚举要翻转的后缀即可。代码......
  • MyBatis--注解开发
    MyBatis注解开发MyBatis常用注解将映射文件替换为注解:publicinterfaceUserMapper{@Insert("insertintouservalue(...)")publicvoidsave(Useruser);@Update("")publicList<User>findAll();}其他delete,select等注解类似之后将之前核心配置文件中的加载......
  • Python Poetry 依赖管理工具
    Python依赖管理工具poetry安装Linux,macOS,Windows(WSL)curl-sSLhttps://install.python-poetry.org|python3-Windows(Powershell)(Invoke-WebRequest-Urihttps://install.python-poetry.org-UseBasicParsing).Content|py配置使用poetryconfig--list......
  • Mybatis--进阶
    MyBatis--2.进阶MyBatis的Dao层实现传统开发方式Dao中的接口类:publicinterfaceUserMapper{publicList<User>findAll()throwsIOException;}Dao中接口的实现类:publicclassUserMapperImplimplementsUserMapper{@OverridepublicList<User>findA......
  • AtCoder Beginner Contest 314 A - Ex题解
    AtCoderBeginnerContest314A-3.14嗯,你可以用string存小数点后的...B-Roulette对于每一个金额,用个vector存pair<>存一个人赌了多少,以及是哪一个人。C-RotateColoredSubsequence每种数用个双向链表记下来。D-LOWER我们观察到,对于2,3操作,只有最后一次有用,且......