mybatis mapper example

版权声明:本文为博主原创文章,欢迎交流分享 https://blog.csdn.net/u013036688/article/details/71901759
Example类是什么?

Example类指定如何构建一个动态的where子句. 表中的每个non-BLOB列可以被包括在where子句中. 例子是展示此类用法的最好方式.

Example类可以用来生成一个几乎无限的where子句.

Example类包含一个内部静态类 Criteria 包含一个用 anded 组合在where子句中的条件列表. Example类包含一个 List 属性,所有内部类Criteria中的子句会用 ored组合在一起. 使用不同属性的 Criteria 类允许您生成无限类型的where子句.

创建 Criteria 对象 可以使用Example类中的 createCriteria() 或者 or() . 如果 Criteria 对象是用 createCriteria() 创建的,它会自动为 List 属性添加一个 Criteria 对象 - 这使得它更容易写一个简单的where子句, 如果您不需要 or 或者其他几个子句组合的话. 用 or(Criteria criteria) 方法创建 Criteria 对象, 方法里的 criteria 对象会被添加进 Criteria 对象的列表中.

重要 我们推荐您只使用 or() 方法创建 Criteria 对象. 我们相信这种方法使代码更有可读性.
如何生成Example类?

mybatis的的配置文件可以使用mybatis-generator工具生成,它就可以帮我们生成example类。
根据 Mybatis 代码生成工具文档,需要一个配置文件,这里命名为:mbgConfiguration.xml放在 src 目录下. 配置文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
      PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
      "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

    <generatorConfiguration>

      <!-- 配置mysql 驱动jar包路径.用了绝对路径 -->
      <classPathEntry location="D:\Work\Java\eclipse\workspace\myBatisGenerator\WebContent\WEB-INF\lib\mysql-connector-java-5.1.22-bin.jar" />

      <context id="yihaomen_mysql_tables" targetRuntime="MyBatis3">

        <!-- 为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 -->
        <commentGenerator>
          <property name="suppressAllComments" value="true" />
          <property name="suppressDate" value="true" />
        </commentGenerator>
        <!-- 注释控制完毕 -->

        <!-- 数据库连接 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8"
            userId="root"
            password="password">
        </jdbcConnection>

        <javaTypeResolver >
          <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- 数据表对应的model 层  -->
        <javaModelGenerator targetPackage="com.yihaomen.model" targetProject="src">
          <property name="enableSubPackages" value="true" />
          <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- sql mapper 隐射配置文件 -->
        <sqlMapGenerator targetPackage="com.yihaomen.mapper"  targetProject="src">
          <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- 在ibatis2 中是dao层,但在mybatis3中,其实就是mapper接口 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.yihaomen.inter"  targetProject="src">
          <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- 要对那些数据表进行生成操作,必须要有一个. -->
        <table schema="mybatis" tableName="category" domainObjectName="Category"
            enableCountByExample="false" enableUpdateByExample="false"
            enableDeleteByExample="false" enableSelectByExample="false"
            selectByExampleQueryId="false">     
        </table>

      </context>
    </generatorConfiguration>

   

当我们需要生成example类的时候,需要table里面去掉

enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"

example如何使用?
简单查询

这个例子展示了如何用生成后的Example类去生成一个简单的where子句:

TestTableExample example = new TestTableExample();

example.createCriteria().andField1EqualTo(5);
作为另一种选择, 下面的方式也是可以的:

TestTableExample example = new TestTableExample();

example.or().andField1EqualTo(5);
在上面的例子中, 动态生成的where子句是:

where field1 = 5

下面的例子展示了如何用生成后的Example类去生成一个复杂的where子句 (用到了 JSE 5.0 的泛型):

TestTableExample example = new TestTableExample();

example.or()
.andField1EqualTo(5)
.andField2IsNull();

example.or()
.andField3NotEqualTo(9)
.andField4IsNotNull();

List field5Values = new ArrayList();
field5Values.add(8);
field5Values.add(11);
field5Values.add(14);
field5Values.add(22);

example.or()
.andField5In(field5Values);

example.or()
.andField6Between(3, 7);

在上面的例子中, 动态生成的where子句是:

where (field1 = 5 and field2 is null)
or (field3 <> 9 and field4 is not null)
or (field5 in (8, 11, 14, 22))
or (field6 between 3 and 7)
将会返回满足这些条件的记录结果.

去重复查询
您可以在所有的Example类中调用 setDistinct(true) 方法进行强制去重复查询.

Criteria类
Criteria 内部类的每个属性都包含 andXXX 方法,以及如下的标准的SQL查询方法:

IS NULL - 指相关的列必须为NULL
IS NOT NULL - 指相关的列必须不为NULL
= (equal) - 指相关的列必须等于方法参数中的值
<> (not equal) - 指相关的列必须不等于方法参数中的值

    (greater than) - 指相关的列必须大于方法参数中的值
    = (greater than or equal) - 指相关的列必须大于等于方法参数中的值
    < (less than) - 指相关的列必须小于于方法参数中的值
    <= (less than or equal) - 指相关的列必须小于等于方法参数中的值
    LIKE - 指相关的列必须 “like” 方法参数中的值. 这个方法不用必须加入 ‘%’, 您必须设置方法参数中的值.
    NOT LIKE - 指相关的列必须 “not like” 方法参数中的值. 这个方法不用必须加入 ‘%’, 您必须设置方法参数中的值.
    BETWEEN - 指相关的列必须在 “between” 方法参数中的两个值之间.
    NOT BETWEEN - 指相关的列必须不在 “not between” 方法参数中的两个值之间.
    IN - 指相关的列必须在传入的方法参数的list中.
    NOT IN - 指相关的列必须不在传入的方法参数的list中.
---------------------
作者:盖丽男
来源:CSDN
原文:https://blog.csdn.net/zhemeban/article/details/71901759?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

一、mapper接口中的方法解析

mapper接口中的函数及方法
方法     功能说明
int countByExample(UserExample example) thorws SQLException     按条件计数
int deleteByPrimaryKey(Integer id) thorws SQLException     按主键删除
int deleteByExample(UserExample example) thorws SQLException     按条件查询
String/Integer insert(User record) thorws SQLException     插入数据(返回值为ID)
User selectByPrimaryKey(Integer id) thorws SQLException     按主键查询
ListselectByExample(UserExample example) thorws SQLException     按条件查询
ListselectByExampleWithBLOGs(UserExample example) thorws SQLException     按条件查询(包括BLOB字段)。只有当数据表中的字段类型有为二进制的才会产生。
int updateByPrimaryKey(User record) thorws SQLException     按主键更新
int updateByPrimaryKeySelective(User record) thorws SQLException     按主键更新值不为null的字段
int updateByExample(User record, UserExample example) thorws SQLException     按条件更新
int updateByExampleSelective(User record, UserExample example) thorws SQLException     按条件更新值不为null的字段
二、example实例解析

mybatis的逆向工程中会生成实例及实例对应的example,example用于添加条件,相当where后面的部分
xxxExample example = new xxxExample();
Criteria criteria = new 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之间条件
三、应用举例
1.查询

① selectByPrimaryKey()

User user = XxxMapper.selectByPrimaryKey(100); //相当于select * from user where id = 100

 

② selectByExample() 和 selectByExampleWithBLOGs()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("wyw");
criteria.andUsernameIsNull();
example.setOrderByClause("username asc,email desc");
List<?>list = XxxMapper.selectByExample(example);
//相当于:select * from user where username = 'wyw' and  username is null order by username asc,email desc

 

注:在iBator逆向工程生成的文件XxxExample.java中包含一个static的内部类Criteria,Criteria中的方法是定义SQL 语句where后的查询条件。
2.插入数据

①insert()

User user = new User();
user.setId("dsfgsdfgdsfgds");
user.setUsername("admin");
user.setPassword("admin")
user.setEmail("wyw@163.com");
XxxMapper.insert(user);
//相当于:insert into user(ID,username,password,email) values ('dsfgsdfgdsfgds','admin','admin','wyw@126.com');

 

3.更新数据

①updateByPrimaryKey()

User user =new User();
user.setId("dsfgsdfgdsfgds");
user.setUsername("wyw");
user.setPassword("wyw");
user.setEmail("wyw@163.com");
XxxMapper.updateByPrimaryKey(user);
//相当于:update user set username='wyw', password='wyw', email='wyw@163.com' where id='dsfgsdfgdsfgds'

  

②updateByPrimaryKeySelective()

User user = new User();
user.setId("dsfgsdfgdsfgds");
user.setPassword("wyw");
XxxMapper.updateByPrimaryKey(user);
//相当于:update user set password='wyw' where id='dsfgsdfgdsfgds'

 

③ updateByExample() 和 updateByExampleSelective()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("admin");
User user = new User();
user.setPassword("wyw");
XxxMapper.updateByPrimaryKeySelective(user,example);
//相当于:update user set password='wyw' where username='admin'

 

updateByExample()更新所有的字段,包括字段为null的也更新,建议使用 updateByExampleSelective()更新想更新的字段
4.删除数据

①deleteByPrimaryKey()

XxxMapper.deleteByPrimaryKey(1);  //相当于:delete from user where id=1

 

②deleteByExample()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("admin");
XxxMapper.deleteByExample(example);
//相当于:delete from user where username='admin'

 

5.查询数据数量

①countByExample()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("wyw");
int count = XxxMapper.countByExample(example);
//相当于:select count(*) from user where username='wyw'
---------------------
作者:biandous
来源:CSDN
原文:https://blog.csdn.net/biandous/article/details/65630783?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值