Mybatis入门程序(二)
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入门程序(二)的更多相关文章
- MyBatis入门程序(基于XML配置)
创建一个简单的MyBatis入门程序,实现对学生信息的增删改查功能(基于XML配置) 一.新建一个Java工程,导入MyBatis核心jar包.日志相关的jar包以及连接Oracle数据库所需驱动包, ...
- Mybatis学习——Mybatis入门程序
MyBatis入门程序 一.查询用户 1.使用客户编号查询用户 (1).创建一个数据表 USE spring; #创建一个名为t_customer的表 CREATE TABLE t_customer( ...
- Mybatis入门程序
作为一个java的学习者,我相信JDBC是大家最早接触也是入门级别的数据库连接方式,所以我们先来回忆一下JDBC作为一种用于执行SQL语句的Java API是如何工作的.下面的一段代码就是最基本的JD ...
- mybatis入门系列二之输入与输出参数
mybatis入门系列二之详解输入与输出参数 基础知识 mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- MyBatis入门(二)---一对一,一对多
一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybati ...
- MyBatis入门程序(1)
一.入门程序: 1.mybatis的配置文件SqlMapConfig.xml 配置mybatis的运行环境,数据源.事务等. <?xml version="1.0" enco ...
- Mybatis入门程序(一)
1.入门程序实现需求 根据用户id查询一个用户信息 根据用户名称模糊查询用户信息列表 添加用户(二) 更新用户(二) 删除用户(二) 2.引入Mybatis所需 jar 包(Maven工程) < ...
- mybatis入门介绍二
相信看过我的上一篇博客的同学都已经对mybatis有一个初步的认识了.这篇博客主要是对mybatis的mapper代理做一下简单的介绍,希望能够帮助大家共同学习. 我的上一篇博客:mybatis入门介 ...
- Mybatis入门程序编写
执行原理 入门程序编写 1.pom.xml 文件 <dependencies> <dependency> <groupId>mysql</groupId> ...
随机推荐
- readonly 只读字段的初始化值确定|static 字段的初始值确定
类的初始化顺序 如下: 第一次实例化Son============================ C#编译器缺省将每一个成员变量初始化为他的默认值Son静态字段Son静态构造函数Son字段Fathe ...
- 由浅入深--MyBatis整体架构
学一门技术,做一件事不应该马上就直接进入到细节中,而是应该鸟瞰其全貌,了解它的整体架构和执行流程. MyBatis的整体架构 MyBatis的整体架构分为三层,分别是基础支持层,核心处理层和接口层,各 ...
- AcWing 215. 破译密码
传送门 思路:gcd(a,b)=k<=>gcd(a/k,b/k)=1,令x=a/k,y=b/k,则问题变为问x<=a/d,y<=b/d有多少(x,y)满足gcd(x,y)=1. ...
- AcWing 288. 休息时间
传送门 思路: 考虑DP,设dp[i][j][1]为牛在前小时休息j个小时且第i个小时休息时,回复的最多体力:dp[i][j][0]为牛在前小时休息j个小时且第i个小时没有休息时,回复的最多体力. 可 ...
- java jdbc连接池
public class C3P0Util { //1. 在成员变量位置创建一个静态的ComboPooledDtatSource 对象 private static ComboPooledDataSo ...
- C++ 字符串 string
1.使用前应先包含头文件string.h,有的是cstring #include<string> 这样才能正确的cin和cout字符串. cin时,是按照空格.TAB和换行进行分割的 例如 ...
- RGBA()函数详解
RGBA()函数详解 RGBA()函数用于设定颜色和颜色的透明度:
- Golang开源流媒体服务器(RTMP/RTSP/HLS/FLV等协议)
一. lal 简介 lal是开源直播流媒体网络传输项目,主要由三部分组成: lalserver:流媒体转发服务器.类似于nginx-rtmp-module等服务,但支持更多的协议,提供更丰富的功能. ...
- CAS 比较并交换
简介 CAS 的全称为 Compare-And-Swap,他是一条 CPU 并发源语. 他的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的. CAS 并发原语体现在 J ...
- Node.js躬行记(16)——活动配置化
一直想将一些常规活动抽象化,制作成可配置的.原先的计划是做成拖拽的,那种可视化搭建,运营也能自己搭建页面. 这是一个美好的愿景,但是现实不允许我花太多精力去制作这样一个系统.经过权衡后,先设计成一个可 ...