Mybatis3

1      Mybatis扩展

1.1     example查询

1.2     分页插件

1.3      注解

1.4     自定义类型转化器

2      Mapper接口

Example:where后的条件


方法   


功能说明


int countByExample(XXXExample example) thorws SQLException


按条件计数


int deleteByPrimaryKey(Integer id) SQLException


按主键删除


int deleteByExample(XXXExample example) thorws SQLException


按条件删除


String/Integer insert(XXX record) thorws SQLException


插入数据


XXX selectByPrimaryKey(Integer id) thorws SQLException


按主键查询


ListselectByExample(XXXExample example) thorws SQLException


按条件查询


ListselectByExampleWithBLOGs(XXXExample example) thorws SQLException


按条件查询(包括BLOB字段)。只有当数据表中的字段类型有为二进制的才会产生。


int updateByPrimaryKey(XXX record) thorws SQLException


按主键更新


int updateByPrimaryKeySelective(XXX record) thorws SQLException


按主键更新值不为null的字段


int updateByExample(XXX record, XXXExample example) thorws SQLException


按条件更新


int updateByExampleSelective(XXX record, XXXExample example) thorws SQLException


按条件更新值不为null的字段

注意:


int updateByExampleSelective(@Param("record") Pets record, @Param("example") PetsExample example);

/**

* 使用@Param("record") 注解,可以把参数封装成Map<String,Object>

* @Param("record") Pets record, @Param("example") 相当于

*

* Map<String,Object> map = new HashMap(String,Object);

* map.put("record",record);

* map.put("example",example);

*/

上述方法中的@Param注解

mybatis会把参数封装成Map对象,键为注解的参数,值为方法的参数

3      example实例解析

mybatis的逆向工程中会生成实例及实例对应的example,example用于添加条件,相当where后面的部分

xxxExample example = new xxxExample();

Criteria criteria = example .createCriteria();


方法


说明


example.setOrderByClause(“字段名
ASC”);


添加升序排列条件,DESC为降序


example.setDistinct(false)


去除重复,boolean型,true为选择不重复的记录。


criteria.andXxxIsNull


添加字段xxx为null的条件


criteria.andXxxIsNotNull


添加字段xxx不为null的条件


criteria.andXxxEqualTo(value)


添加xxx字段等于value条件


criteria.andXxxNotEqualTo(value)


添加xxx字段不等于value条件


criteria.andXxxGreaterThan(value)


添加xxx字段大于value条件


criteria.andXxxGreaterThanOrEqualTo(value)


添加xxx字段大于等于value条件


criteria.andXxxLessThan(value)


添加xxx字段小于value条件


criteria.andXxxLessThanOrEqualTo(value)


添加xxx字段小于等于value条件


criteria.andXxxIn(List<?>)


添加xxx字段值在List<?>条件


criteria.andXxxNotIn(List<?>)


添加xxx字段值不在List<?>条件


criteria.andXxxLike(“%”+value+”%”)


添加xxx字段值为value的模糊查询条件


criteria.andXxxNotLike(“%”+value+”%”)


添加xxx字段值不为value的模糊查询条件


criteria.andXxxBetween(value1,value2)


添加xxx字段值在value1和value2之间条件


criteria.andXxxNotBetween(value1,value2)


添加xxx字段值不在value1和value2之间条件

4     
分页插件

1. pom.xml文件中添加分页插件


<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper
-->

<dependency>

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper</artifactId>

<version>4.1.6</version>

</dependency>

 

2. mybatis配置文件中添加分页插件


<plugins>

<plugin interceptor="com.github.pagehelper.PageHelper">

<property name="dialect" value="mysql"/>

</plugin>

<!--5.0版本pagehelper-->

<!-- <plugin interceptor="com.github.pagehelper.PageInterceptor">

<property
name="helperDialect" value="mysql"/>

</plugin>
-->

</plugins>

 

3. 测试类中使用PageHelper分页查询


PageHelper.startPage(2, 4);

List<Pets>
list1 
= mapper.selectByExample(null);

PageInfo<Pets>
pageInfo = new
PageInfo<Pets>(list1);

System.out.println(list1);

List<Pets>
list2 = pageInfo.getList();

System.out.println(list2);

for (Pets pets
: list2) {

System.out.println(pets);

}

4  
mybatis注解开发


public interface PetsMapper {

@Select(value="select id,name,birth_date
birthDate,type_id typeId, owner_id ownerId from pets")

public List<Pets> findAll();

@Select("select id,name,birth_date birthDate,type_id
typeId, owner_id ownerId from pets where id=#{id}")

public Pets findById(int id);

@Insert("insert into
pets(name,birth_date,type_id,owner_id) values(#{name},#{birthDate},#{typeId},#{ownerId})")

@SelectKey(keyColumn="id",keyProperty="id",resultType=Integer.class,
before = false, statement = { "select last_insert_id()" })

public int insert(Pets p);

@Update(value="update pets set name=#{name},birth_date=#{birthDate}
where id=#{id}")

public int update(Pets p);

@Delete("delete from pets where id=#{id}")

public int delete(int id) ;

}


mybatis自定义类型处理器

场景:当字段类型和数据库类型不一致时,需要自定义类型转化器。

使用:

1)编写一个普通类继承BaseTypeHandler<T>抽象类,或者实现TypeHandler<T>接口。重写三个方法:如下:


/**

*TODO自定义类型处理器

*    遇到Address类型的字段,会自动来调用该类中的方法

*    1)新增 修改  :Address对象--->String

调用setNonNullParameter() 方法 处理address类型的字段

*    2)查询:  
把varchar类型的address--->Address类型

*    调用getNullableResult/getNullableResult

*    把数据库的address 重新封装成Address类型

*/

public class MyAddressTypeHandler extends 
BaseTypeHandler<Address> {

/**

* 新增 或者修改时  遇到Address 类型的字段 自动会调用该方法

*/

@Override

public void setNonNullParameter(PreparedStatement ps, int i, Address parameter, JdbcType jdbcType)

throws SQLException {

//填充address这个字段的占位符

ps.setString(i, parameter.toString());//对象--->字符串

}

/**

* 根据列名查询

*/

@Override

public Address getNullableResult(ResultSet rs, String columnName) throws SQLException {

// TODO Auto-generated method stub

String
a  = rs.getString(columnName);

//山东省-青岛市-市北区-市北路-100(String)

Address
address = null;

if (a!=null) {

String
s [] = a.split("-");

address = new Address();

address.setProvinceName(s[0]);

address.setCityName(s[1]);

address.setDistinctName(s[2]);

address.setStreetName(s[3]);

address.setNo(Integer.parseInt(s[4].trim()));

}

return  address;

}

/**

* 根据下标查询

*/

@Override

public Address getNullableResult(ResultSet rs, int columnIndex) throws SQLException {

String
a  = rs.getString(columnIndex);

//山东省-青岛市-市北区-市北路-100(String)

Address
address = null;

if (a!=null) {

String
s [] = a.split("-");

address = new Address();

address.setProvinceName(s[0]);

address.setCityName(s[1]);

address.setDistinctName(s[2]);

address.setStreetName(s[3]);

address.setNo(Integer.parseInt(s[4].trim()));

}

return  address;

}

/**

* 存储过程

*/

@Override

public Address
getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {

// TODO Auto-generated method stub

return null;

}

2)在mybatis的配置文件中配置该处理器


<!-- 自定义类型处理器 -->

<typeHandlers>

<!-- 配置自定义类型处理器

配置完成后:遇到address类型的字段 自动会调用MyAddressTypeHandler类处理该字段

-->

<typeHandler handler="com.itqf.handler.MyAddressTypeHandler"/>

</typeHandlers>

6   
Mybatis中#{}和${}的使用

#{}

            按照该字段真实的值的类型填充占位符。例如:String类型,调用ps.setString()填充。

${}

            直接把值拼接到sql语句中,不拼接链接符号。

存在sql注入的问题

应用场景:排序时,要排序的字段,排序规则,就可以使用${}


排序:

select  * from   users order by #{order} #{sorter};

使用#{}方式,执行sql语句

select * from users order by ‘id‘ ‘desc‘;

 

select  * from   users order by ${order} ${sorter};

使用${}方式,执行sql语句

select * from users order by id desc;

 

原文地址:https://www.cnblogs.com/wanghuaying/p/9714378.html

时间: 2024-10-19 03:43:10

Mybatis3的相关文章

对Mybatis3源码结构理解(每天不断完善中...)

一.mybatis简介 Mybatis是支持普通SQL查询查询.存储过程和高级映射的优秀持久层框架.Mybatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.Mybatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOS(Plan old java Objects,普通的java对象)映射成数据库中的记录. 二.框架结构图 刚开始学习源码,有哪儿不对的地方还望指出,十分感谢! (20160810第一版,以mybatis-3.4.1为例) 三.暂无

mybatis3动态创建表,判断表是否存在,删除表

1.mybatis3动态创建表,判断表是否存在,删除表 mapper配置文件: <span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/

MyBatis 学习总结 05 Mybatis3.x与Spring3.x整合 OLD

本文通过加载mybatis-configuration.xml 文件来产生SqlSessionFactory,然后通过SqlSessionFactory去产生sqlSession,然后在通过 sqlSession对数据库表所映射的实体类进行增删改查操作.通过spring的DI和IOC,能产生对象并管理对象的声明周期,而sprig的AOP也能管理对象的事务.主要有两点: 1.需要spring通过单例的方式管理 SqlSessionFactory,并用 SqlSessionFactory 去创建 s

MyBatis3.4.0以上的分页插件错误:Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named prepare. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.stateme

错误: Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named prepare. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.statement.StatementHandler.prepare(java.sql.Connection)] with root cause 问题

Mybatis3+Spring4+SpringMVC4 整合【转】

首先在整合这个框架的时候,想想其一般的步骤是怎样的,先有个步骤之后,不至于在后面的搞混了,这样在整合的时候也比较清晰些. 然后我们就细细的一步一步来整合. 1  创建一个Web项目. 2  导入Mybatis3.Spring4.SpringMVC4.连接数据库(我使用的数据库是mysql)的jar包. 我所用的包:  spring-websocket-4.2.0.RELEASE.jar 3  创建Mybatis3.Spring4.SpringMVC4.连接数据库的配置文件. 4  配置web.x

SpringMVC4 + Spring + MyBatis3 【转】

本文使用最新版本(4.1.5)的springmvc+spring+mybatis,采用最间的配置方式来进行搭建. 1. web.xml 我们知道springmvc是基于Servlet: DispatcherServlet来处理分发请求的,所以我们需要先在web.xml文件中配置DispatcherServlet,而Spring的启动则是使用了监听器,所以需要配置spring的监听器: <?xml version="1.0" encoding="UTF-8"?&

mybatis3中@SelectProvider的使用技巧

mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://www.mybatis.org/. mybatis3中增加了使用注解来配置Mapper的新特性,本篇文章主要介绍其中几个@Provider的使用方式,他们是:@SelectProvider.@UpdateProvider.@InsertProvider和@DeleteProvider. MyBatis 3 User Guide中的最后一章描述了注解的简单用法,但是对于这几个Provider的具体使用方式并

spring mvc +Mybatis3.1 整合的时候异常

在使用Mybatis3.10+spring3.10+mybatis-spring-1.0.0集成,使用spring 时发生例如以下错误: 严重: Servlet.service() for servlet SpringMVC threw exception java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction(Ljava/sql/Co

SSM整合(二):Spring4与Mybatis3整合

上一节测试好了Mybatis3,接下来整合Spring4! 一.添加spring上下文配置 在src/main/resources/目录下的spring新建spring上下文配置文件applicationContext-dao.xml : 注: applicationContext-dao.xml,  用于管理数据库, applicationContext-service.xml   用于配置service, applicationContext-mvc.xml  用于集成springmvc配置

MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(八)--Mybatis3.x与Spring4.x整合 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype:create -DgroupId=me.gacl -DartifactId=spring4-mybatis3 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false 如下图所示: 创建好的项目如下