之前在项目中用到mybtis操作数据库时都是手动写sql,对于我这种sql水平不是很好地人来说痛苦死了;动态查询的sql我表示到现在还不会写呀!

还好,利用数据库表反向生成的工具可以帮我解决大部分的sql;(mybatis generator 你懂的)

首先利用反向生成可以帮我们自动生成实体类,dao接口,dao映射文件;

在dao映射文件如下所示:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="bz.sunlight.dao.UserMapper" >

<resultMap id="BaseResultMap" type="bz.sunlight.entity.User" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

<id column="id" property="id" jdbcType="VARCHAR" />

<result column="name" property="name" jdbcType="VARCHAR" />

<result column="password" property="password" jdbcType="VARCHAR" />

</resultMap>

<sql id="Example_Where_Clause" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

<where >

<foreach collection="oredCriteria" item="criteria" separator="or" >

<if test="criteria.valid" >

<trim prefix="(" suffix=")" prefixOverrides="and" >

<foreach collection="criteria.criteria" item="criterion" >

<choose >

<when test="criterion.noValue" >

and ${criterion.condition}

</when>

<when test="criterion.singleValue" >

and ${criterion.condition} #{criterion.value}

</when>

<when test="criterion.betweenValue" >

and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}

</when>

<when test="criterion.listValue" >

and ${criterion.condition}

<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >

#{listItem}

</foreach>

</when>

</choose>

</foreach>

</trim>

</if>

</foreach>

</where>

</sql>

<sql id="Update_By_Example_Where_Clause" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

<where >

<foreach collection="example.oredCriteria" item="criteria" separator="or" >

<if test="criteria.valid" >

<trim prefix="(" suffix=")" prefixOverrides="and" >

<foreach collection="criteria.criteria" item="criterion" >

<choose >

<when test="criterion.noValue" >

and ${criterion.condition}

</when>

<when test="criterion.singleValue" >

and ${criterion.condition} #{criterion.value}

</when>

<when test="criterion.betweenValue" >

and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}

</when>

<when test="criterion.listValue" >

and ${criterion.condition}

<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >

#{listItem}

</foreach>

</when>

</choose>

</foreach>

</trim>

</if>

</foreach>

</where>

</sql>

<sql id="Base_Column_List" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

id, name, password

</sql>

<select id="selectByExample" resultMap="BaseResultMap" parameterType="bz.sunlight.entity.UserExample" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

select

<if test="distinct" >

distinct

</if>

<include refid="Base_Column_List" />

from user

<if test="_parameter != null" >

<include refid="Example_Where_Clause" />

</if>

<if test="orderByClause != null" >

order by ${orderByClause}

</if>

</select>

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

select

<include refid="Base_Column_List" />

from user

where id = #{id,jdbcType=VARCHAR}

</select>

<delete id="deleteByPrimaryKey" parameterType="java.lang.String" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

delete from user

where id = #{id,jdbcType=VARCHAR}

</delete>

<delete id="deleteByExample" parameterType="bz.sunlight.entity.UserExample" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

delete from user

<if test="_parameter != null" >

<include refid="Example_Where_Clause" />

</if>

</delete>

<insert id="insert" parameterType="bz.sunlight.entity.User" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

insert into user (id, name, password

)

values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}

)

</insert>

<insert id="insertSelective" parameterType="bz.sunlight.entity.User" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

insert into user

<trim prefix="(" suffix=")" suffixOverrides="," >

<if test="id != null" >

id,

</if>

<if test="name != null" >

name,

</if>

<if test="password != null" >

password,

</if>

</trim>

<trim prefix="values (" suffix=")" suffixOverrides="," >

<if test="id != null" >

#{id,jdbcType=VARCHAR},

</if>

<if test="name != null" >

#{name,jdbcType=VARCHAR},

</if>

<if test="password != null" >

#{password,jdbcType=VARCHAR},

</if>

</trim>

</insert>

<select id="countByExample" parameterType="bz.sunlight.entity.UserExample" resultType="java.lang.Integer" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

select count(*) from user

<if test="_parameter != null" >

<include refid="Example_Where_Clause" />

</if>

</select>

<update id="updateByExampleSelective" parameterType="map" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

update user

<set >

<if test="record.id != null" >

id = #{record.id,jdbcType=VARCHAR},

</if>

<if test="record.name != null" >

name = #{record.name,jdbcType=VARCHAR},

</if>

<if test="record.password != null" >

password = #{record.password,jdbcType=VARCHAR},

</if>

</set>

<if test="_parameter != null" >

<include refid="Update_By_Example_Where_Clause" />

</if>

</update>

<update id="updateByExample" parameterType="map" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

update user

set id = #{record.id,jdbcType=VARCHAR},

name = #{record.name,jdbcType=VARCHAR},

password = #{record.password,jdbcType=VARCHAR}

<if test="_parameter != null" >

<include refid="Update_By_Example_Where_Clause" />

</if>

</update>

<update id="updateByPrimaryKeySelective" parameterType="bz.sunlight.entity.User" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

update user

<set >

<if test="name != null" >

name = #{name,jdbcType=VARCHAR},

</if>

<if test="password != null" >

password = #{password,jdbcType=VARCHAR},

</if>

</set>

where id = #{id,jdbcType=VARCHAR}

</update>

<update id="updateByPrimaryKey" parameterType="bz.sunlight.entity.User" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

update user

set name = #{name,jdbcType=VARCHAR},

password = #{password,jdbcType=VARCHAR}

where id = #{id,jdbcType=VARCHAR}

</update>

</mapper>

用这些生成的sql语句基本上可以解决我们单表查询中的所有情景;而不必我们再去手写sql(太操蛋了),是不是有点回到另外一个大框架中了呀;

例如:

我要新增客户:

那么在service层的代码就可以这么写:

@Override

public void saveUser(User record) {

userMapper.insert(record);

}

直接用反向生成的insert方法来进行插入;

你可能会觉得没什么太多意思:这种sql语句太容易写了;

那么查询呢?根据条件查询,条件比较多得情况下呢?更新,需要动态更新呢?

查询:

@Override

public List<User> queryUserByName(String name) {

UserExample example=new UserExample();

example.createCriteria().andNameEqualTo(name);   //我只需要在这里添加查询条件即可,添加的查询条件有很多可供选择的;Criteria这个对象是不是很熟悉呀!

List<User> users = userMapper.selectByExample(example);

return users;

}

这样就将根据姓名查询的服务写好了,还可以有like,between等多种方法可以供选择;

更新:

有时候表单提交上来的数据不是很完整,更新需要写动态sql以防止数据库的数据被更新成null;

现在我们可以这样操作:

@Override

public void updateById(User user,String id) {

UserExample example=new UserExample();

example.createCriteria().andIdEqualTo(id);

userMapper.updateByExampleSelective(user, example);

}

动态sql已经反向生成好了,我们只需要将需要更新的条件封装到example类中即可;

当然,多表关联暂时还无法这么使用,关于多表关联可以关注我的另外一篇博文;

这样,是不是mybatis也实现了全封装的操作;

mybatis单表操作实现完全java代码封装的更多相关文章

  1. 通用mybatis单表操作接口

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  2. PHP单表操作mysqli数据库类的封装

    class DB{ private $options=array( 'database_type' => 'mysql', 'database_name' => 'test', 'serv ...

  3. python 全栈开发,Day71(模型层-单表操作)

    昨日内容回顾 1. {% include '' %} 2. extend base.html: <html> ..... ..... ..... {% block content%} {% ...

  4. 09-hibernate单表操作(1)

    1,单一主键 2,基本类型 3,对象类型 4,组件属性 5,单表操作 单一主键 常用生成策略: assigned 有程序员生成(手工) native 由数据库底层,如果是mysql是increment ...

  5. Django---ORM简介丶单表操作丶增删改查

    一丶ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  6. ORM之单表操作

    ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...

  7. Django系列(三):单表操作

    1.ORM简介 MTV或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  8. Mybatis多表操作

    一:引言 在学习完前面的mybatis基本语法后,大家都有个认知,这个Mybatis太强大了,比之前使用JDBC写方便多了,但是你们当初在使用原生JDBC写SQL查询的时候有没有遇到过多表查询呢?肯定 ...

  9. 学习MySQL之单表操作(二)

    ##单表操作 ##创建表 CREATE TABLE t_employee( empno ), ename ), job ), MGR ), Hiredate DATE DEFAULT '0000-00 ...

随机推荐

  1. PacBio下机数据如何看?

    一开始拿到三代测序的下机数据时,蒙了,readme ?三代测序的下机数据都有哪些,以及他们具体的格式是怎么样的(以sequel 平台为主). 测序过程 SMRTbell A adapter通用接头,两 ...

  2. jquery报.live() is not a function的解决方法

    jquery报.live() is not a function的解决方法: jquery中的live()方法在jquery1.9及以上的版本中已被废弃了,如果使用,会抛出TypeError: $(. ...

  3. 2081.09.22 Kuma(非旋treap)

    描述 有N张卡片,编号从0到n-1, 刚开始从0到n-1按顺序排好. 现有一个操作, 对于p. l,表示从第p张卡片之后的l张卡片拿到 最前面. 例如n=7的时候, 刚开始卡片序列为0 1 2 3 4 ...

  4. 2018.07.20 atcoder Largest Smallest Cyclic Shift(贪心)

    传送门 题意:给你x个a,y个b,z个c,显然这些字符可以拼成若干字符串,然后求这些字符串中最小表示法表示出来的最大的那一个. 解法:贪心思想,用multiset维护现在拼成的字串,每次取一个最小的和 ...

  5. IntelliJ IDEA 2017版 spring-boot与Mybatis简单整合

    一.编译器建立项目 参考:http://www.cnblogs.com/liuyangfirst/p/8372291.html 二.代码编辑 1.建立数据库 /* Navicat MySQL Data ...

  6. 学习前端的菜鸡对JS 的classList理解

    classList 在早期的时候要添加,删除类 需要用className去获取,然后通过正则表达式去判断这个类是否存在. 代码上去会有点麻烦,现在有了classList 就方便了很多. ——————— ...

  7. 端口模式(IN,OUT,INOUT,BUFFER)

    in: OUT: INOUT: BUFFER:缓冲模式,与OUT类似可作为输出使用,但也可把输出的信号作为输入使用.

  8. 12) maven-compiler-plugin

    The Compiler Plugin is used to compile the sources of your project. At present the default source se ...

  9. Oracle实例名,服务名等概念区别与联系

    数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...

  10. Tensorflow currently has no official prebuild for your CUDA, cuDNN combination.

    INFO CUDA version: 10. ERROR cuDNN not found. See https://github.com/deepfakes/faceswap/blob/master/ ...