1、实现需求

添加用户

更新用户

删除用户

2、添加用户

  (1)映射文件User.xml(Mapper)中,配置添加用户的Statement

<!-- 添加用户:
parameterType:指定输入参数类型是pojo(包括用户的信息)
#{}中指定pojo的属性名,接收到pojo对象的属性值, mybatis通过 OGNL 获取对象的属性值-->
<insert id="insertUser" parameterType="com.bjxb.mybatis.pojo.User">
insert into user(username, birthday, sex, address) value(#{username},#{birthday},#{sex},#{address})
</insert>

  

  (2)程序代码

// 添加用户信息
@Test
public void insertUserTest() {
SqlSession sqlSession = null; try {
// mybatis配置文件
String resource = "config/SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 通过工厂的到SQLSession
sqlSession = sqlSessionFactory.openSession(); // 插入用户对象
User user = new User();
user.setUsername("zxy");
user.setBirthday(new Date());
user.setSex("0");
user.setAddress("山西太原");
sqlSession.insert("test.insertUser", user); // 提交事务
sqlSession.commit();
}
catch (Exception e) {
// TODO: handle exception
} finally {
// 释放资源
sqlSession.close();
}
}

3、自增主键返回

  mysql 自增主键,执行 insert 提交之前自动生成一个自增主键。

  通过 mysql 函数获取到刚插入记录的自增主键:LAST_INSERT_ID()

  是在 insert 之后调用

  修改 insertUser 定义:

<!-- 添加用户:
parameterType:指定输入参数类型是pojo(包括用户的信息)
#{}中指定pojo的属性名,接收到pojo对象的属性值, mybatis通过 OGNL 获取对象的属性值-->
<insert id="insertUser" parameterType="com.bjxb.mybatis.pojo.User">
<!--
将插入数据的主键返回,返回到user对象中
SELECT LAST_INSERT_ID():得到刚insert进去的记录的主键值,只适用于自增主键
keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性
order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序
      resultType:指定 SELECT LAST_INSERT_ID()的结果类型
-->
<selectKey keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user(id, username, birthday, sex, address) value(#{id},#{username},#{birthday},#{sex},#{address})
</insert>

4、非自增主键返回(使用UUID())

  使用 mysql 的 uuid()函数生成主键,需要修改表中 id 的字段为 string,长度设置成 35 位

  修改 insertUser 定义:

<insert id="insertUser" parameterType="com.bjxb.mybatis.pojo.User">
<!--
使用mysql的 uuid()生成主键
执行过程:
首先通过UUID(),将主键设置到user对象的id属性中
其次在inset执行时,从user对象中,取出id属性值
-->
<selectKey keyProperty="id"order="BEFORE" resultType="java.lang.String">
SELECT UUID()
</selectKey>
insert into user(id, username, birthday, sex, address) value(#{id}, #{username},#{birthday},#{sex},#{address})
</insert>

5、通过 oracle 的序列生成主键:

<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
SELECT 序列名.nextval()
</selectKey>
insert into user(id, username, birthday, sex, address) value(#{id}, #{username},#{birthday},#{sex},#{address})

6、删除用户

  (1)映射文件

<!-- 删除用户
根据id删除用户,需要输入id值
-->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id = #{id}
</delete>

  

  (2)代码

// 根据id删除用户信息
@Test
public void deleteUserTest() {
SqlSession sqlSession = null; try {
// mybatis配置文件
String resource = "config/SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 通过工厂的到SQLSession
sqlSession = sqlSessionFactory.openSession(); // 传入id删除用户
sqlSession.delete("test.deleteUser", 10); // 提交事务
sqlSession.commit();
} catch (Exception e) {
// TODO: handle exception
} finally {
// 关闭会话,释放资源
sqlSession.close();
}
}

7、更新用户

  (1)映射文件

<!-- 更新用户
分析:
需要传入用户的id
需要传入用户的更新信息
parameterType指定user对象,包括id和更新信息,注意: id必须存在
#{id}: 从输入user对象中获取id属性值
-->
<update id="updateUser" parameterType="com.bjxb.mybatis.pojo.User">
update user set username=#{username}, birthday=#{birthday}, sex=#{sex}, address=#{address} where id = #{id}
</update>

  (2)代码

// 更新用户信息
@Test
public void updateUserTest() {
SqlSession sqlSession = null; try {
// mybatis配置文件
String resource = "config/SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 通过工厂的到SQLSession
sqlSession = sqlSessionFactory.openSession(); // 更新用户信息
User user = new User();
// 必须设置id
user.setId(11);
user.setUsername("xy");
user.setBirthday(new Date());
user.setSex("0");
user.setAddress("山西运城");
sqlSession.insert("test.updateUser", user); // 提交事务
sqlSession.commit();
} catch (Exception e) {
// TODO: handle exception
} finally {
// 释放资源
sqlSession.close();
}
}

Mybatis入门程序(二)的更多相关文章

  1. MyBatis入门程序(基于XML配置)

    创建一个简单的MyBatis入门程序,实现对学生信息的增删改查功能(基于XML配置) 一.新建一个Java工程,导入MyBatis核心jar包.日志相关的jar包以及连接Oracle数据库所需驱动包, ...

  2. Mybatis学习——Mybatis入门程序

    MyBatis入门程序 一.查询用户 1.使用客户编号查询用户 (1).创建一个数据表 USE spring; #创建一个名为t_customer的表 CREATE TABLE t_customer( ...

  3. Mybatis入门程序

    作为一个java的学习者,我相信JDBC是大家最早接触也是入门级别的数据库连接方式,所以我们先来回忆一下JDBC作为一种用于执行SQL语句的Java API是如何工作的.下面的一段代码就是最基本的JD ...

  4. mybatis入门系列二之输入与输出参数

    mybatis入门系列二之详解输入与输出参数   基础知识   mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...

  5. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  6. MyBatis入门(二)---一对一,一对多

    一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybati ...

  7. MyBatis入门程序(1)

    一.入门程序: 1.mybatis的配置文件SqlMapConfig.xml 配置mybatis的运行环境,数据源.事务等. <?xml version="1.0" enco ...

  8. Mybatis入门程序(一)

    1.入门程序实现需求 根据用户id查询一个用户信息 根据用户名称模糊查询用户信息列表 添加用户(二) 更新用户(二) 删除用户(二) 2.引入Mybatis所需 jar 包(Maven工程) < ...

  9. mybatis入门介绍二

    相信看过我的上一篇博客的同学都已经对mybatis有一个初步的认识了.这篇博客主要是对mybatis的mapper代理做一下简单的介绍,希望能够帮助大家共同学习. 我的上一篇博客:mybatis入门介 ...

  10. Mybatis入门程序编写

    执行原理 入门程序编写 1.pom.xml 文件 <dependencies> <dependency> <groupId>mysql</groupId> ...

随机推荐

  1. 零售BI:为什么说零售行业非上一套企业BI系统不可?

    如果你要问为什么现在越来越多的零售企业都会在公司上一套企业BI系统,这边文章就能解答你的疑惑. 2016年10月,马云在云栖大会上提出了"新零售"概念.在新零售时代,数字化转型打通 ...

  2. [HITCON 2017]SSRFme

    explode()   字符串转数组,用 ,号分隔数组 @mkdir()    创建目录 @chdir() 改变目录 这两的效果一样,如果在/home/php 目录下,执行mkdir('var') 和 ...

  3. Java:IO流(二)——InputStream/OutputStream具体用法:FileXXXStream、ByteArrayXXXStream

    1.说明 InputStream和OutputStream是Java标准库中最基本的IO流,它们都位于java.io包中,该包提供了所有同步IO的功能. 2.模块:java.io.InputStrea ...

  4. WIN10:开机启动项设置

    搜索 config,在启动栏关闭要关闭的即可

  5. anaconda及jupyter notebook的使用之numpy模块的用法(2)

    今日内容概要 numpy模块结束 ndarray创建 numpy内置方法 索引与切片(花式索引.布尔索引) 常用函数 统计方法 随机数 numpy的内置方法 import numpy as np 1. ...

  6. java复习面向对象(二)

    java复习面向对象(二) 1.static关键字 举例图片 静态变量 使用static修饰的成员变量是静态变量 如果一个成员变量使用了关键字static,那么这个变量不属于对象自己,而属于所在的类多 ...

  7. JZ-055-链表中环的入口结点

    链表中环的入口结点 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目链接: 链表中环的入口结点 代码 import java.util.ArrayList; ...

  8. 泛型的类型擦除后,fastjson反序列化时如何还原?

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra~ 在前面的文章中,我们讲过Java中泛型的类型擦除,不过有小伙伴在后台留言提出了一个问题,带有泛型的实体的反序列化 ...

  9. 路径查找算法应用之A*算法

    环境:Visual Studio 2017 + .Net Framework 4.5 应用场景:在画板上查找起始点和目标点之间的最短最直路径,最后画出连接两个点之间的折线. 算法简介:A*算法是一种性 ...

  10. Mysql备份方案总结性梳理

    Mysql备份方案总结性梳理   服务器 mysql 日志 数据库 配置 Mariadb binlog   mysql数据库备份有多么重要已不需过多赘述了,废话不多说!以下总结了mysql数据库的几种 ...