描述:
>> 完成多条件查询等逻辑实现
>> 用于实现动态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 // 获取factory26 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 @Test15 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