Mybatis实现增删改查

上一篇文章介绍了Mybatis的入门程序,接着之前的继续,可以实现对Mybatis的增删改查。

首先需要对测试类进行修改。

package com.w.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.w.pojo.User;

public class UserTest1 {

	public static void main(String[] args) throws IOException {
		// 根据id查询用户
		// getUserById();
		// 根据用户名称模糊查询用户列表
		// getUserByUsername();
		// 添加用户
		// inserUser();
		// 更新用户
		// updateUser();
		// 删除用户
		deleteUserById();
	}

	private static void deleteUserById() throws IOException {
		// 加载核心配置文件
		String resource = "sqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 创建SqlSession
		SqlSession openSession = sqlSessionFactory.openSession();
		User user = new User();
		user.setId(30);
		int insert = openSession.insert("deleteUserById", user);
		openSession.commit();
		// System.out.println(user.getId());
	}

	// 更新用户
	private static void updateUser() throws IOException {
		// 加载核心配置文件
		String resource = "sqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 创建SqlSession
		SqlSession openSession = sqlSessionFactory.openSession();
		User user = new User();
		user.setId(30);
		user.setAddress("New York");
		user.setBirthday(new Date());
		user.setUsername("lucy");
		user.setSex("1");
		int insert = openSession.insert("updateUser", user);
		openSession.commit();
		// System.out.println(user.getId());
	}

	// 添加用户
	private static void inserUser() throws IOException {
		// 加载核心配置文件
		String resource = "sqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 创建SqlSession
		SqlSession openSession = sqlSessionFactory.openSession();
		User user = new User();
		user.setAddress("cross");
		user.setBirthday(new Date());
		user.setUsername("lisa");
		user.setSex("2");
		int insert = openSession.insert("inserUser", user);
		openSession.commit();
		System.out.println(user.getId());
	}

	// 根据用户名称查询用户列表
	private static void getUserByUsername() throws IOException {
		// 加载核心配置文件
		String resource = "sqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 创建SqlSession
		SqlSession openSession = sqlSessionFactory.openSession();
		String username = "李";
		List<User> users = openSession.selectList("getUserByUserName", username);
		for (User user : users) {
			System.out.println(user);
		}
	}

	// 根据id查询用户
	public static void getUserById() throws IOException {
		// 加载核心配置文件
		String resource = "sqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 创建SqlSession
		SqlSession openSession = sqlSessionFactory.openSession();
		// 执行sql语句
		User user = openSession.selectOne("getUserById", 10);
		System.out.println(user);
	}
}

然后修改mapper中的UserMapper.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">
<!-- 根据id查用户 -->
<mapper namespace="com.w.mapper.UserMapper">
	<select id="getUserById" parameterType="Integer"
		resultType="com.w.pojo.User">
		select * from user where id=#{v}
	</select>
	<!-- 根据用户名称查询用户列表 -->
	<select id="getUserByUserName" parameterType="String"
		resultType="com.w.pojo.User">
		select * from user where username like '%${value}%'
	</select>
	<!-- 添加用户 -->
	<insert id="inserUser" parameterType="com.w.pojo.User">
		<selectKey order="AFTER" resultType="Integer"
			keyProperty="id">
			select LAST_INSERT_ID()
		</selectKey>
		insert into user
		(username,birthday,address,sex) values
		(#{username},#{birthday},#{address},#{sex})
	</insert>
	<!-- 更新用户 -->
	<update id="updateUser" parameterType="com.w.pojo.User">
		update user set
		username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
		where id=#{id}
	</update>
	<!-- 删除用户 -->
	<delete id="deleteUserById" parameterType="com.w.pojo.User">
		delete from user where id=#{id}
	</delete>
</mapper>

这里需要说一下,当你创建用户的时候,由于用户id是自增的,所以你想获得id应该使用selectKey那段代码:

<selectKey order="AFTER" resultType="Integer"
			keyProperty="id">
			select LAST_INSERT_ID()
		</selectKey>

其中的order表示的是你是自动生成的就写AFTER,也就是主键是自动生成后再取出的,如果写BEFORE就是表示你先生成了一个ID,然后再去执行操作,resultType表示类型,keyPorperty表示的是主键对应数据库表中的字段。

再一个就是模糊查询时需要用到的是${value},而不是#{任意值}。由于#{}表示占位符,如果放到数据库中则表示username='李',如果使用${value}就表示username=李,在数据库中查询会报错。所以使用 username like '%#{username}%'就相当于是'%'李'%',如果你想用#{}去写like的话,应该改为 username like "%"#{username}"%"。

以上就是实现增删改查的基本操作实现了,希望对你有帮助。喜欢的朋友可以关注我微信的公众号:从小白到架构师。我会每天更新学习内容的。

上一篇:Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring


下一篇:mybatis整合spring的两种实现方式