IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 企业智能软件开发(五)—SpringBoot与Mybatis(增删改查xml化) -> 正文阅读

[Java知识库]企业智能软件开发(五)—SpringBoot与Mybatis(增删改查xml化)

Mybatis的XML映射文件

前面我们是将SQL语句绑定在USerDao类中,下面我们使用的是更为灵活的方法,将SQL语句写到xml映射文件中。

使用xml映射的优点:

使用多条件映射的SQL语句时,例如:
SELECT * FROM t_user where birthday >= (#{date1}) and birthday <= (#{date2})
这条SQL语句中使用了有两个条件。
如果使用的是UserDao绑定的方法,这条SQL语句就得是固定不变的。当我们要只需要其中的一个查询条件,又不想传1=1给SQL。
XML映射就可以解决这种方法。

我们的XML映射和UserDao绑定的方法是可以混合使用的,但是注意的是,我们不可以在同一个方法中同时使用XML映射和UserDao绑定。使用方法在
Mybatis解决连续条件使用中参考使用。

使用XML映射的几个条件:

  1. 使用的XML映射文件需要放在与UserDao类同一个包下
    1

  2. 使用的xml文件中的namespace和需要绑定的Dao接口全限定名一致
    2

  3. 使用的XMl文件的ID需要和UserDao类的方法名一致
    3

  4. 使用的返回类型需要和UserDao类的返回类型一致
    在这里插入图片描述

类型别名typeAliases

在这里插入图片描述

  1. 上面我们使用的XML文件中返回的类别名书写太长,比较麻烦。
    使用类型别名typeAliases可以简化返回别名的书写。
# 注:该类型别名加入到src/main/resources下的application.properties
# 简化xml的开发
# mybatis类型别名
mybatis.type-aliases-package=com.test.bean

加入类别名之后我们只需要在返回别名中写User皆可。

  1. 每一个在包 com.iflytek.bean中的 Java Bean,默认会使用 Bean 的首字母小写的非限定类名来作为它的别名

  2. 如果需要修改默认的别名,可以使用@Alias注解,如
    3

  • 这里我插播一条能,调整dao类的日志输出等级,使其在控制台打印执行的SQL语句的application.properties配置
#调整dao类的日志输出等级,使其在控制台打印执行的SQL语句
logging.level.com.iflytek.dao=debug

输出效果如下
2

结果映射ResultMap

  1. 在数据库名与javaBean类属性名相同的情况下,MyBatis会自动匹配SQL与JavaBean中相同字段的参数作为返回。

  2. 在数据库名与javaBean类属性名不相同的情况下,就需要映射ResultMap来解决返回的问题。

	<resultMap id="userResultMap" type="user">
		<id column="id" property="id"></id>						   <!-- 主键的列用的id -->
		
		<!-- 普通的列用的result, column表示数据库列名,property代表java类中的属性 -->
		<result column="password" property="mypassword"></result>  
	</resultMap>

注意, 节点中resultMap和resultType只能二选一

Mybatis解决连续条件使用

这里说明标签==<where></where>,<set></set>。这两个标签通常包含<if></if>标签使用。
1. where会判定第一个使用到的if标签并消除if标签中的前面的and连接词,
如果一个条件都没有使用到那么就默认为无条件SQL操作。
2. set会判定第一个使用到的if标签并消除if标签中的后面的 , 符号。

where代码段:

<select id='getDate' resultType='user'>
		SELECT * FROM t_user 
		<where>
		<if test="date1 !=null">
			and birthday  &gt;= (#{date1}) 
		</if>
		<if test="date2 !=null">
			and birthday  &lt;= (#{date2})
		</if>	
		</where>
	</select>

set代码段:

	<update id='updateUser'>
		update t_user 
		<set>
		<if test="realName != null ">
			real_name=#{realName},
		</if>
		<if test="phone != null">
			phone=#{phone},
		</if>
		<if test="email !=null">
			email=#{email}
		</if>
		</set> 
		  where id=#{id}
	</update>

代码展示部分

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.test.dao.UserDao">
	<resultMap id="userResultMap" type="user">
		<id column="id" property="id"></id>						   <!-- 主键的列用的id -->
		
		<!-- 普通的列用的result, column表示数据库列名,property代表java类中的属性 -->
		<result column="password" property="mypassword"></result>  
	</resultMap>
	
	<select id='getUserById' resultType='user'>
		select * from t_user where id=#{id};
	</select>

	<select id='wordUser' resultType='user'>
		select * from t_user where real_name like concat('%',#{realname},'%');
	</select>
	
	<select id='getDate' resultType='user'>
		SELECT * FROM t_user 
		<where>
		<if test="date1 !=null">
			and birthday  &gt;= (#{date1}) 
		</if>
		<if test="date2 !=null">
			and birthday  &lt;= (#{date2})
		</if>	
		</where>
	</select>
	
	<insert id='insertUser'>
		insert into t_user( real_name, phone, email)
		"
		+ "values( #{realName}, #{phone}, #{email});
	</insert>

	<update id='updateUser'>
		update t_user 
		<set>
		<if test="realName != null ">
			real_name=#{realName},
		</if>
		<if test="phone != null">
			phone=#{phone},
		</if>
		<if test="email !=null">
			email=#{email}
		</if>
		</set> 
		  where id=#{id}
	</update>

	<delete id='deleteUser'>
		delete from t_user where id=#{id};
	</delete>
</mapper>

UserDao部分

package com.test.dao;



import java.util.List;


import com.test.bean.User;



/**
 * 注意这里是一个接口(interface),Mybatis会利用动态代理技术在运行过程中动态生成这个类的实现类
 */
public interface UserDao {

//	@Select("select * from t_user where id=#{id}")
	public User getUserById(Integer id);
	
//	@Select("select * from t_user where real_name like CONCAT('%',#{word},'%'); ")
	public List<User> getUserByWord(String word);
	
//	@Select("select * from t_user")
	public List<User> getAllUsers();
	
	public List<User> getDate(String date1,String date2);

//	//插入用户
//	@Insert("insert into t_user( real_name, phone, email)"
//			+ " values ( #{realName}, #{phone}, #{email}) ")
	public void insertUser(User user);


//	//更新用户
//	@Update("update t_user set real_name=#{realName},"
//			+ "phone=#{phone}, email=#{email} "
//			+ "where id=#{id}")
	public void updateUser(User user);


//	@Delete("delete from t_user where id=#{id}")
	public void deleteUserById(Integer id);
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-18 17:15:46  更:2021-10-18 17:18:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:41:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码