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

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

时间: 2024-09-30 07:10:31

MyBatis基础入门《十七》动态SQL的相关文章

MyBatis基础入门《五》核心配置文件

MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-config.xml 文件. 资料参考:http://www.mybatis.org/mybatis-3/ 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUB

MyBatis基础入门《七》查询参数传入对象

MyBatis基础入门<七>查询参数传入对象 描述: 在执行查询语句的时候,传入的参数是一个对象,依据对象的属性,进行检索数据.此时,书写SQL语句中的条件时,其参数需要和对象中的属性保持一致. 实体类:TblClient.java 接口方法 注意: 接口中定义了一个新的方法(根据对象属性进行查询数据),方法的参数传入的是一个对象. xml文件 注意: >>> parameterType="baitang" resultType="baitang

MyBatis学习总结_11_MyBatis动态Sql语句

MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(when,otherwise) trim where set foreach 1.if 对属性进行判断,如果不为空则执行判断条件 [html] view plaincopy <select id="selectByCriteria" parameterType="com.mu

MyBatis学习总结(六)——动态SQL

MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. MyBatis中用于实现动态SQL的元素主要有: if choose(when,otherwise) foreach where set trim 下面我们主要说 where set trim 这三个标签 1,where标签 <!-- 查询学生list,like姓名,=性别 --> <select id="getStudentListWhere" parameterTy

MyBatis基础入门《十五》ResultMap子元素(collection)

MyBatis基础入门<十五>ResultMap子元素(collection) 描述: 见<MyBatis基础入门<十四>ResultMap子元素(association )> >>collection >> 复杂类型集合,一对多 >> 内部嵌套 > 映射一个嵌套结果集到一个列表 >> 属性 > property : 映射数据库列的实体对象的属性 > ofType : 完整java类名或别名(集合所包括的

mybatis入门-2 动态sql

MyBatis 的强大特性之一便是它的动态 SQL. 闲话少说,代码撸起来! IF 这基本上是where的必需品了 public interface BlogMapper { //这个地方需要注解 @Param 对这个参数进行命名,要不然if的时候获取不到参数名称 List<Blog> selectByTitle(@Param("title") String title); } <?xml version="1.0" encoding="

MyBatis基础入门

鲁春利的工作笔记,好记性不如烂笔头 官方文档详见:http://www.mybatis.org/mybatis-3/zh/index.html 入门 XML配置 XML映射文件 动态SQL Java API 日志

Mybatis特性值缓存和动态SQL

缓存 MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.MyBatis 3中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置. 默认情况下是没有开启缓存的,除了局部的session缓存,可以增强变现而且处理循环依赖也是必须的.要开启二级缓存,你需要在你的SQL映射文件中添加一行: <cache/> 字面上看就是这样.这个简单语句的效果如下: ? 映射语句文件中的所有select语句将会被缓存. ? 映射语句文件中的所有insert,update和delete

Mybatis映射原理,动态SQL,log4j

1.理清mybatis中的#和$之间的区别? #{ }:表示一个预处理参数,参数类型不定,是根据传入的参数类型来设定的. 类似于JDBC中的? 特例使用,模糊查询:(针对oracle): and username like concat(concat('%',#{username}),'%') 采取的$的方式传入参数,所有采取$的方式传入的参数都只是字符串(无论传入的是什么,都会当成字符串处理),潜在的危险就是SQL注入的问题. and username like '%${value}%' 注意