映射器是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. Linux 设备驱动的固件加载【转】

    转自:http://blog.csdn.net/zqixiao_09/article/details/51106663 版权声明:本文为博主原创文章,未经博主允许不得转载. 作为一个驱动作者, 你可能 ...

  2. 标准C程序设计七---120

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  3. GridControl CardView ShowCardExpandButton or GridCardExpandButton

    关于DevExpress.XtraGrid.v13.1.dll和DevExpress.XtraGrid.v12.2.dll中ShowCardExpandButton  或者 GridCardExpan ...

  4. 如何让一个现有的程序集运行在Silverlight环境中

    故事是这样的:我们有一个组件,是一个标准的Class Library,里面有一些代码是实现了某些计算或者业务逻辑.例如下面这样 然后,我们做了一个Silverlight的应用程序,和一个用于运行该程序 ...

  5. 洛谷—— P2895 [USACO08FEB]流星雨Meteor Shower

    P2895 [USACO08FEB]流星雨Meteor Shower 题目描述 Bessie hears that an extraordinary meteor shower is coming; ...

  6. wangzhi

    http://blog.const.net.cn/a/9145.htm http://blog.sina.com.cn/s/blog_bf5abc95010169jf.html http://ciss ...

  7. 信息收集渠道:文本分享类网站Paste Site

    信息收集渠道:文本分享类网站Paste Site Paste Site是一种专门的文本分享的网站.用户可以将一段文本性质的内容(如代码)上传到网站,然后通过链接分享给其他用户.这一点很类似于现在的优酷 ...

  8. HAXM 6.0.5显示不兼容Windows

    HAXM 6.0.5显示不兼容Windows 最近更新Android后,用户会在Android Manager中发现,以前可以安装Intel x86模拟器现在不能安装了.提示错误信息如下:intel  ...

  9. IDEA查看源码时提示:Library source does not match the bytecode for class的问题分析

    通过Maven查看依赖的源码时,通常是Maven自动下载JAR包附属的source包,但是会出现一个问题,由于使用lombok插件会造成编写的Java文件和编译后的class上有差别,所以IDEA打开 ...

  10. 如何快速判断IP是内网还是外网(转)

    TCP/IP协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255 172.16.0.0/12:172.16.0.0-1 ...