MyBatis基础入门《十七》动态SQL

描述:

  >> 完成多条件查询等逻辑实现

  >> 用于实现动态SQL的元素主要有:

    > if

    > trim

    > where

    > set

    > choose( when , otherwise )

    > foreach

  动态SQL为Mybatis重要部分,项目也重新新建了一个:mybatis-dynamic-sql

项目结构:

TblClient.java

 1 package com.charles.entity;
 2
 3 import java.io.Serializable;
 4 import java.util.Date;
 5
 6 public class TblClient implements Serializable {
 7
 8     private static final long serialVersionUID = -5993993584624176849L;
 9
10     private Integer cid;
11     private String cname;
12     private String caddress;
13     private Date cbirthday;
14
15     public TblClient() {
16
17     }
18
19     public Integer getCid() {
20         return cid;
21     }
22
23     public void setCid(Integer cid) {
24         this.cid = cid;
25     }
26
27     public String getCname() {
28         return cname;
29     }
30
31     public void setCname(String cname) {
32         this.cname = cname;
33     }
34
35     public String getCaddress() {
36         return caddress;
37     }
38
39     public void setCaddress(String caddress) {
40         this.caddress = caddress;
41     }
42
43     public Date getCbirthday() {
44         return cbirthday;
45     }
46
47     public void setCbirthday(Date cbirthday) {
48         this.cbirthday = cbirthday;
49     }
50 }

ClientMapper.java

 1 package com.charles.mapper;
 2
 3 import java.util.List;
 4
 5 import com.charles.entity.TblClient;
 6
 7 public interface ClientMapper {
 8
 9     /***
10      * 注意这个名字,必须要和ClientMapper.xml文件中的select标签id属性值一样。
11      * @return List<TblClient> 集合
12      */
13     public List<TblClient> getClientAll();
14
15 }

ClientMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5
 6 <mapper namespace="com.charles.mapper.ClientMapper">
 7
 8     <resultMap type="com.charles.entity.TblClient" id="tblClientID">
 9         <id property="cid" column="id" />
10         <result property="cname" column="client_name"/>
11         <result property="caddress" column="client_address"/>
12         <result property="cbirthday" column="client_birthday"/>
13     </resultMap>
14
15     <select id="getClientAll" resultMap="tblClientID">
16         SELECT
17                 id ,
18                 client_name ,
19                 client_address ,
20                 client_birthday
21         FROM tbl_client
22     </select>
23
24 </mapper>

MyBatisUtil.java

 1 package com.charles.util;
 2
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSession;
 8 import org.apache.ibatis.session.SqlSessionFactory;
 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10
11 public class MyBatisUtil {
12
13     private static SqlSessionFactory factory = null;
14
15     /** 在静态代码块下,factory只会被创建一次 **/
16     static {
17         try {
18             InputStream inputStream = Resources.getResourceAsStream("mybatis/mybatis-config.xml");
19             factory = new SqlSessionFactoryBuilder().build(inputStream);
20         } catch (IOException e) {
21             e.printStackTrace();
22         }
23     }
24
25     // 获取factory
26     public static SqlSessionFactory getSessionFactory() {
27
28         return factory;
29     }
30
31     /**
32      * 获取SQLSession方法
33      *
34      * @return SQLSession
35      **/
36     public static SqlSession getSqlSession() {
37
38         // 开启事物
39         return factory.openSession(false);
40     }
41
42     /**
43      * 关闭SQLSession方法
44      *
45      * @param SQLSession对象
46      */
47     public static void closeSqlSession(SqlSession sqlSession) {
48
49         if (sqlSession != null) {
50             sqlSession.close();
51         }
52     }
53 }

mybatis-config.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5
 6 <configuration>
 7
 8     <!--
 9         注意:
10             这个配置文件的标签是有顺序的,必须按照这个顺序书写。
11             例如:settings标签就必须放在properties标签的后面。
12      -->
13
14     <!-- 引入database.properties文件 -->
15     <properties resource="properties/database.properties"></properties>
16
17     <!-- 配置mybatis的log实现log4j -->
18     <settings>
19         <setting name="logImpl" value="STDOUT_LOGGING" />
20     </settings>
21
22     <!-- 配置别名 -->
23     <typeAliases>
24         <typeAlias type="com.charles.entity.TblClient" alias="baitang" />
25     </typeAliases>
26
27     <!-- 配置Mybatis的环境 -->
28     <environments default="development">
29         <environment id="development">
30             <!-- 配置事物管理 -->
31             <transactionManager type="JDBC" />
32             <dataSource type="POOLED">
33                 <property name="driver" value="${jdbc.driver}" />
34                 <property name="url" value="${jdbc.url}" />
35                 <property name="username" value="${jdbc.username}" />
36                 <property name="password" value="${jdbc.password}" />
37             </dataSource>
38         </environment>
39     </environments>
40
41     <!-- 将Mapper文件加入到mybatis的配置文件中 -->
42     <mappers>
43         <mapper resource="com/charles/mapper/ClientMapper.xml" />
44     </mappers>
45
46
47 </configuration>

database.properties

jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://IP地址:3306/test
jdbc.url=jdbc:mysql://IP地址:3306/test
jdbc.username=charles
jdbc.password=charles

lo4j.properties

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.charles=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

JunitSelect.java

 1 package com.charles.junit;
 2
 3 import java.util.List;
 4
 5 import org.apache.ibatis.session.SqlSession;
 6 import org.junit.Test;
 7
 8 import com.charles.entity.TblClient;
 9 import com.charles.mapper.ClientMapper;
10 import com.charles.util.MyBatisUtil;
11
12 public class JunitSelect {
13
14     @Test
15     public void selectif() {
16
17         /** 1. 获取SQLSession **/
18         SqlSession session = MyBatisUtil.getSqlSession();
19
20         /** 2. 调度方法,从数据库中获取数据 **/
21         List<TblClient> list = session.getMapper(ClientMapper.class).getClientAll();
22
23         /** 3. 关闭SQLSession **/
24         MyBatisUtil.closeSqlSession(session);
25
26         for (TblClient client : list) {
27             System.out.println(client.getCid() + "\t" + client.getCname() + "\t" + client.getCaddress() + "\t"
28                     + client.getCbirthday());
29         }
30     }
31 }

pom.xml

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <groupId>com.charles.mybatis</groupId>
 5     <artifactId>mybatis-dynamic-sql</artifactId>
 6     <version>0.0.1-SNAPSHOT</version>
 7
 8     <dependencies>
 9         <dependency>
10             <groupId>junit</groupId>
11             <artifactId>junit</artifactId>
12             <version>4.11</version>
13         </dependency>
14         <dependency>
15             <groupId>log4j</groupId>
16             <artifactId>log4j</artifactId>
17             <version>1.2.17</version>
18         </dependency>
19         <dependency>
20             <groupId>org.mybatis</groupId>
21             <artifactId>mybatis</artifactId>
22             <version>3.4.6</version>
23         </dependency>
24         <dependency>
25             <groupId>mysql</groupId>
26             <artifactId>mysql-connector-java</artifactId>
27             <version>5.1.29</version>
28         </dependency>
29     </dependencies>
30
31
32 </project>

运行测试代码:JunitSelect.java 的测试结果:

如有问题,欢迎纠正!!!

如有转载,请标明源处: https://www.cnblogs.com/Charles-Yuan/p/9902779.html

转载于:https://www.cnblogs.com/Charles-Yuan/p/9902779.html

MyBatis基础入门《十七》动态SQL相关推荐

  1. Mybatis入门之动态sql

    Mybatis入门之动态sql 通过mybatis提供的各种标签方法实现动态拼接sql. 1.if.where.sql.include标签(条件.sql片段) <sql id="sel ...

  2. MyBatis基础入门《九》ResultMap自动匹配

    MyBatis基础入门<九>ResultMap自动匹配 描述: Mybatis执行select查询后,使用ResultMap接收查询的数据结果. 实体类:TblClient.java 接口 ...

  3. MyBatis:学习笔记(4)——动态SQL

    MyBatis:学习笔记(4)--动态SQL 转载于:https://www.cnblogs.com/MrSaver/p/7453949.html

  4. 【Java从0到架构师】MyBatis - 增删改、动态 SQL

    MyBatis - 增删改.动态 SQL 动态 SQL if 标签 where 标签 sql 标签 foreach 标签 添加 主键设置 批量添加 - 利用 foreach 标签 更新 删除 批量删除 ...

  5. Java神鬼莫测之MyBatis注解开发之动态SQL语句(六)

    1.Mybatis注解开发之动态SQL语句 背景:使用mybatis的注解开发动态Sql会比较麻烦, 很不方便, 所以不太推荐使用,该文章以查询作为案例,演示动态sql语句. 注意:Mybatis的动 ...

  6. SSM框架开发web项目系列(四) MyBatis之快速掌握动态SQL

    前言 通过前面的MyBatis部分学习,已经可以使用MyBatis独立构建一个数据库程序,基本的增删查改/关联查询等等都可以实现了.简单的单表操作和关联查询在实际开的业务流程中一定会有,但是可能只会占 ...

  7. Mybatis框架(复杂动态SQL),一对一,一对多,多对多

    复合条件查询(动态SQL) MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记 ...

  8. Mybatis(三)动态SQL

    Mybatis动态SQL Mybatis的强大特征之一就是动态SQL.Mybatis采用功能强大的基于OGNL表达式来淘汰其他大部分元素.使用mybatis提供的各种标签方法实现动态拼接sql.动态传 ...

  9. Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!

    封面:洛小汐 作者:潘潘 2021年,仰望天空,脚踏实地. 这算是春节后首篇 Mybatis 文了~ 跨了个年感觉写了有半个世纪 - 借着女神节 ヾ(◍°∇°◍)ノ゙ 提前祝男神女神们越靓越富越嗨森! ...

  10. MyBatis(多表查询,动态SQL的使用)

    目录 多表查询 查询文章详情 查询一个用户底下的所有文章 动态SQL的使用 if 标签 trim 标签 where 标签 set 标签 foreach 标签 多表查询 现在有俩张表,一张是文章表,一张 ...

最新文章

  1. 干货!用大白话告诉你什么是Mock测试
  2. 开发错误记录9:Application无法跳转到Activity
  3. USB驱动程序之概念介绍学习笔记
  4. 经典小游戏--推箱子
  5. 一张小票看透支付清结算架构
  6. 《喜剧之王》- 24/7 - Cagnet
  7. r语言员工离职_HR,你真的会做员工面谈吗?
  8. FFMPEG系列课程(一)打开视频解码器
  9. 如何检查某个用户是否具有某个权限对象上定义的某种权限
  10. u-boot与bootloader及其区别
  11. capcreatecapturewindowa 说明_阳江陶瓷坯体增强剂使用说明
  12. 前端周记20190211-20190215
  13. 算法:整数除法上取整
  14. 海信电视微助手怎么连接电脑连接网络连接服务器,海信电视微助手怎么连接电视...
  15. 云计算是什么,阿里云提供哪些云服务
  16. WinRAR是什么?------压缩工具
  17. ASO学习——《ASO优化大师》笔记
  18. 打开dbf时自动打开fxp_全新帕萨特打开点火开关后雨刮器会自动工作一次
  19. a标签去下划线 菜鸟教程_HTML下划线标签示例教程
  20. 个人承接微信H5制作设计,需要的联系我

热门文章

  1. Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
  2. GIS-python学习
  3. 自然语言处理跟踪研究
  4. 文本生成系列之transformer结构扩展(二)
  5. 清北中科院12位大咖联手,带你入门AI热门领域NLP!限时只需199
  6. 本周论文推荐(迁移学习、图神经网络)
  7. 【智能医疗】48页论文详述医学AI最新进展
  8. 详解循环神经网络RNN(理论篇)
  9. leetcode—25.链表排序题目leetcode总结
  10. 【重磅预告】揭秘阿里双11技术进步历程!