Mybatis3.1实战

合集下载

mybatis中foreach_collection用法_范文模板及概述

mybatis中foreach_collection用法_范文模板及概述

mybatis中foreach collection用法范文模板及概述1. 引言概述:在使用Mybatis进行数据库操作时,我们经常会遇到需要对一个集合进行循环遍历的情况。

而Mybatis提供了foreach collection语法来实现这种需求。

通过foreach collection语句,我们可以快速、便捷地在SQL语句中引用一个集合,并遍历其中的元素。

文章结构:本文将详细介绍Mybatis中foreach collection的用法及相关注意事项。

首先,我们将给出该语句的基本作用和语法,并解释collection参数的使用方式以及它所代表的含义。

接着,我们将详细解析foreach元素内部可用的属性,帮助读者更好地理解并灵活运用该语法。

然后,我们通过示例与范文模板来展示foreach collection的不同应用场景,并介绍如何动态拼接SQL语句以及如何利用对象集合进行批量操作。

最后,我们会列举一些注意事项和常见问题解答,包括如何处理空指针异常、数据库特殊字符转义以及循环嵌套时对应关系处理技巧等方面。

最后,在结论部分总结全文内容。

目的:本文的目的是让读者能够充分理解并掌握Mybatis中foreach collection语句的使用方法,以及在实际开发中如何应用该语法解决常见问题。

通过该文,读者将对foreach collection有更深入的认识,并能够熟练运用它来提升自己的数据库操作效率和灵活性。

2. Mybatis中foreach collection用法2.1 foreach语句的作用与基本语法Mybatis中的foreach语句用于循环遍历一个集合,并将其中的元素作为参数传递给SQL语句中的占位符。

它常用于批量操作或动态生成SQL语句。

在Mybatis中,使用foreach语句的基本语法如下:```xml<foreach item="item" collection="collection" open="(" close=")" separator=",">#{item}</foreach>```其中,以下是各个属性的含义:- `item`:指定集合中每个元素在循环过程中对应的名称。

MyBatis核心技术全解与项目实战读书笔记

MyBatis核心技术全解与项目实战读书笔记

《MyBatis核心技术全解与项目实战》读书笔记1. 第一章 MyBatis简介本章主要介绍了MyBatis的基本概念、特点和优势,以及其在Java企业级应用开发中的重要作用。

MyBatis是一个优秀的持久层框架,它将SQL语句与Java对象映射(POJO)相结合,使得开发人员可以更加方便地操作数据库。

MyBatis的主要目标是简化数据库操作,提高开发效率,同时也提供了良好的数据封装和安全性。

SqlSessionFactory:用于创建SqlSession对象,SqlSession是MyBatis中执行SQL语句的核心接口。

SqlSession:用于执行SQL语句的会话对象,可以通过它来执行增删改查等操作。

Mapper:映射器接口,用于定义SQL语句和Java对象之间的映射关系。

Configuration:MyBatis的全局配置类,用于配置各种属性,如缓存策略、事务管理等。

插件:MyBatis的插件机制,允许开发者自定义拦截器、类型处理器等组件,以实现对MyBatis的功能扩展。

灵活性:MyBatis支持多种存储结构,如JDBC、ODBC、JNDI等,同时还支持自定义类型处理器和插件,使得MyBatis能够满足各种复杂的数据库操作需求。

易用性:MyBatis提供了简洁的XML映射文件来描述SQL语句和Java对象之间的映射关系,使得开发者无需编写复杂的SQL语句即可完成数据库操作。

性能优化:MyBatis通过一级缓存和二级缓存机制来提高查询性能,同时还支持动态SQL、分页查询等功能,使得MyBatis能够在高并发环境下保持良好的性能表现。

安全性:MyBatis提供了严格的权限控制机制,可以限制不同用户对数据库的操作权限,保证数据的安全性。

1.1 MyBatis概念及特点MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。

相比于传统的数据访问技术,MyBatis让开发者能够更加直接地与数据库交互,从而有效地避免了大量繁琐的SQL语句编写工作。

Mybatis3详解(四)----SQL映射文件详解(XxxMapper.xml)

Mybatis3详解(四)----SQL映射文件详解(XxxMapper.xml)

Mybatis3详解(四)----SQL映射⽂件详解(XxxMapper.xml)1映射器是Mybatis中最复杂并且是最重要的组件。

它由⼀个接⼝和xml映射⽂件(或者注解)组成。

在映射器中我们可以配置各类SQL、动态SQL、缓存、存储过程、级联等复杂的内容。

并且通过简易的映射规则映射到指定的POJO或者其它对象上,映射器能有效的消除JDBC的底层代码。

在Mybatis的应⽤程序开发中,映射器的开发⼯作量占全部⼯作量的80%,可见其重要性。

映射⽂件的作⽤是⽤来配置SQL映射语句,根据不同的SQL语句性质,使⽤不同的标签,其中常⽤的标签有:<select>、<insert>、<update>、<delete>。

下⾯列出了SQL 映射⽂件的⼏个顶级元素(按照应被定义的顺序列出):元素描述cache该命名空间的缓存配置(会在缓存部分进⾏讲解)cache-ref引⽤其它命名空间的缓存配置resultMap描述如何从数据库结果集中加载对象,它是最复杂也是最强⼤的元素parameterMap定义参数映射。

此元素已被废弃,并可能在将来被移除!请使⽤⾏内参数映射parameType。

所以本⽂中不会介绍此元素sql可被其它语句引⽤的可重⽤语句块select映射查询语句insert映射插⼊语句update映射更新语句delete映射删除语句2select元素表⽰SQL 的select 语句,⽤于查询,⽽查询语句是我们⽇常中⽤的最多的,使⽤的多就意味它有着强⼤和复杂的功能,所以我们先来看看select元素的属性有哪些(加粗为最常⽤的)。

select元素中的属性属性描述id在命名空间中唯⼀的标识符,可以被⽤来引⽤这条语句parameterType将会传⼊这条语句的参数类的完全限定名或别名。

这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传⼊语句的参数,默认值为未设置(unset)parameterMap这是引⽤外部 parameterMap 的已经被废弃的⽅法。

Mybatis-Plus雪花id的使用以及参数配置详解

Mybatis-Plus雪花id的使用以及参数配置详解

Mybatis-Plus雪花id的使⽤以及参数配置详解1.引⼊Mybatis-Plus依赖(3.1.1版本⽬前有些问题,建议使⽤3.1.0版本)<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.0</version></dependency>2.在application.yml配置⽂件中增加如下配置项mybatis-plus:#mapper-locations: classpath:mybatis/**/*Mapper.xml# 在classpath前添加星号可以使项⽬热加载成功# ⾃定义xml sql⽂件需要配置这个mapper-locations: classpath*:mybatis/**/*Mapper.xml#实体扫描,多个package⽤逗号或者分号分隔typeAliasesPackage: com.nis.projectglobal-config:#主键类型 0:"数据库ID⾃增", 1:"⽤户输⼊ID",2:"全局唯⼀ID (数字类型唯⼀ID)", 3:"全局唯⼀ID UUID";id-type: 3#机器 ID 部分(影响雪花ID)workerId: 1#数据标识 ID 部分(影响雪花ID)(workerId 和 datacenterId ⼀起配置才能重新初始化 Sequence)datacenterId: 18#字段策略 0:"忽略判断",1:"⾮ NULL 判断"),2:"⾮空判断"field-strategy: 2#驼峰下划线转换db-column-underline: true#刷新mapper 调试神器refresh-mapper: true#数据库⼤写下划线转换#capital-mode: true#序列接⼝实现类配置#key-generator: com.baomidou.springboot.xxx#逻辑删除配置(下⾯3个配置)logic-delete-value: 0logic-not-delete-value: 1#⾃定义SQL注⼊器#sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector#⾃定义填充策略接⼝实现#meta-object-handler: com.baomidou.springboot.xxxconfiguration:map-underscore-to-camel-case: truecache-enabled: false# 这个配置会将执⾏的sql打印出来,在开发或测试的时候可以⽤log-impl: org.apache.ibatis.logging.stdout.StdOutImpl3.原有的mapper接⼝增加继承BaseMapper接⼝public interface UserMapper extends BaseMapper<User>4.实体类增加注解在User实体类上添加@TableId的注解⽤来标识实体类的主键,以便插件在⽣成主键雪花Id或者其他id模式的时候找到哪个是主键;这种id是局部id,优先级:局部>全局。

【Mybatis】Mybatis实战2(一对一、一对多、多对多的设计及实现,高级特性及二级缓存)

【Mybatis】Mybatis实战2(一对一、一对多、多对多的设计及实现,高级特性及二级缓存)

【Mybatis】Mybatis实战2(⼀对⼀、⼀对多、多对多的设计及实现,⾼级特性及⼆级缓存)6).多表查询-“⼀对多”(表设计、实体设计、DAO(mapper)设计)(1)关联关系操作(⼀对多)①表设计:以员⼯和部门表为例思想: 1个员⼯对应1个部门,1个部门对应多个员⼯添加数据原则:先添加没有外键的数据(部门信息),再添加存在外键的数据(员⼯信息)注意:将外键添加在n的⼀⽅部门表:create table t_dept(id varchar2(36) primary key,name varchar2(50));员⼯表:create table t_emp(id varchar2(36) primary key,name varchar2(50),age number(3),salary number(10,2),dept_id references t_dept(id));②实体设计a. 在实体中添加关系属性,来表⽰实体之间的关系(对应表数据的关系)b. 在N的⼀⽅添加1的⼀个关系属性。

c. 在1的⼀⽅添加N的⼀个List的关系属性DAO:(MyBatis如何查询两张表信息)需求1:查询员⼯信息(⼯号,名字,年龄,薪资,所属部门的编号和名称)根据员⼯⼯号?DAO接⼝⽅法:public Emp selectById(String id);Mapper⽂件:①SQL:select e.id,,e.age,e.salary,d.id, from t_emp e left join t_dept d on e.dept_id = d.id where e.id = '5';②参数③将查询结果映射成⼀个实体对象特点: 如果关系属性是”1” ,使⽤ <association></association>需求2:根据id查询部门信息,及其内部的所有员⼯信息?DAO接⼝⽅法:public Dept selectById(String id);Mapper⽂件中①SQL:select d.id,,e.id as eid, as ename,e.age as eage,e.salary as salary from t_dept d left join t_emp e on d.id = e.dept_idwhere d.id = ?;②参数绑定③结果映射:ReusultMap映射集合关系属性特点: 关系属性是”n”个的集合 ,使⽤ <collection></ collection >7).多表查询-“⼀对⼀”(表设计、实体设计、DAO(mapper)设计)关联关系操作(⼀对⼀)例如:需求: 学⽣电脑管理系统①库表设计表⽰1对1的关系a. 添加外键(那张表添加都可以)①从业务的⾓度分析,后添加的数据对应的表。

SpringMVC+Spring+Mybatis框架配置详细步骤(eclipse普通版)

SpringMVC+Spring+Mybatis框架配置详细步骤(eclipse普通版)

SSI框架搭建SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6编号:SSI-SMVC3-S3-I3版本:V1.0级别:公开编写时间:2016-02-17目录1 导言 (1)1.1 目的 (1)1.2 范围 (1)1.3 说明 (1)2 搭建SpringMVC (2)2.1 搭建所需jar包 (2)2.2 其他依赖包 (3)2.3 搭建步骤 (4)2.3.1 创建项目 (4)2.3.2 导入jar包 (6)2.3.3 配置web.xml (7)2.3.4 配置spring-servlet.xml (9)2.3.5 配置applicationContext.xml (10)2.3.6 配置log4j.properties (10)3 整合mybatis (11)3.1 整合所需jar包 (11)3.2 其他依赖包 (11)3.3 整合步骤 (11)3.3.1 导入jar包 (11)3.3.2 配置config.properties (12)3.3.3 配置spring-dataSource.xml (12)3.3.4 配置applicationContext.xml (15)3.3.5 配置mybatis-config.xml (16)3.3.6 创建实体model (17)3.3.7 创建实例化dao (19)3.3.8 创建业务服务service (21)3.3.9 创建控制层controller (23)3.3.10 页面代码 (28)3.3.11 启动项目 (37)1导言1.1 目的本文档是根据个人的工作经验搭建的轻量级SSI框架,也是实际应用中比较全面的基础框架,用于指导SSI框架初学者学习搭建SSI框架,希望能给各位使用者提供帮助,同时也希望朋友们尽量去帮助其他人。

1.2 范围本次框架搭建的版本是SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6,数据库采用的是mysql,在eclipse开发工具下搭建直接搭建的web项目,页面采用的是h5,ajax实现数据访问,如果页面为jsp等,则修改controller的返回类型即可。

mybatis-plus-boot-starter用法 概述及解释说明

mybatis-plus-boot-starter用法 概述及解释说明

mybatis-plus-boot-starter用法概述及解释说明1. 引言1.1 概述本篇文章旨在为读者提供关于mybatis-plus-boot-starter的详细解释和使用指南。

Mybatis-plus-boot-starter是一个重要的开源项目,它在Mybatis的基础上提供了更多便捷的功能和优化,使得我们可以更轻松地进行数据库操作。

本文将对该工具包进行概述,并介绍其主要特点和功能。

1.2 文章结构本文分为五个部分:引言、Mybatis-plus-boot-starter用法、使用示例、实际应用场景分析和总结与展望。

首先我们将对文章整体结构进行简单介绍,然后逐个章节详细阐述每部分的内容。

1.3 目的本文的主要目的是帮助读者更好地理解和掌握mybatis-plus-boot-starter的使用方法和技巧。

通过具体的实例演示和理论解释,读者可以深入了解该工具包,并能够灵活运用于实际项目中。

此外,我们还将分析一些常见应用场景,并给出相应的解决方案,以期帮助读者进一步拓展思路,提高开发效率。

以上是关于“1. 引言”部分内容的详细说明,请根据需要自行组织语言并撰写文章。

2. Mybatis-plus-boot-starter用法2.1 简介Mybatis-plus-boot-starter是一个方便快捷地使用MyBatis-Plus的开发工具。

它提供了许多封装好的方法和功能,简化了对数据库的操作,并且提高了开发效率。

通过引入mybatis-plus-boot-starter依赖,我们可以轻松地在Spring Boot 项目中集成MyBatis-Plus。

2.2 配置方式在Spring Boot项目中使用mybatis-plus-boot-starter非常简单。

首先,在项目的pom.xml文件中添加对mybatis-plus-boot-starter的依赖。

然后,在application.properties或application.yml配置文件中设置相关属性,如数据库连接信息、实体类包路径等。

mybatis教程

mybatis教程

mybatis实战教程(mybatis in action)之一:开发环境搭建mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk1.7,mybatis3.2.0.jar包。

这些软件工具均可以到各自的官方网站上下载。

首先建立一个名字为MyBaits 的dynamic web project1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。

2. 将mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到web工程的lib目录.3. 创建mysql 测试数据库和用户表,注意,这里采用的是utf-8 编码创建用户表,并插入一条测试数据程序代码Create TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`userName` varchar(50) DEFAULT NULL,`userAge` int(11) DEFAULT NULL,`userAddress` varchar(200) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong');到此为止,前期准备工作就完成了。

下面开始真正配置mybatis项目了。

1. 在MyBatis 里面创建两个源码目录,分别为src_user,test_src, 用如下方式建立,鼠标右键点击JavaResource.2. 设置mybatis 配置文件:Configuration.xml, 在src_user目录下建立此文件,内容如下:程序代码<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias alias="User" type="er"/></typeAliases><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://127.0.0.1:3306/mybatis" /><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="com/yihaomen/mybatis/model/User.xml"/></mappers></configuration>3. 建立与数据库对应的java class,以及映射文件.在src_user下建立package:com.yihaomen.mybatis.model ,并在这个package 下建立User 类:程序代码package com.yihaomen.mybatis.model;public class User {private int id;private String userName;private String userAge;private String userAddress;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}public String getUserAge() {return userAge;}public void setUserAge(String userAge) {erAge = userAge;}public String getUserAddress() {return userAddress;}public void setUserAddress(String userAddress) {erAddress = userAddress;}}同时建立这个User 的映射文件User.xml:程序代码<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd"><mapper namespace="erMapper"><select id="selectUserByID" parameterType="int" resultType="User">select * from `user` where id = #{id}</select></mapper>下面对这几个配置文件解释下:1.Configuration.xml 是mybatis 用来建立sessionFactory 用的,里面主要包含了数据库连接相关东西,还有java 类所对应的别名,比如<typeAlias alias="User"type="er"/>这个别名非常重要,你在具体的类的映射中,比如User.xml 中resultType 就是对应这里的。

mybatis 实现原理

mybatis 实现原理

MyBatis实现原理一、概述MyBatis是一款优秀的持久层框架,其核心原理是基于数据访问对象(DAO)模式,通过将数据库操作与业务逻辑进行分离,提供了一种简洁、灵活的方式来访问数据库。

本文将从以下几个方面详细介绍MyBatis的实现原理。

二、MyBatis架构MyBatis的架构可以分为三层:SQL映射层、数据源层和事务层。

其中,SQL映射层负责处理SQL语句的解析和映射;数据源层负责对数据库进行操作;事务层则负责处理业务操作的事务。

2.1 SQL映射层2.1.1 SQL解析MyBatis通过XML配置或注解的方式来定义SQL语句,其中XML配置方式是主要的方式。

在解析XML配置文件时,MyBatis使用了XPath来定位SQL语句的位置,并利用Java的反射机制将SQL语句与对应的DAO接口方法绑定。

2.1.2 SQL映射在SQL映射过程中,MyBatis将SQL语句分为静态SQL和动态SQL。

静态SQL是指在XML配置文件中定义的固定的SQL语句,而动态SQL则是根据业务需求在运行时生成的SQL语句。

2.2 数据源层MyBatis使用数据源来管理数据库连接。

在数据源层,MyBatis提供了多种数据源的实现,包括JDBC数据源、连接池数据源等。

通过数据源,MyBatis可以很方便地获取数据库连接,并在数据操作完成后释放连接。

2.3 事务层事务管理是企业级应用中非常重要的一环。

MyBatis提供了对事务的支持,可以用于对数据库操作进行事务管理。

在事务层,MyBatis使用JDBC的事务机制或声明式事务来管理事务的提交和回滚,保证数据的原子性、一致性、隔离性和持久性。

三、MyBatis执行流程MyBatis的执行流程可以分为四个阶段:配置解析阶段、初始化阶段、SQL执行阶段和结果映射阶段。

3.1 配置解析阶段在配置解析阶段,MyBatis会读取XML配置文件或注解,解析出数据源配置、SQL 语句配置等信息,并将其加载到内存中。

idea2024mybatisx使用方法

idea2024mybatisx使用方法

idea2024mybatisx使用方法MyBatisX是一个基于MyBatis的增强工具库,它提供了一些方便开发的功能和工具,同时也简化了一些常用操作的编写。

下面是关于MyBatisX使用方法的详细介绍,包含了基本的使用流程和一些常见的功能示例。

总字数约为1200字以上。

一、MyBatisX的安装和配置:1.3将安装文件复制到项目中的合适位置,并在项目的配置文件中进行相应的配置。

二、MyBatisX的基本使用流程:2.1 创建实体类,定义实体类的属性和对应的getter和setter方法。

2.3 创建Mapper.xml文件,配置SQL语句和参数的映射关系。

2.4 在MyBatis的配置文件中加载Mapper接口和Mapper.xml文件。

2.5 在代码中使用MyBatisX提供的工具和方法来进行数据库操作。

三、MyBatisX的常见功能示例:下面是一些常见功能的示例,用于演示MyBatisX的用法。

3.1分页查询:实现分页查询的方法有多种,这里介绍使用MyBatisX提供的拦截器实现分页查询的方法。

首先在Mapper接口中定义一个分页查询的方法,如:然后在Mapper.xml文件中配置SQL语句和参数的映射关系,如:<select id="getUsersByPage" resultType="User">select * from userlimit #{pageNum}, #{pageSize}</select>最后在代码中调用该方法即可实现分页查询。

3.2动态SQL查询:动态SQL查询是指根据不同的条件来生成不同的SQL语句,MyBatisX提供了一些工具和方法来方便地实现动态SQL查询。

首先在Mapper接口中定义一个动态SQL查询的方法,如:然后在Mapper.xml文件中配置动态SQL语句和参数的映射关系,如:<select id="getUsersByCondition" resultType="User">select * from user where 1=1<if test="name!=null">and name = #{name}</if><if test="age!=0">and age = #{age}</if></select>最后在代码中调用该方法并传入相应的参数即可实现动态SQL查询。

详解Mybatis拦截器安全加解密MySQL数据实战

详解Mybatis拦截器安全加解密MySQL数据实战

详解Mybatis拦截器安全加解密MySQL数据实战需求背景公司为了通过⼀些⾦融安全指标(政策问题)和防⽌数据泄漏,需要对⽤户敏感数据进⾏加密,所以在公司项⽬中所有存储了⽤户信息的数据库都需要进⾏数据加密改造。

包括Mysql、redis、mongodb、es、HBase等。

因为在项⽬中是使⽤springboot+mybatis⽅式连接数据库进⾏增删改查,并且项⽬是中途改造数据。

所以为了不影响正常业务,打算这次改动尽量不侵⼊到业务代码,加上mybatis开放的各种拦截器接⼝,所以就以此进⾏改造数据。

本篇⽂章讲述如何在现有项⽬中尽量不侵⼊业务⽅式进⾏Mysql加密数据,最后为了不降低查询性能使⽤了注解,所以最后还是部分侵⼊业务。

Mybatis拦截器Mybatis只能拦截指定类⾥⾯的⽅法:Executor、ParameterHandler、StatementHandler、ResultSetHandler。

Executor:拦截执⾏器⽅法;ParameterHandler:拦截参数⽅法;StatementHandler:拦截sql构建⽅法;ResultSetHandler:拦截查询结果⽅法;Mybatis提供的拦截器接⼝Interceptorpublic interface Interceptor {Object intercept(Invocation invocation) throws Throwable;default Object plugin(Object target) {return Plugin.wrap(target, this);}default void setProperties(Properties properties) {// NOP}}- Object intercept():代理对象都会调⽤的⽅法,这⾥可以执⾏⾃定义拦截处理;- Object plugin():可以⽤于判断拦截器执⾏类型;- void setProperties():指定配置⽂件的属性;⾃定义拦截器中除了要实现Interceptor接⼝,还需要添加@Intercepts注解指定拦截对象。

Mybatis3.1实战

Mybatis3.1实战

Mybatis3.1实战1、前言 (2)2、什么是mybatis (2)3、Mybatis入门实例 (2)4、Mybatis中的增、删、改、查 (8)5、Mybatis新特性介绍 (10)6、mybatis-config.xml中的元素介绍 (11)7、xml映射文件及用法 (18)8、Mybatis参数传递 (20)9、基于注解的sql语句 (21)10、动态sql语句 (22)11、mybatis中的一对多、一对一、多对多 (24)12、自定义类型处理器 (28)13、Spring3.1+springmvc+mybatis3.1集成 (31)备注 (40)Like模糊查询 (40)排序 (40)if元素中的条件语句 (40)1、前言随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis。

相信很多朋友以前看过ibatis2.x,对ibatis2.x也比较熟悉,随着技术的发展,我们必须跟得上技术发展的步伐,不能永远停留在原来的技术上而不做进一步学习。

由于在我的一个新项目中采用了mybatis,为此我发了几天来学习了mybatis,相对hibernate来说,本人感觉mybatis相对来说更加简单,特别是熟悉sql 语句的朋友们,你在采用mybatis时,你会觉得跟传统的jdbc方式来操作数据库没什么差别,只是mybatis帮你做了很多原来你在用jdbc来实现时的很多工作。

我们来看看mybatis包含了哪些新特性。

Mybatis实现了接口绑定,使用更加方便对象关系映射的改进,效率更高MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。

在本学习教程中,全方位介绍了mybatis中的各种特性,里面的实例都是采用比较简单的实例来实现,对于有些没有介绍到的特性,大家可以参考官方文档。

本教程采用的是mybatis最新的版本mybatis3.1,并结合了maven来写这个教程,所以大家需要对maven有所了解。

mybatis的执行原理

mybatis的执行原理

Mybatis的执行原理一、介绍Mybatis是一款轻量级的持久层框架,它的执行原理是如何实现的呢?本文将会详细介绍Mybatis的执行原理,帮助读者深入理解这个框架。

二、解析配置文件Mybatis的执行原理首先涉及到配置文件的解析。

配置文件是Mybatis的核心,通过配置文件可以配置数据库连接信息、SQL映射关系等。

2.1 加载配置文件Mybatis在启动时,会加载配置文件到内存。

配置文件的加载是通过SqlSessionFactoryBuilder类来实现的,它会读取配置文件中的内容,并将其解析为Configuration对象。

2.2 解析配置文件解析配置文件的过程中,Mybatis会使用一些解析器对配置文件进行解析。

2.2.1 XMLConfigBuilderXMLConfigBuilder类负责解析配置文件的根元素<configuration>,并通过调用其他解析器来解析具体的配置内容。

2.2.2 XMLMapperBuilderXMLMapperBuilder类负责解析配置文件中的SQL映射关系,包括SQL语句、参数映射、结果映射等。

2.2.3 XMLStatementBuilderXMLStatementBuilder类负责解析具体的SQL语句,包括SQL的类型(查询、更新、删除等)、参数的设置、结果的映射等。

三、创建SqlSession解析配置文件完成后,Mybatis会根据配置信息创建SqlSessionFactory对象,然后通过它来创建SqlSession对象。

3.1 SqlSessionFactorySqlSessionFactory是Mybatis的核心接口,它负责创建SqlSession对象。

SqlSessionFactory的创建需要依赖Configuration对象和Executor对象。

3.2 SqlSessionSqlSession是Mybatis的会话对象,在应用程序和数据库之间起到桥梁的作用。

MyBatis详细实例操作

MyBatis详细实例操作

MyBatis 九步详细实例操作MyBatis 一种优秀的O/R mapping框架,是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。

MyBatis 消除了几乎所有的JDBC 代码和参数的手工设置以及结果集的检索。

MyBatis和Hibernate 对比:1.MyBatis 非常简单易学,Hibernate相对较复杂,门槛较高。

2.二者都是比较优秀的开源产品3.当系统属于二次开发,无法对数据库结构做到控制和修改,那MyBatis 的灵活性将比Hibernate更适合4.系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。

在这种情况下MyBatis 会有更好的可控性和表现。

5.MyBatis 需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。

同样的需求,MyBatis 的工作量比Hibernate要大很多。

类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而MyBatis 要把那些sql mapping的地方一一修改。

6.以数据库字段一一对应映射得到的PO和Hibernte这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。

7.当然因为HQL 和SQL 查询的问题性能上MyBatis 很明显就比Hibernate要快。

OK 看了上面这么的多那么到底MyBatis怎么实现呢。

下面就让我们一起走进MyBatis的大门吧。

第一步:做好准备工作首先我们要到MyBatis官网下载MyBatis 开发包我下面例子用的事3.1.1的版本:有了开发包我们可以继续往下走了哦。

第二步:创建工程、配置开发环境1:解压刚才下走的ZIP包在这个文件里面我就不一个个介绍了。

IDEA创建springboot+mybatis项目全过程(步骤详解)

IDEA创建springboot+mybatis项目全过程(步骤详解)

IDEA创建springboot+mybatis项⽬全过程(步骤详解)鉴于隔很久再在IDEA新建springboot项⽬时,会出现对步骤不确定的情况,因此,写下这篇博客记录创建⼀个可运⾏的springboot+mybatis项⽬的全过程。

步骤如下:1.打开IDEA2.File ==> new ==> project ,如图:3.选择spring Initializr ==> 右边的Project SDK我选的是我已经安装的1.8版本,其他默认 ==> 点击next4.填写Group (⾃⼰随意就⾏,我的是cn + 个⼈英⽂名 + study) ==> 填写 Artifact (也是⾃⼰随意就⾏,这个也是你的项⽬名) ==> 点击next ,如图:5.选择项⽬所需依赖(由于项⽬是springboot+mybatis的Java后台项⽬,因此需要勾上三个依赖) ==> 点击next ,如图:6.选择项⽬路径 ==> 点击finish ,如图:6.最终⽣成的项⽬代码⽬录如图(resources⽬录下的static和templates⽬录⽆⽤,可以删掉):(注:如果DemoprojectApplication类(即启动类)的图标显⽰是 J ⽽不是 C ,则说名该项⽬还没有被初始化为maven项⽬,只需要在项⽬的pom.xml⽂件上右键,再选择 Add as maven 即可)⾄此,springboot项⽬搭建完成⼀半,还需要做mybatis的配置,如下:7.数据库和mybatis的配置7.1 在application.properties填⼊数据库连接参数和mybatis配置信息,application.properties内容如下:#1.项⽬启动的端⼝server.port=18902#2.数据库连接参数#2.1jdbc驱动,⽰数据库⼚商决定,这是mysql的驱动jdbc.driver=com.mysql.cj.jdbc.Driver#2.2数据库连接url,包括ip(127.0.0.1)、端⼝(3306)、数据库名(testdb)jdbc.url=jdbc:mysql://127.0.0.1:3306/testdb?useUnicode=true&characterEncoding=utf-8&useSSL=false#2.3数据库账号名ername=root#2.4数据库密码jdbc.password=mypassword#3.Mybatis配置#3.1 mybatis配置⽂件所在路径mybatis_config_file=mybatis-config.xml#3.2 mapper⽂件所在路径,这样写可匹配mapper⽬录下的所有mapper,包括其⼦⽬录下的mapper_path=/mapper/**/**.xml#3.3 entity所在包entity_package=cn.stephen.study.demoproject.entity⽰例如图:7.2 在resources⽬录下新建 mybatis-config.xml⽂件,⽂件内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><!-- 配置⽂件的根元素 --><configuration><!--配置全局属性--><settings><!--使⽤jdbc的getGeneratedKeys获取数据库⾃增主键值--><setting name="useGeneratedKeys" value="true"/><!--使⽤列标签替换列别名默认未true--><setting name="useColumnLabel" value="true" /><!--开启驼峰式命名转换:Table{create_time} -> Entity{createTime}--><setting name="mapUnderscoreToCamelCase" value="true" /></settings></configuration>效果如图:7.3 新建 config包,在其中新建配置类。

MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)

MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)

MyBatis-Plus实现2种分页⽅法(QueryWrapper查询分页和SQL查询分页)⽬录1 MyBatisPlusConfig2 UserPagination3 Mapper3.1 UserMapper.java3.2 UserMapper.xml4 Service4.1 UserService4.2 UserServiceImpl5 UserController6 调试结果6.1 QueryWrapper查询分页6.2 SQL查询分页1 MyBatisPlusConfigMyBatisPlus配置类。

package com.config;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;import org.springframework.context.annotation.*;/*** MyBatisPlus配置类*/@Configurationpublic class MyBatisPlusConfig {/*** MyBatisPlus拦截器(⽤于分页)*/@Beanpublic MybatisPlusInterceptor paginationInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//添加MySQL的分页拦截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}}2 UserPagination⽤户查询条件类。

Mybatis-Plus雪花id的使用以及解析机器ID和数据标识ID实现

Mybatis-Plus雪花id的使用以及解析机器ID和数据标识ID实现

Mybatis-Plus雪花id的使⽤以及解析机器ID和数据标识ID实现概述分布式系统中,有⼀些需要使⽤全局唯⼀ID的场景,这种时候为了防⽌ID冲突可以使⽤36位的UUID,但是UUID有⼀些缺点,⾸先他相对⽐较长,另外UUID⼀般是⽆序的。

有些时候我们希望能使⽤⼀种简单⼀些的ID,并且希望ID能够按照时间有序⽣成。

⽽twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID⽣成机制,所以开发了这样⼀套全局唯⼀ID⽣成服务。

结构snowflake的结构如下(每部分⽤-分开):0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000第⼀位为未使⽤,接下来的41位为毫秒级时间(41位的长度可以使⽤69年),然后是5位datacenterId和5位workerId(10位的长度最多⽀持部署1024个节点),最后12位是毫秒内的计数(12位的计数顺序号⽀持每个节点每毫秒产⽣4096个ID序号)⼀共加起来刚好64位,为⼀个Long型。

(转换成字符串后长度最多19)snowflake⽣成的ID整体上按照时间⾃增排序,并且整个分布式系统内不会产⽣ID碰撞(由datacenter和workerId作区分),并且效率较⾼。

经测试snowflake每秒能够产⽣26万个ID。

源码/*** Twitter_Snowflake<br>* SnowFlake的结构如下(每部分⽤-分开):<br>* 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 <br>* 1位标识,由于long基本类型在Java中是带符号的,最⾼位是符号位,正数是0,负数是1,所以id⼀般是正数,最⾼位是0<br>* 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,⽽是存储时间截的差值(当前时间截 - 开始时间截)* 得到的值),这⾥的的开始时间截,⼀般是我们的id⽣成器开始使⽤的时间,由我们程序来指定的(如下下⾯程序IdWorker类的startTime属性)。

mybatis实战教程

mybatis实战教程

mybatis实战教程(mybatis in action)之三:实现数据的增删改查(2012-12-14 10:24:00)转载▼分类:SpringMVC标签:http://search.sina.co/?c=blog&q=&by=tag之三用户园区第二教程前面已经讲到用接口的方式编程。

这种方式,要注意的一个地方就是。

在User.xml 的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.IUserOperation" ,命名空间非常重要,不能有错,必须与我们定义的package 和接口一致。

如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下事情:1. 用mybatis 查询数据,包括列表2. 用mybatis 增加数据3. 用mybatis 更新数据.4. 用mybatis 删除数据.查询数据,前面已经讲过简单的,主要看查询出列表的查询出列表,也就是返回list, 在我们这个例子中也就是List<User> , 这种方式返回数据,需要在User.xml 里面配置返回的类型resultMap, 注意不是resultType, 而这个resultMap 所对应的应该是我们自己配置的程序代码<!-- 为了返回list 类型而定义的returnMap --><resultMap type="User" id="resultListUser"><id column="id" property="id" /><result column="userName" property="userName" /><result column="userAge" property="userAge" /><result column="userAddress" property="userAddress" /></resultMap>查询列表的语句在User.xml 中程序代码<!-- 返回list 的select 语句,注意resultMap 的值是指向前面定义好的--><select id="selectUsers" parameterType="string" resultMap="resultListUser">select * from user where userName like #{userName}</select>在IUserOperation 接口中增加方法:public List selectUsers(String userName); 现在在Test 类中做测试程序代码public void getUserList(String userName){SqlSession session = sqlSessionFactory.openSession();try {IUserOperationuserOperation=session.getMapper(IUserOperation.class);List users = userOperation.selectUsers(userName);for(User user:users){System.out.println(user.getId()+":"+user.getUserName()+":"+user.getUs erAddress());}} finally {session.close();}}现在在main 方法中可以测试:程序代码public static void main(String[] args) {Test testUser=new Test();testUser.getUserList("%");}可以看到,结果成功查询出来。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Mybatis3.1实战1、前言 (2)2、什么是mybatis (2)3、Mybatis入门实例 (2)4、Mybatis中的增、删、改、查 (8)5、Mybatis新特性介绍 (10)6、mybatis-config.xml中的元素介绍 (11)7、Mapper配置文件中的用法 (18)8、Mybatis参数传递 (20)9、基于注解的sql语句 (21)10、动态sql语句 (22)11、mybatis中的一对多、一对一、多对多 (24)12、自定义类型处理器 (28)13、Mybatis缓存的一点说明 (31)14、Spring3.1+springmvc+mybatis3.1集成 (31)备注 (40)Like模糊查询 (40)排序 (40)if元素中的条件语句 (41)1、前言随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis。

相信很多朋友以前看过ibatis2.x,对ibatis2.x也比较熟悉,随着技术的发展,我们必须跟得上技术发展的步伐,不能永远停留在原来的技术上而不做进一步学习。

由于在我的一个新项目中采用了mybatis,为此我发了几天来学习了mybatis,相对hibernate来说,本人感觉mybatis相对来说更加简单,特别是熟悉sql 语句的朋友们,你在采用mybatis时,你会觉得跟传统的jdbc方式来操作数据库没什么差别,只是mybatis帮你做了很多原来你在用jdbc来实现时的很多工作。

我们来看看mybatis包含了哪些新特性。

Mybatis实现了接口绑定,使用更加方便对象关系映射的改进,效率更高MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。

在本学习教程中,全方位介绍了mybatis中的各种特性,里面的实例都是采用比较简单的实例来实现,对于有些没有介绍到的特性,大家可以参考官方文档。

本教程采用的是mybatis最新的版本mybatis3.1,并结合了maven来写这个教程,所以大家需要对maven有所了解。

2、什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。

MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。

MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs (Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。

3、Mybatis入门实例在maven中加入mybatis、mysql、junit的依赖包:<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.1.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.21</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>创建数据库Create table student(id int primary key autoincrement,age int,name varchar(23));在mysql数据中创建student表。

配置SqlmapConfiguration.xml,在src目录下面的resources目录下面创建此文件,内容如下:<configuration><!-- 引入外部数据库配置文件 --><properties resource="database.properties"/><!--类型别名是为Java类型命名一个短的名字。

它只和XML配置有关,只用来减少类完全限定名的多余部分。

例如:使用这个配置,“Student”可以任意用来替代“com.marcle.domain.Student”所使用的地方。

对于普通的Java类型,有许多内建的类型别名。

它们都是大小写不敏感的,由于重载的名字,要注意原生类型的特殊处理。

--><typeAliases><typeAlias type="com.pango.mybatis.entity.Student"alias="Student"/><typeAlias type="com.pango.mybatis.entity.Status"alias="Status"/></typeAliases><!--environments 下用于配置不同数据库环境--><environments default="development"><environment id="development"><!--在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”): JDBC –这个配置直接简单使用了JDBC的提交和回滚设置。

它依赖于从数据源得到的连接来管理事务范围。

MANAGED –这个配置几乎没做什么。

它从来不提交或回滚一个连接。

而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。

默认情况下它会关闭连接。

然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false--><transactionManager type="JDBC"/><!-- 数据源的配置dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。

许多MyBatis的应用程序将会按示例中的例子来配置数据源。

然而它并不是必须的。

要知道为了方便使用延迟加载,数据源才是必须的有三种内建的数据源类型UNPOOLED –这个数据源的实现是每次被请求时简单打开和关闭连接。

它有一点慢,这是对简单应用程序的一个很好的选择,因为它不需要及时的可用连接。

不同的数据库对这个的表现也是不一样的,所以对某些数据库来说配置数据源并不重要,这个配置也是闲置的POOLED –这是JDB法C连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。

这是一种当前Web应用程序用来快速响应请求很流行的方JNDI –这个数据源的实现是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用--><dataSource type="POOLED"><property name="driver"value="${database.driver}"/><property name="url"value="${database.url}"/><property name="username"value="${er}"/><property name="password"value="${database.password}"/> </dataSource></environment></environments><mappers><!--指定要用到的mapper文件。

以下的resource属性告诉MyBatis要在类路径下的resources目录下找student.xml文件。

我们将把mapper文件存放在src目录下的resources目录中。

--><mapper resource="case/student.xml"/></mappers></configuration>其中外部引入的jdbc.properties内容如下:database.driver = com.mysql.jdbc.Driverdatabase.url = jdbc:mysql://localhost:3306/mybatis_01er = rootdatabase.password = marcle创建mapper文件,在resources目录下面的case文件夹下面创建student.xml文件<mapper namespace="com.pango.mybatis.dao.StudentDao"><resultMap type="Student"id="Student_Map"><id property="id"column="id"/><result property="age"column="age"/><result property="name"column="name"/></resultMap><insert id="insert"parameterType="Student">insert into student (age,name) values (#{age},#{name}) </insert><select id="select"resultType="Student"parameterType="int"> select * from student where id=#{id}</select></mapper>创建实体类及接口Student类public class Student implements Serializable {private Long id;private int age;private String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) { = name;}}StudentDao接口public interface StudentDao {public Student select(int id);public void insert(Student student);}SqlMapUtil 工具类及数据调用public class SqlMapUtils {private static final Logger logger =LogManager.getLogger(SqlMapUtils.class);private static final String CONFIG_FILE_PATH= "mybatis-config.xml";private SqlSessionFactory sessionFactory=null;private SqlSession session=null;private static SqlMapUtils instance=null;public SqlMapUtils(){Reader reader=null;try {reader = Resources.getResourceAsReader(CONFIG_FILE_PATH);sessionFactory = newSqlSessionFactoryBuilder().build(reader);session = sessionFactory.openSession();} catch (IOException e) {// TODO Auto-generated catch blocklogger.fatal("IO Exception occured while reading the Configuration File \n" + e);e.printStackTrace();}finally{if(reader!=null){try {reader.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}public static synchronized SqlMapUtils getInstance(){if (instance == null ){synchronized(SqlMapUtils.class){instance = new SqlMapUtils();}}return instance;}public SqlSession getSession(){if (session == null){throw new RuntimeException("Create SqlSession failed.");}return session;}}完成上面的步骤后,我们写一个测试类,测试上面所写的内容:public class StudentDaoTest {private StudentDao studentMapper;private SqlSession session;@Beforepublic void init(){session = SqlMapUtils.getInstance().getSession();studentMapper = session.getMapper(StudentDao.class);}@Testpublic void testInsert(){Student student = new Student();student.setAge(34);student.setName("luce");studentMapper.insert(student);mit();}@Testpublic void testFind(){Student student = studentMapper.select(3);System.out.println(student.getName());}@Afterpublic void end(){session.close();}}通过上面的几个步骤,我们就创建了一个完整的mybatis实例,通过这个实例,想必大家对mybatis有个初步的了解了。

相关文档
最新文档