映射器是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. 洛谷 P1131 选择客栈

    题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均 ...

  2. 头条PC端的鼠标经过图片放大效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. FileUtils删除文件的工具类

    前提是知道文件在哪个文件夹下面然后到文件夹下面删除文件,如果文件夹也需要传参数需要对下面方法进行改造. ( 需要借助于commons-io.jar和ResourceUtils.java  ) 1.De ...

  4. Mysql让主键归0

    Mysql 相关技术 1.Mysql 让主键 归0: TRUNCATE TABLE * 2.只清空数据表,主键不归0: DELETE FROM 'TABLE' 3.重启数据库: /etc/init.d ...

  5. TStringList 善用 value['names'] 即使value 是带=号的值都没有关系呵呵 ,我靠 强,以后就用这个了,key=value首选

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4YAAAHiCAIAAAA760U/AAAgAElEQVR4nOy9Z5QUV57oWe/j7tk9u2 ...

  6. 第三章 poj 1064——关于带精度的二分法

    /* 题意:给定n个实数l[i],给定一个k 问:求最大的ans,使得sum l[i]/ans i=1 to n >=k,且ans最大*/ #include <iostream> # ...

  7. 【hibernate】hibernate和mybatis的比较

    理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉 ...

  8. SSH 原理和公匙私匙

    先主要介绍了Telnet.SSH 的通信原理,分析了其通信时的工作流程. Telnet 无论Telnet协议连接的是什么类型终端,都会转换为NVT(Net Virtual Terminal)格式进行通 ...

  9. display:flex不兼容Android、Safari低版本的解决方案 【flex布局】

    引自 http://www.cnblogs.com/shimily/articles/7943370.html <!DOCTYPE html> <html lang="en ...

  10. iOS UI08_TableView界面传值

    实现两个界面之间内容的传递 // // MainViewController.m // UI08_TableView界面传值 // // Created by dllo on 15/8/7. // C ...