Mybatis-01查询功能-02,增改删功能

续上节

一、模糊查询

  • 因为每次都要加载配置文件所有抽取工具类名称为:SqlSessionFactoryUtils
package com.mybatis.utils;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
//工具类
public class SqlSessionFactoryUtils {
	private static SqlSessionFactory sql;
	
	//get方法获取
	public static SqlSessionFactory getSql() {
		return sql;
	}

	static {
		try {
			// 创建SqlSessionFactoryBuilder对象
			SqlSessionFactoryBuilder s = new SqlSessionFactoryBuilder();
			// 配置输入流
			InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml");
			// 通过输入流创建创建SqlSessionFactory对象
			sql = s.build(input);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
1.修改映射文件User.xml
<?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">
	<!-- namespace命名空间,隔离SQL语句 
	#{}占位符  相当于SQL问号
	${} $字符串拼接
	         如果传入参数为普通类型,大括号为value
	         如果传入为对象,大括号为对象成员变量-->
<mapper namespace="user">
		<!-- id:sql唯一标识 
		 parameterType  入参类型
		 resultType  返回结果类型-->
	<select id="getUserByid" parameterType="int" resultType="com.mybatis.domain.User">
		SELECT
		  `id`,
		  `username`,
		  `birthday`,
		  `sex`,
		  `address`
		FROM `user`
		WHERE id=#{id}
	</select>
	
	<!-- 如果返回为集合时,设置每个数据类型即可 -->
	<select id="getUserByUserName" parameterType="string" resultType="com.mybatis.domain.User">
		SELECT
		  `id`,
		  `username`,
		  `birthday`,
		  `sex`,
		  `address`
		FROM `user`
		<!-- WHERE username LIKE #{name} -->
		WHERE username LIKE '%${value}%'
	</select>
	
	<!-- 如果返回为集合时,设置每个数据类型即可 -->
	<select id="getUserByUserName" parameterType="string" resultType="com.mybatis.domain.User">
		SELECT
		  `id`,
		  `username`,
		  `birthday`,
		  `sex`,
		  `address`
		FROM `user`
		<!-- WHERE username LIKE #{name} -->
		WHERE username LIKE '%${value}%'
	</select>
</mapper>
  • 注意输出为list是设置单个对象类型即可
2.添加测试方法
@Test
	public void testGetUserByUserName() throws Exception {
		//获取SqlSessionFactory
		SqlSessionFactory sql= SqlSessionFactoryUtils.getSql();
		//创建SqlSession对象
		SqlSession ss=sql.openSession();
		
		//查询,参数一SQL id 参数二 入参
		/* List<User> list= ss.selectList("user.getUserByUserName", "%百%"); */
		
		List<User> list= ss.selectList("user.getUserByUserName", "百");
		for(User user : list)
			System.out.println(user);
		//释放资源
		ss.close();
	}

二、增加功能返回主键

1.修改映射User.xml文件
<?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">
	<!-- namespace命名空间,隔离SQL语句 
	#{}占位符  相当于SQL问号
	${} $字符串拼接
	         如果传入参数为普通类型,大括号为value
	         如果传入为对象,大括号为对象成员变量-->
<mapper namespace="user">
		<!-- id:sql唯一标识 
		 parameterType  入参类型
		 resultType  返回结果类型-->
	<select id="getUserByid" parameterType="int" resultType="com.mybatis.domain.User">
		SELECT
		  `id`,
		  `username`,
		  `birthday`,
		  `sex`,
		  `address`
		FROM `user`
		WHERE id=#{id}
	</select>
	
	<!-- 如果返回为集合时,设置每个数据类型即可 -->
	<select id="getUserByUserName" parameterType="string" resultType="com.mybatis.domain.User">
		SELECT
		  `id`,
		  `username`,
		  `birthday`,
		  `sex`,
		  `address`
		FROM `user`
		<!-- WHERE username LIKE #{name} -->
		WHERE username LIKE '%${value}%'
	</select>
	
	<!-- useGeneratedKeys使用自增,keyProperty结合使用,为user主键 -->
	<insert id="insertUser" parameterType="com.mybatis.domain.User" useGeneratedKeys="true" keyProperty="id">
		<!-- selectKey主键返回
		 keyProperty 主键属性
		 resultType 数据类型
		 order 何时执行-->
		
		<!-- 
		<selectKey keyProperty="id" resultType="int" order="AFTER">
			SELECT LAST_INSERT_ID()
			useGeneratedKeys="true" keyProperty="id"与这段相等 
		</selectKey> 
		-->
		INSERT INTO `user`
	            (`username`,
	             `birthday`,
	             `sex`,
	             `address`)
		VALUES (#{username},
		        #{birthday},
		        #{sex},
		        #{address});
	</insert>
</mapper>
2.增加测试方法
@Test
	public void testInsertUser() throws Exception {
		//获取SqlSessionFactory
		SqlSessionFactory sql= SqlSessionFactoryUtils.getSql();
		//创建SqlSession对象,默认不是自动提交,设置为ture自动提交
		SqlSession ss=sql.openSession();
		
		User user = new User();
		user.setUsername("百分百欧克3111");
		user.setSex("1");
		user.setBirthday(new Date());
		user.setAddress("天津");
		
		ss.insert("user.insertUser", user);
		System.out.println(user);
		ss.commit();
		//释放资源
		ss.close();
	}
  • 理解以下内容 order=“AFTER”,order="BEFORE"区别
	<selectKey keyProperty="id" resultType="int" order="AFTER">
			SELECT LAST_INSERT_ID()
	</selectKey>
	<selectKey keyProperty="id" resultType="string" order="BEFORE">
			SELECT LAST_INSERT_ID()
	</selectKey>
useGeneratedKeys="true" keyProperty="id"
改设置与 order="AFTER"获得结果一样,先插入后获取id

当设置为 order="BEFORE"获得的值为null

三、增加功能,利用SQL自动生成uuid

1.修改User.xml映射文件
<insert id="insertUserUUID" parameterType="com.mybatis.domain.User" useGeneratedKeys="true" keyProperty="id">
		<!-- selectKey主键返回
		 keyProperty 主键属性
		 resultType 数据类型
		 order 何时执行-->
		<selectKey keyProperty="uuid" resultType="string" order="BEFORE">
			SELECT UUID()
		</selectKey>
		INSERT INTO `user`
	            (`username`,
	             `birthday`,
	             `sex`,
	             `address`,
	             `uuid`)
		VALUES (#{username},
		        #{birthday},
		        #{sex},
		        #{address},
		        #{uuid});
	</insert>
2.增加测试方法
@Test
	public void testInsertUserUUID() throws Exception {
		//获取SqlSessionFactory
		SqlSessionFactory sql= SqlSessionFactoryUtils.getSql();
		//创建SqlSession对象,默认不是自动提交,设置为ture自动提交
		SqlSession ss=sql.openSession();

		User user = new User();
		user.setUsername("百分百欧克41");
		user.setSex("1");
		user.setBirthday(new Date());
		user.setAddress("天津");
		
		ss.insert("user.insertUserUUID", user);
		System.out.println(user);
		ss.commit();
		//释放资源
		ss.close();
	}
  • 理解id 与uuid 问题,当设置UUid时id不生效默认为null
<insert id="insertUserUUID" parameterType="com.mybatis.domain.User" useGeneratedKeys="true" keyProperty="id">
		<!-- selectKey主键返回
		 keyProperty 主键属性
		 resultType 数据类型
		 order 何时执行-->
		<selectKey keyProperty="uuid" resultType="string" order="BEFORE">
			SELECT UUID()
		</selectKey>

useGeneratedKeys="true" keyProperty="id"不生效默认为空
  • 理解uuid ,order=“BEFORE” ,order="AFTER"区别
当设置为order="AFTER"时,无法获得值

三、修改功能

1.修改User.xml映射
<update id="updateUser" parameterType="com.mybatis.domain.User">
		UPDATE `user` 
			SET
				`username` = #{username}
			WHERE
				`id` = #{id} ;
	</update>
2.添加测试方法
@Test
	public void testUpdateUser() throws Exception {
		//获取SqlSessionFactory
		SqlSessionFactory sql= SqlSessionFactoryUtils.getSql();
		//创建SqlSession对象,默认不是自动提交,设置为ture自动提交
		SqlSession ss=sql.openSession();
	
		User user = new User();
		user.setUsername("百分百欧克22");
		user.setId(22);
		
		ss.update("user.updateUser", user);
		ss.commit();
		//释放资源
		ss.close();
	}

四、删除功能

1.修改User.xml映射
	<update id="deleteUser" parameterType="int">
		DELETE FROM `user` 
			WHERE
				`id` = #{id} ;
	</update>
2.添加测试方法
@Test
	public void testDeleteUser() throws Exception {
		//获取SqlSessionFactory
		SqlSessionFactory sql= SqlSessionFactoryUtils.getSql();
		//创建SqlSession对象,默认不是自动提交,设置为ture自动提交
		SqlSession ss=sql.openSession();
		
		/*
		 * User user = new User(); user.setId(22);
		 * 
		 * ss.delete("user.deleteUser", user);
		 */
		
		ss.delete("user.deleteUser", 22);
		ss.commit();
		//释放资源
		ss.close();
	}

五、小结

  • #{}占位符 相当于SQL问号
    ${} $字符串拼接
    如果传入参数为普通类型,大括号为value
    如果传入为对象,大括号为对象成员变量
  • id:sql唯一标识
    parameterType 入参类型
    resultType 返回结果类型
  • selectKey主键返回
    keyProperty 主键属性
    resultType 数据类型
    order 何时执行
  • useGeneratedKeys使用自增,keyProperty结合使用
  • selectList和selectOne区别
  • 增改删功能 创建SqlSession对象,默认不是自动提交,设置为ture自动提交
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值