动态SQL各个标签作用以及注意事项详解
创建com.mybatis包,包含:UserMapper.xml和mybatis-config.xml
UserMapper.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.dao.UserDao">
- <!--id应该是接口中的方法,结果类型如没有配置别名则应该使用全名称 -->
- <!-- if标签 -->
- <select id="selectUserByIf" resultType="com.po.MyUser"
- parameterType="com.po.MyUser">
- select * from user where 1=1
- <if test ="uname != null and uname !=''">
- and uname like concat('%',#{uname},'%')
- </if>
- <if test="usex != null and usex !=''">
- and usex=#{usex}
- </if>
- </select>
- <!-- choose标签 -->
- <select id="selectUserByChoose" resultType="com.po.MyUser"
- parameterType="com.po.MyUser">
- select * from user where 1=1
- <choose>
- <when test="uname != null and uname !=''">
- and uname like concat('%',#{uname},'%')
- </when>
- <when test="usex != null and usex !=''">
- and usex=#{usex}
- </when>
- <otherwise>
- and uid >= 10
- </otherwise>
- </choose>
- </select>
- <!-- trim标签 -->
- <select id="selectUserByTrim" resultType="com.po.MyUser"
- parameterType="com.po.MyUser">
- select * from user
- <trim prefix="where" prefixOverrides="and |or">
- <!-- prefix指的是将整个语句的前缀‘and’被‘where’覆盖, 若不覆盖sql语句会变成:
- select * from user and uname like concat('%',#{uname},'%') -->
- <if test="uname != null and uname != ''">
- and uname like concat('%',#{uname},'%')
- </if>
- <if test="usex != null and usex !=''">
- and usex=#{usex}
- </if>
- </trim>
- </select>
- <!-- set标签 -->
- <update id="updateUserBySet" parameterType="com.po.MyUser">
- update user
- <set>
- <if test="uname!=null">uname=#{uname},</if>
- <if test="usex!=null">usex=#{sex}</if>
- </set>
- where uid=#{uid}
- </update>
- <!-- foreach标签 -->
- <!-- 三种用法详解:https://blog.csdn.net/hjh908778/article/details/79034395 -->
- <select id="selectUserByForceah" resultType="com.po.MyUser"
- parameterType="List">
- select * from user where uid in
- <foreach item="item" index="index" collection="list"
- open="(" separator="," close=")">
- <!--collection:代表传递进来的参数名称,可以是一个数组、List、Set等集合
- item:配置的是循环中的当前元素
- index:配置的是当前元素在集合中的位置下标
- open和close:配置的是以什么符号将这些集合元素包装起来
- separator:是各个元素的间隔符 -->
- #{item}
- </foreach>
- </select>
- </mapper>
mybatis-config.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>
- <mappers>
- <mapper resource="com/mybatis/UserMapper.xml"/>
- </mappers>
- </configuration>
创建com.dao包,包含:UserDao.java代码:
- package com.dao;
- import java.util.List;
- import org.apache.ibatis.annotations.Mapper;
- import org.springframework.stereotype.Repository;
- import com.po.MyUser;
- @Repository("userDao")
- @Mapper
- public interface UserDao {
- public MyUser selectUserById(Integer uid);
- public List<MyUser> selectAllUser();
- public int addUser(MyUser user);
- public int updateUser(MyUser user);
- public int deleteUser(Integer uid);
- }
创建com.po包,包括:MyUser.java代码:
- package com.po;
- public class MyUser {
- private Integer uid;
- private String uname;
- private String usex;
- public Integer getUid() {
- return uid;
- }
- public void setUid(Integer uid) {
- this.uid = uid;
- }
- public String getUname() {
- return uname;
- }
- public void setUname(String uname) {
- this.uname = uname;
- }
- public String getUsex() {
- return usex;
- }
- public void setUsex(String usex) {
- this.usex = usex;
- }
- public String toString() {
- return "User[uid="+ uid +",uname="+uname+",usex"+usex+"]";
- }
- }
创建com.controller包,包括:TestController.java和UserController.java
UserController.java代码:
- package com.controller;
- import java.util.List;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import com.dao.UserDao;
- import com.po.MyUser;
- @Controller("userController")
- public class UserController {
- @Autowired
- private UserDao userDao;
- public void test() {
- MyUser auser = userDao.selectUserById(1);
- System.out.println(auser);
- System.out.println("====================");
- MyUser addmu = new MyUser();
- addmu.setUid(1);
- addmu.setUname("陈恒");
- addmu.setUsex("男");
- int add=userDao.addUser(addmu);
- System.out.println("=====================");
- MyUser updatemu = new MyUser();
- updatemu.setUid(1);
- updatemu.setUname("张三");
- updatemu.setUsex("女");
- int up = userDao.updateUser(updatemu);
- System.out.println("修改了"+up+"条记录");
- System.out.println("=====================");
- int dl = userDao.deleteUser(9);
- System.out.println("删除了"+dl+"条记录");
- System.out.println("=====================");
- List<MyUser>list =userDao.selectAllUser();
- for(MyUser myUser: list) {
- System.out.println(myUser);
- }
- }
- }
TestController.java代码:
- package com.controller;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class TestController {
- public static void main(String[] args) {
- ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");
- UserController ct = (UserController)appCon.getBean("userController");
- ct.test();
- }
- }
在src下直接创建applicationContext.xml,代码:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx.xsd">
- <context:component-scan base-package="com.dao"/>
- <context:component-scan base-package="com.controller"/>
- <!-- 配置数据源 -->
- <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
- <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://localhost:3306/springtest?characterEncoding=utf8"/>
- <property name="username" value="root"/>
- <property name="password" value="root"/>
- <property name="maxTotal" value="30"/>
- <property name="maxIdle" value="10"/>
- <property name="initialSize" value="5"/>
- </bean>
- <!-- 添加事务支持 -->
- <bean id="txManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"/>
- </bean>
- <!-- 开启事务注解 -->
<!-- 事务管理器 的作用就是告诉spring容器利用jdbc的技术进行处理,如果是采用的hibernate则需要配置HibernateTransactionManager来实现-->- <tx:annotation-driven transaction-manager="txManager" />
- <!-- 配制MyBatis工厂,同时指定数据源,并与MyBatis完美结合 -->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource"/>
- <!-- configLocation 的属性为MyBatis的核心配置文件 -->
- <property name="configLocation" value="classpath:com/mybatis/mybatis-config.xml"/>
- </bean>
- <!-- 扫描所有被@Mapper注解的接口 -->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="basePackage" value="com.dao"/>
- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
- </bean>
- </beans>
动态SQL各个标签作用以及注意事项详解的更多相关文章
- JAVA 注解的几大作用及使用方法详解
JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...
- 技巧:Linux 动态库与静态库制作及使用详解
技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用方法 Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 L ...
- dede的pagelist标签的listsize数字属性详解(借鉴)
dede的pagelist标签的listsize数字属性详解.见远seo经常用织梦搭建各种网站,有次发现列表页面的分页显示超过div的界限,也就是溢出了或者说是撑破了.后来经过研究发现是pagelis ...
- SQL Server日期时间格式转换字符串详解
本文我们主要介绍了SQL Server日期时间格式转换字符串的相关知识,并给出了大量实例对其各个参数进行对比说明,希望能够对您有所帮助. 在SQL Server数据库中,SQL Server日期时间格 ...
- dede的pagelist标签的listsize数字属性详解
转载▼http://blog.sina.com.cn/s/blog_a4f3bd4e01012c8n.html dede的pagelist标签的listsize数字属性详解.见远seo经常用织梦搭建各 ...
- SQLServer 常见SQL笔试题之语句操作题详解
SqlServer 常见SQL笔试题之语句操作题详解 by:授客 QQ:1033553122 测试数据库 CREATE DATABASE handWriting ON PRIMARY ( name = ...
- Mybatis学习笔记之---动态sql中标签的使用
动态Sql语句中标签的使用 (一)常用标签 1.<if> if标签通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件, 他也经常用于UPDATE语句中判断是否更新某一个字段 ...
- 动态SQL之标签
本节主要讲了动态SQL的几个标签:where set trim where: 检出where语句的最前面是否含有AND和一个空格 或者 or和一个空格 ,如果有的话删除 set: 检出set的最后是否 ...
- 动态SQL常用标签
动态 SQL 目的:为了摆脱在不同条件拼接 SQL 语句的痛苦 在不同条件在生成不同的SQL语句 本质上仍然是SQL语句,不过是多了逻辑代码去拼接SQL,只要保证SQL的正确性按照格式去排列组合 可以 ...
随机推荐
- shell脚本编程(ubantu)
项目 内容 这个作业属于那个课程 这里是链接 作业要求在哪里 这里是链接 学号-姓名 17041506-张政 作业学习目标 了解shell脚本的概念及使用:掌握shell脚本语言的基本语法:学习简单的 ...
- python3(二)
# 布尔值和Java一样不做验证了 # 空值None是一个特殊的空值 # 变量 变量名必须是大小写英文.数字和_的组合,且不能用数字开头,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以 ...
- Java序列化机制中的类版本问题 serialVersionUID的静态字段 含义
Java序列化机制中的类版本问题 分类: [Java 基础]2014-10-31 21:13 480人阅读 评论(0) 收藏 举报 目录(?)[+] 原文地址:http://yanwu ...
- Three.js实现3D地图实例分享
本文主要给大家介绍了关于利用Three.js开发实现3D地图的实践过程,文中通过示例代码介绍的非常详细,对大家学习或者使用three.js具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习 ...
- mvc传递json数据到view简单实例
基于extjs4.2 controller //存储数据的类 public class DataLink { public string Name { get; set; } public strin ...
- D - Leading and Trailing LightOJ - 1282
题解:求n^k的前三位和后三位. 后三位直接快速幂对1000去余就可以了.前三位可以转换成浮点数来操作,也是用快速幂,我们只保留答案的前三位,当前值大于1000.0的话就除以10,直到结果小于等于10 ...
- E - Farthest Nodes in a Tree
Given a tree (a connected graph with no cycles), you have to find the farthest nodes in the tree. Th ...
- 原创zookeeper3.4.6集群安装
tar -zxvf zookeeper-3.4.6.tar.gz -C /home/hadoop/ vi ~/.bash_profile export ZOOKEEPER_HOME=/home/had ...
- jmeter元件的执行顺序
元件的执行顺序 在同一作用域范围内,test plan中的元件按照以下顺序执行:1) Config Elements--配置元件2) Pre-porcessors --前置处理器3) Timer-定时 ...
- 微信小程序基本知识
逻辑实现 1 使用动态数据展示列表(可以考虑使用wx:for属性配合动态数组渲染全部列表项,以减少WXML页面的代码量) eg: <view class='listGroup' wx:for= ...