映射器是mybatis的基础和核心,下面学习下映射器的使用

映射器的主要元素

  • select  查询语句,可以自定义参数和返回结果集
  • insert  插入语句,返回一个整数,代表插入的条数
  • update  更新语句,返回一个整数,代表更新的条数
  • delete  删除语句,返回一个整数,代表删除的条数
  • parameterMap   定义参数映射关系
  • sql   定义一部分sql,然后在其他地方引用
  • resultMap  从数据库结果集中来加载对象

select元素

简单例子

<!-- java接口  public int getCount(String name); -->
<select id="getCount" resultType="int" parameterType="String" >
select count(*) c from t_user where name like concat ('%',#{name},'%')
</select>

查询结果返回resultMap,传递多个参数

<!-- java接口 public List<UserPO> getUserByName(Map<String, String> param); -->
<select id="getUserByName" parameterType="java.util.Map" resultMap="userMap">
select * from t_user where username like concat ('%',#{name},'%')
</select>

使用JavaBean传参

<!-- java接口 public List<UserPO> getUser(UserPO po); -->
<select id="getUser" parameterType="com.zyx.demo.test.po.UserPO" resultMap="userMap">
select * from t_user where username like concat ('%',#{username},'%')
</select>

insert元素

简单例子,主键回填

<!-- public int insertUser(UserPO user) -->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user (username,password,account) values (#{username},#{password},#{account})
</insert>

update和delete

简单例子

<!-- public int updateUser (UserPO user,int id) -->
<update id="updateUser" >
update t_user set username=#{username},password=#{password},account=#{account} where id=#{id}
</update>
<!-- public int deleteUser(int id) -->
<delete id="deleteUser" parameterType="int">
delete from t_user where id=#{id}
</delete>

resultMap结果映射集

   <!-- 自定义返回结果集 -->
<resultMap id="userMap" type="com.zyx.demo.test.po.UserPO">
<id property="id" column="id" javaType="java.lang.Integer"></id>
<result property="username" column="username" javaType="java.lang.String"></result>
<result property="password" column="password" javaType="java.lang.String"></result>
<result property="account" column="account" javaType="java.lang.Double"></result>
</resultMap>

动态SQL

if元素

    <select id="getUserByName" parameterType="java.util.Map" resultMap="userMap">
select * from t_user where true
<if test="name != null and name!=''" >
AND username like concat ('%',#{name},'%')
</if>
</select>

choose when otherwise 类似于swich case default

    <select id="getUserByName" parameterType="java.util.Map" resultMap="userMap">
select * from t_user where true
<choose>
<when test="name != null and name!=''">AND username like concat ('%',#{name},'%')</when>
<otherwise>and true</otherwise>
</choose>
</select>

where(sql中不用添加where true)

    <select id="getUserByName" parameterType="java.util.Map" resultMap="userMap">
select * from t_user
<where>
<if test="name != null and name!=''" >
AND username like concat ('%',#{name},'%')
</if>
</where>
</select>

set(帮助我们去掉错误数据)

    <update id="updateUser" >
update t_user
<set>
<if test="username != null and username!=''">username=#{username}</if>
<if test="password != null and password!=''">password=#{password}</if>
<if test="account != null and account!=''">account=#{account}</if>
</set>
where id=#{id}
</update>

foreach元素是循环语句,作用是遍历集合

test元素用于条件判断的语句中

bind元素的作用是通过OGNL表达式去自定义一个上下文变量

自动生成mapper

下载jar

        <!-- 数据库驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- mybatis-generator-core核心jar包,代码生成 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>

准备generator.xml

<?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>
<!-- 数据库驱动包位置 -->
<classPathEntry location="D:\generator\mysql-connector-java-5.1.6.jar" />
<context id="caigouTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator> <jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://10.144.55.11:3306/test"
userId="root"
password="gome">
</jdbcConnection> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer true,把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver> <!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.pojo" targetProject="D:\generator\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetPackage:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.mapper" targetProject="D:\generator\src">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口的生成位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.mapper" targetProject="D:\generator\src">
<property name="enableSubPackages" value="false" />
</javaClientGenerator> <!-- 指定表 t_user这里不指定schema,逆向工程会查询sysuser都有哪些schema,对每个schema生成对象-->
<table tableName="t_user" domainObjectName="User"></table> </context>
</generatorConfiguration>

执行命令,生成代码

java -jar mybatis-generator-core-1.3..jar -configfile mybatis-generator.xml

mybatis学习总结(三)——增删查改的更多相关文章

  1. Mybatis基础配置及增删查改操作

    一.简介 平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类. 不仅如此,访问不同的表,还会 ...

  2. mybatis实现简单的增删查改

    接触一个新技术,首先去了解它的一些基本概念,这项技术用在什么方面的.这样学习起来,方向性也会更强一些.我对于mybatis的理解是,它是一个封装了JDBC的java框架.所能实现的功能是对数据库进行增 ...

  3. myBatis 实现用户表增删查改操作<方法1 没有使用接口的>(最终版)

    在UserMapper.xml中添加增删改查 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP ...

  4. myBatis 实现用户表增删查改操作<方法2 加入接口>(最终版)

    这2种方法的区别:1.添加接口 2.运用接口来实现 其他的都一样 添加接口 //接口的名字和xml的名字一样,这样xml中的namespace就不用改 public interface UserMap ...

  5. SSM框架-MyBatis框架数据库的增删查改操作

    话不多说,在User.xml文件中主要写一下操作数据库的sql语句,增,删,查,改是最常见的数据库操作 User.xml文件下:

  6. MongoDB入门学习(三):MongoDB的增删查改

            对于我们这样的菜鸟来说,最重要的不是数据库的管理,也不是数据库的性能,更不是数据库的扩展,而是怎么用好这款数据库,也就是一个数据库提供的最核心的功能,增删查改.         由于M ...

  7. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  8. mybatis、spring、mysql、maven实现简单增删查改

    之前写过的mybatis博客作为学习mybatis.spring还是不太合适. 现在找到一个不错的例子,首先将这个完整的mybatis增删查改例子在本地上实现出来,然后再进行学习. 项目结构与运行结果 ...

  9. Entity Framework(三)---FluentAPI和增删查改

    一.FluentAPI: 1.基本配置: namespace ConsoleApp14.ModelConfig { public class PersonConfig: EntityTypeConfi ...

  10. java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)

    1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...

随机推荐

  1. 从0到1:全面理解RPC远程调用

    上一篇关于 WSGI 的硬核长文,不知道有多少同学,能够从头看到尾的,不管你们有没有看得很过瘾,反正我是写得很爽,总有一种将一样知识吃透了的错觉. 今天我又给自己挖坑了,打算将 rpc 远程调用的知识 ...

  2. 【Dll】Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call

    [问题说明]调试动态库导出的函数时遇到的问题 [解决方法]要么加上__stdcall,对应__stdcall:要么去掉__stdcall,对应_cdecl

  3. Linux 之 Redis

    Linux 之 Redis 参考教程:[千峰教育] 一.Redis简介: 说明: 1.也是一种类似于Memcached的key-value机制的存储服务 2.是非关系型数据库(NoSQL)的一种 3. ...

  4. AC日记——猴子 cogs 2043

    2043. 猴子 ★★   输入文件:monkeya.in   输出文件:monkeya.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 有n只猴子,第一只尾巴挂在树上 ...

  5. Codeforces 934 A.Compatible Pair

    http://codeforces.com/contest/934 A. A Compatible Pair   time limit per test 1 second memory limit p ...

  6. awk数组详解、实战

    1.其它编程语言数组的下标一般从0开始,awk中数组下标默认从1开始,也可以从0开始设置: awk 'BEGIN{huluwa[0]="大娃";huluwa[1]="二娃 ...

  7. Unix domain socket

    转载:http://www.cnblogs.com/chekliang/p/3222950.html socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是 ...

  8. Qt中QVector与QList的应用

    首先來看看QVector 的基本使用方式,建立一個可容納兩個元素的QVector ,並使用索引方式存取元素值:QVector<double> vect(2); vect[0] = 1.0; ...

  9. 第七讲_图像描述(图说)Image Captioning

    第七讲_图像描述(图说)Image Captioning 本章结构 递归神经网络 时序后向传播(BPTT) 朴素Vanilla-RNN 基本模型 用sigmoid存在严重的梯度消失 LSTM长短时记忆 ...

  10. PriorityQueue ,ArrayList , 数组排序

    static class E implements Comparable<E>{ int x ; int y ; int state ; int money ; public E(int ...