mybatis学习
荼白777
这个作者很懒,什么都没留下…
展开
-
mybatis foreach使用
先上例子比如这里我传入一个待删除的id的listvoid deleteByTidList(@Param("tidList") List<Integer> tidList);<delete id="deleteByTidList"> delete from train where id in <foreach collection="tidList" open="(" close=")" separator="," item原创 2021-08-04 18:05:14 · 56 阅读 · 0 评论 -
关于Mybatis中使用注解的一级缓存与二级缓存
一级缓存首先准备dao和测试类@Select("select * from user where id = #{id}") User1 selectByID(Integer id);@Test public void testFirstLevelCache(){ User1 user1 = userDao1.selectByID(57); User1 user2 = userDao1.selectByID(57); System.out原创 2020-11-07 12:00:55 · 236 阅读 · 0 评论 -
关于Mybatis多表查询之多对多查询
概念首先明确一个概念多对多查询 其实就是 多个 一对多查询比如 一个人可以拥有多个角色,而一个角色也可以赋给多个人那么 从单一个体(比如一个人) 来说,其实就是一次一对多查询罢了因为有多个个体 相当于循环多次我们的一对多查询的过程罢了前期准备我们准备三张表一张用户表 一张角色表 一张中间表角色表:用户表:中间表:建立对应的类public class User implements Serializable { private Integer id; priva原创 2020-11-07 11:42:33 · 403 阅读 · 0 评论 -
关于Mybatis注解开发一对一查询
之前我们在xml配置文件中实现多表查询中的一对一查询,需要写的相对注解来说比较复杂。一、建立两张表二、建立相应的实体类public class Account implements Serializable { private int id; private int uid; private double money; //建立一对一的关系 private User user;public class User implements Serializab原创 2020-11-06 11:35:41 · 310 阅读 · 0 评论 -
关于Mybatis注解开发数据库表名与类中属性名不一致的情况
通常情况下 我们会特意的让数据库中的列名与类的属性名一致,来避免麻烦。但有些情况下 我们的数据库表名是与类名不一致的类属性名与表列名我们的dao接口package com.tubai.dao;import com.tubai.domain.Role;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.ResultMap;import org.apache.ibatis.ann原创 2020-11-06 09:14:47 · 1029 阅读 · 0 评论 -
关于Mybaits基本注解与单表CRUD
mybatis 的常用注解说明@Insert:实现新增@Update:实现更新@Delete:实现删除@Select:实现查询@Result:实现结果集封装@Results:可以与@Result 一起使用,封装多个结果集@ResultMap:实现引用@Results 定义的封装@One:实现一对一结果集封装@Many:实现一对多结果集封装@SelectProvider: 实现动态 SQL 映射@CacheNamespace:实现注解二级缓存的使用使用注解实现单表CRUD一、在主配置原创 2020-11-05 17:54:32 · 83 阅读 · 0 评论 -
关于Mybatis使用注解开发的同时存在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"><mapper namespace="com.tuba原创 2020-11-05 16:00:23 · 1220 阅读 · 0 评论 -
关于Mybatis的二级缓存
定义二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。二级缓存结构图执行过程:1.开启 mybatis 的二级缓存。sqlSession1 去查询用户信息,查询到用户信息会将查询数据存储到二级缓存中。2.sqlSession2 去查询与 sqlSession1 相同的用户信息,首先会去缓存中找是否存在数据,如果存在直接从缓存中取出数据。3.原创 2020-11-05 14:44:21 · 212 阅读 · 0 评论 -
关于Mybatis中的一级缓存的简介&&清空&&同步
Mybatis中的一级缓存简介1.它指的是Mybatis中SqlSession对象的缓存,只要 SqlSession 没有 刷新 或 关闭,它就存在。2.当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。3.该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中查询是否有,有的话直接拿出来用,否则就去数据库查。4.当SqlSession对象消失时,mybatis的一级缓存也就消失了。验证其存在编写方法以及配置文件Use原创 2020-11-03 13:07:13 · 702 阅读 · 0 评论 -
Mybatis的缓存简介
缓存的定义存在于内存中的临时数据。为什么要使用缓存减少和数据库的交互次数,提高执行效率。什么样的数据适合使用缓存适用于缓存的数据: 经常查询并且不经常改变的。 数据的正确与否对最终结果影响不大的。不适用于缓存的数据: 经常改变的数据 数据的正确与否对最终结果影响很大的。...原创 2020-11-03 12:58:55 · 164 阅读 · 0 评论 -
记一次Mybatis更新操作使用了查询标签的失误
起因我先写了一个方法 void updateUser(User user);然后写配置文件 <select id="updateUser" parameterType="user"> update user set username = #{username},address=#{address} where id = #{id} </select>这里犯了一个错误 因为我们要执行更新操作 却写了查询的标签发现当我们在测试类中执行这原创 2020-11-03 12:55:33 · 97 阅读 · 0 评论 -
关于Mybatis的延迟加载之一对一&&一对多查询
延迟加载的定义就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载优点先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。缺点因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗时间,所以可能造成用户等待时间变长,造成用户体验下降。一对一延迟加载首先我们要有两张表一张user表一张account表因为是一对一查询 那么显然一个账户对应一个用户因此我们在配置文件中加上以下原创 2020-10-30 19:57:50 · 217 阅读 · 0 评论 -
关于Mybatis中的动态SQL语句
Mybatis中实现动态SQL是通过以下几个标签实现的<if> </if><where> </where><foreach> </foreach><sql> </sql>if标签使用的语法规则和JSTL中是一样的其中的test属性放我们判断的条件如果条件成立则执行标签内部的代码如果不成立则不执行比如<if test="username!=null">and username=#原创 2020-10-15 15:49:18 · 100 阅读 · 0 评论 -
Mybatis的简单CRUD操作
增删改查分别对应Mybatis中配置文件的四个标签他们分别是<!--查询标签--><select></select><!--删除标签--><delete></delete><!--更新标签--><update></update><!--插入标签--><insert></insert>我们写的SQL语句就放在他们之中这些标签都有几个属性原创 2020-10-15 15:13:56 · 76 阅读 · 0 评论 -
Mybatis中关于表的一对一查询01
现在我们有两张表一张是用户表 一张是账户表我们期望输出每一个账户的时候 输出这个账户对应的用户user表account表解决思路首先我们得写出sql语句,只要写完这个其他的都只是配置问题罢了SELECT u.*,a.MONEY,a.ID aid,a.UID FROM account aINNER JOIN `user` uHAVING a.UID=u.id;其次我们有两条路可以走第一种方法是再创建一个类 就像对应我们的用户表和账户表一样写出我们所需要的字段,然后添加getter原创 2020-10-14 18:21:44 · 72 阅读 · 0 评论 -
Mybatis中的连接池
连接池概述:我们在实际开发中都会使用连接池。因为它可以减少我们获取连接所消耗的时间。必须是线程安全的,不能让多个线程拿到同一连接连接池就是一个存储连接的容器,而这个容器是一般采取先进先出的集合实现的Mybatis中的连接池配置的位置:主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。mybatis连接池提供了3种方式的配置:type属性的取值:POOLED 采用传统的javax.sql.DataSource规范中的连接池,m原创 2020-10-09 10:33:21 · 2435 阅读 · 1 评论 -
关于Mybatis中为什么不需要写实现类也可以得到我们需要的对象
比如我们需要现在需要一个方法是查询表中的全部信息我们会这样写@Overridepublic List<User> selectAll() { SqlSession sqlSession = factory.openSession(); List<User> userList = sqlSession.selectList("com.tubai.dao.UserDao.selectAll"); sqlSession.close(); return原创 2020-10-07 17:02:35 · 645 阅读 · 0 评论 -
关于Mybatis中配置mappers标签
1、使用 mapper 标签使用相对于类路径的资源如:<mapper resource="com/tubai/dao/UserDao.xml" />2、使用package标签<!--package标签是用于指定dao接口所在的包,当指定之后就不需要在写mapper接口以及resource和class了--><package name="com.tubai.dao"/><!-- 无论使用哪种方式 都要求 mapper 接口名称和 map原创 2020-10-07 16:15:28 · 430 阅读 · 0 评论 -
记maven项目的两个报错
一、maven报错:不再支持源选项 5。请使用 6 或更高版本。解决办法pom.xml文件中增加maven编译的jdk版本设置,maven.compiler.source和maven.compiler.target,另外java.version最好也加上 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <mav原创 2020-10-03 15:21:48 · 350 阅读 · 0 评论 -
关于Mybatis中typeAliases标签的使用
我们在配置信息的时候 经常需要写全限定类名为了提高效率 我们使用typeAliases标签这个标签下又有两个标签1.typeAlias这个标签有两个属性type和aliastype写的是全限定类名 alias指定的是别名比如<typeAlias type="com.tubai.domain.User" alias="user"></typeAlias>以后需要写这个类的时候 我们直接写user即可而且别名是不区分大小写的 也就是说你写成uSeR都行…只要你不嫌丑2原创 2020-10-07 15:58:45 · 1877 阅读 · 0 评论 -
关于Mybatis中的properties属性&&标签中url和resource属性的使用
我们使用Mybatis的时候是需要在配置文件中配置property属性的最直接的写法最简单的写法就是直接将全部内容写在dataSource标签下,即<dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatisstudy原创 2020-10-07 15:36:44 · 5773 阅读 · 0 评论 -
Mybatis中 domain对象的属性名和数据库中的列名不一致的解决办法
方法一、起别名比如我有一个domain对象中的一个属性叫userName 另一个属性叫 userID而数据库的列名分别是username和id当我们在Myabtis中查询这两个属性的值我们会发现 username的值是可以正常得到的,而userId则为null原因因为我使用的数据库是mysql 在windows中是不区分大小写的 而在linux中区分大小写因此userName可以封装进去但id属性则不同了 因此我们在Mybatis中的sql语句应该写为select id as userid原创 2020-10-05 16:57:21 · 774 阅读 · 0 评论 -
002 Mybatis的入门样例 (通过写实现类来实现)
首先明确我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。不管使用XML还是注解配置。但是Mybatis它是支持写dao实现类的。这里只是作为演示,并且提高个人理解接口package com.tubai.dao;import java.util.List;/** * 首先需要明确: * 我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。 * 不管使用XML还是注解配置。 * 但是Mybat原创 2020-10-01 15:33:25 · 194 阅读 · 0 评论 -
002 Mybatis的入门样例(采用注解实现)
mybatis基于注解的入门案例不需要配置UserDao.xml,直接在dao接口的方法上使用@Select注解,并且指定SQL语句public interface UserDaoByNote { /** * 查询全部的用户名 * @return */ @Select("select username from user") List<String> findAllUsername();}同时需要在SqlMapConfig.xml中原创 2020-10-01 14:59:26 · 109 阅读 · 0 评论 -
002 Mybatis的入门样例
在001的基础之上我们来执行第一个Mybatis程序package com.tubai.test;import com.tubai.dao.UserDao;import com.tubai.domain.User;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import o原创 2020-10-01 14:05:10 · 112 阅读 · 0 评论 -
(001)在IDEA中使用Mybatis之环境搭建
前期准备1.在maven中创建普通java项目什么都不需要选,直接next即可2.在pom.xml中添加打包方式<packaging>jar</packaging>3.导入mybatis、mysql、log4j、Junit坐标<dependencies> <!-- 导入mybatis坐标--> <dependency> <groupId>org.mybatis</groupId>原创 2020-10-01 13:15:19 · 308 阅读 · 0 评论