数据库:
create table INSURANCE_PRODUCT
(
product_code VARCHAR2(32) not null,
product_name NVARCHAR2(20),
product_type VARCHAR2(1),
validate_date VARCHAR2(8)
)
;
alter table INSURANCE_PRODUCT
add constraint PK primary key (PRODUCT_CODE);
insert into INSURANCE_PRODUCT (product_code, product_name, product_type, validate_date)
values ('01001', '牙刷', '1', '20150819');
insert into INSURANCE_PRODUCT (product_code, product_name, product_type, validate_date)
values ('01002', '毛巾', '1', '20150818');
insert into INSURANCE_PRODUCT (product_code, product_name, product_type, validate_date)
values ('01003', '脸盆', '1', '20150817');
insert into INSURANCE_PRODUCT (product_code, product_name, product_type, validate_date)
values ('02001', '手机', '2', '20150820');
insert into INSURANCE_PRODUCT (product_code, product_name, product_type, validate_date)
values ('02002', '笔记本', '2', '20150821');
insert into INSURANCE_PRODUCT (product_code, product_name, product_type, validate_date)
values ('02003', 'ipad', '2', '20150822');
insert into INSURANCE_PRODUCT (product_code, product_name, product_type, validate_date)
values ('03001', '苹果', '3', '20150101');
insert into INSURANCE_PRODUCT (product_code, product_name, product_type, validate_date)
values ('03002', '香蕉', '3', '20150102');
insert into INSURANCE_PRODUCT (product_code, product_name, product_type, validate_date)
values ('03003', '梨子', '3', '20150103');
insert into INSURANCE_PRODUCT (product_code, product_name, product_type, validate_date)
values ('04001', '衣服', '4', '20150808');
commit;
BaseMapper.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="baseMapper">
<sql id="filterWhereParam">
<foreach collection="mapTag" item="myvalue" index="mykey">
<if test="myvalue != null and myvalue != ''"></if>
and ${mykey} = #{myvalue}
</foreach>
</sql>
</mapper>
InsuranceProductMapper.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="InsuranceProductMapper">
<resultMap type="entity.InsuranceProduct" id="queryMap">
<id column="PRODUCT_CODE" property="productCode"/>
<result column="PRODUCT_NAME" property="productName"/>
<result column="PRODUCT_TYPE" property="productType"/>
<result column="VALIDATE_DATE" property="validateDate"/>
</resultMap>
<select id="selectAllByCondition" resultMap="queryMap" parameterType="query.Query">
select t.PRODUCT_CODE, t.PRODUCT_NAME, t.PRODUCT_TYPE, t.VALIDATE_DATE
from INSURANCE_PRODUCT t where 1 = 1
<include refid="baseMapper.filterWhereParam"></include>
</select>
</mapper>
查询参数 Query.java:
package query;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Query {
private List<String> listTag = new ArrayList<String>();
private Map<String, String> mapTag = new HashMap<String, String>();
public List<String> getListTag() {
return listTag;
}
public void setListTag(List<String> listTag) {
this.listTag = listTag;
}
public Map<String, String> getMapTag() {
return mapTag;
}
public void setMapTag(Map<String, String> mapTag) {
this.mapTag = mapTag;
}
}
表对应的实体类 InsuranceProduct.java:
package entity;
public class InsuranceProduct {
private String productCode;
private String productName;
private String productType;
private String validateDate;
public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductType() {
return productType;
}
public void setProductType(String productType) {
this.productType = productType;
}
public String getValidateDate() {
return validateDate;
}
public void setValidateDate(String validateDate) {
this.validateDate = validateDate;
}
@Override
public String toString() {
return "\nInsuranceProduct [productCode=" + productCode
+ ", productName=" + productName + ", productType="
+ productType + ", validateDate=" + validateDate + "]\n";
}
}
TestMybatis.java:
package test;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import query.Query;
public class TestMybatis {
@Test
public void testCommon(){
//mybatis的配置文件
String resource = "mybatis-config.xml";
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
InputStream is = TestMybatis.class.getClassLoader().getResourceAsStream(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
String statement = "InsuranceProductMapper.selectAllByCondition";//映射sql的标识字符串
List<Object> list = session.selectList(statement);
System.out.println(list);
}
@Test
public void testForeachSimple(){
//mybatis的配置文件
String resource = "mybatis-config.xml";
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
InputStream is = TestMybatis.class.getClassLoader().getResourceAsStream(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
String statement = "InsuranceProductMapper.selectAllByCondition";//映射sql的标识字符串
Query query = new Query();
query.getMapTag().put("t.PRODUCT_CODE", "01001");
System.out.println(query.getMapTag());
List<Object> list = session.selectList(statement, query);
System.out.println(list);
}
}
参考:
http://blog.csdn.net/isea533/article/details/22336991
分享到:
相关推荐
在使用Mybatis框架时,还可以使用 `<sql>` 和 `<include>` 标签来实现SQL重用。例如,使用 `<sql>` 标签来定义一个SQL片段,然后使用 `<include>` 标签来引入这个SQL片段。 Mybatis框架提供了多种方式来实现动态...
在Mapper接口中,我们可以使用@Select、@Insert、@Update和@Delete等注解来标记SQL语句。同时,@Results和@Result注解用于映射查询结果到Java对象。这种方式避免了XML配置文件,提高了代码的可读性和可维护性。 ...
首先,MyBatis是一个流行的Java持久层框架,它允许开发者直接编写SQL语句,从而实现灵活的数据查询和操作。MyBatis消除了几乎所有的JDBC代码和手动设置参数,通过XML或注解的方式将SQL与Java代码绑定,简化了数据库...
7. **Mapper配置**:在Mapper接口的类路径下创建对应的Mapper XML文件,虽然使用了注解,但仍然需要一个空的XML文件作为MyBatis扫描的标记。 8. **创建Service层**:创建Service层接口及实现类,注入Mapper接口,并...
在MyBatis中,我们通常使用XML映射文件或注解来定义SQL语句。对于数据加密的需求,MyBatis提供了一种称为“插件”的机制,可以拦截SQL执行过程并在其中插入加密或解密的逻辑。MyBatis的插件系统允许开发者创建自定义...
MyBatis是一个轻量级的ORM(Object-Relational Mapping)框架,它允许开发者将SQL语句与Java代码分离,使得数据库操作更加灵活和易于维护。在SpringBoot中集成MyBatis,需要在`pom.xml`引入MyBatis和SpringBoot ...
MyBatis插件机制允许开发者自定义拦截器,以在SQL执行前后插入额外的操作。在这个场景下,我们可以利用插件来对输入参数中的敏感数据进行加密,并对查询结果进行解密。主要涉及两个关键接口:`ParameterHandler`和`...
通过@Mapper注解标记接口,MyBatis可以在运行时动态生成实现类,实现SQL的执行。同时,ResultMap用于描述如何将数据库查询结果映射到Java对象。 MyBatis的参数映射和结果映射是其灵活性的关键。在Mapper XML中,...
使用`@Mapper`注解标记接口,并在Spring Boot配置文件中启用自动扫描Mapper接口。 6. **开启Druid SQL监控** Druid提供了一个内置的Web监控界面,可以查看数据库连接池状态、SQL执行情况等。要在Spring Boot应用中...
在MyBatis中,使用#{}和${}两种方式获取参数时,它们的差别主要在于:#{}是预编译处理,它会将参数预编译到SQL语句中,可以有效防止SQL注入,而${}是直接将参数拼接在SQL语句中,不推荐使用。当实体类属性与数据库...
Mybatis的动态SQL功能非常强大,允许在XML映射文件中使用条件判断、循环等结构,使得SQL语句可以根据实际需求灵活生成。 5. **Mapper接口与Mapper XML的关联** Mybatis通过注解或者XML文件将Mapper接口与对应的...
使用注解@Param标记参数。 6. **结果映射** 结果映射主要用于复杂的数据结构映射,例如一对一、一对多、多对多关系的映射,以及自定义结果处理器。 7. **缓存机制** MyBatis内置了两级缓存:一级缓存是...
- **创建Mapper接口**:定义Mapper接口,接口方法对应SQL语句,使用@Mapper注解标记。 - **Mapper XML文件**:创建对应的Mapper XML文件,编写SQL语句。 - **配置Mapper扫描**:在Spring Boot的配置类中,使用@...
在这种情况下,我们通常需要自定义SQL或者使用MyBatis的动态SQL特性,如`<if>`、`<choose>`、`<when>`、`<otherwise>`等标签来实现动态条件的拼接。 `demo.zip`中提供的Java类很可能是为了弥补这个不足,通过编写...
- 使用`@Mapper`注解标记Mapper接口,使MyBatis能够识别。 5. 数据库连接与事务管理 - 通过DataSource获取数据库连接。 - SqlSession提供了开始事务、提交事务、回滚事务的方法,管理数据库事务。 6. CRUD操作 ...
4. 实体类注解:在实体类上使用@TableId、@TableField等注解,标记主键和字段信息。 三、自定义SQL语句 Mybatis Plus允许开发者自定义SQL语句,以满足复杂查询需求。主要有以下几种方式: 1. LambdaQueryWrapper:...
1. **XML 或注解配置**:MyBatis 允许开发者在 XML 文件或实体类上使用注解来定义 SQL 语句,使得 SQL 与代码分离,易于管理和调试。 2. **动态 SQL**:MyBatis 支持动态 SQL,可以根据条件动态生成 SQL,增加了代码...
1. **@Mapper**: 这个注解是定义Mapper接口时使用的,标记在接口上,表明这个接口是一个MyBatis的Mapper接口。例如: ```java @Mapper public interface UserMapper { User selectUserById(int id); } ``` 2. **@...
Service层通常包含Service接口和实现类,使用依赖注入(DI)来注入MyBatis的Mapper接口,从而完成数据访问。 **MyBatis** MyBatis是一个基于Java的持久层框架,它允许开发者编写SQL语句,同时提供了强大的映射框架...
- 创建Mapper接口:在Java代码中创建Mapper接口,接口方法对应SQL语句,使用@Mapper注解标记。 - 编写Mapper XML文件:在资源目录下创建对应的Mapper XML文件,编写SQL语句,通过id与Mapper接口的方法对应。 - ...