Mybatis
增-删-改-Util工具类
增加
- 新增一个user对象,并在控制台输出对象保存到数据之后的主键值
接口
- 修改UserMapper在保存方法上添加添加返回主键的注解@Options
//操作那个表就对应的起名 xxxMapper, 注意这是个接口
public interface UserMapper {
//声明一个保存用户的方法, 然后在方法上使用@Insert声明方法对应的sql语句
//后面只要一执行方法,mybatis就会帮我们把sql语句发送到数据库中去
//#{}中的内容
//1. 当方法参数是一个对象时, #{}里面写的是对象中的属性名
//主键返回
//useGeneratedKeys=true 告诉mybatis,当执行完保存操作之后,需要将数据库中新增记录的主键查询回来
//keyProperty = "id" 查询回来的主键值需要封装到方法参数对象的哪个属性上
@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("insert into user values (null,#{name},#{age},#{gender},#{phone})")
void save(User user);
}
测试
public class UserMapperTest {
@Test
public void testSave() throws IOException {
//0. 准备一个User对象
User user = new User();
user.setName("张三");
user.setAge(18);
user.setGender(1);
user.setPhone("13800138000");
//1. 使用mybatis将user对象保存到数据库(步骤不重要, 不用记)
//1-1 读取配置文件,读成一个输入流
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//1-2 创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//1-3 获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//1-4 获取UserMapper对象,调用方法
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.save(user);
//保存之后,打印出user中得id
System.out.println(user);
//1-5 提交事务
sqlSession.commit();
//1-6 释放资源
sqlSession.close();
}
}
修改
- 根据id修改其它列
接口
public interface UserMapper {
//根据id更新
@Update("update user set name = #{name},age = #{age}, gender = #{gender},phone=#{phone} where id = #{id} ")
void update(User user);
}
测试
@Test
public void testUpdate() throws IOException {
//1. 使用mybatis将user对象保存到数据库(步骤不重要, 不用记)
//1-1 读取配置文件,读成一个输入流
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//1-2 创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//1-3 获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//1-4 获取UserMapper对象,调用方法
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//准备一个User对象,必须包含id
User user = new User();
user.setName("李四");
user.setAge(20);
user.setGender(1);
user.setPhone("13700137000");
user.setId(1);
userMapper.update(user);
//1-5 提交事务
sqlSession.commit();
//1-6 释放资源
sqlSession.close();
}
删除
- 根据id删除
接口
//#{}中的内容
//1. 当方法参数是一个对象时, #{}里面写的是对象中的属性名
//2. 当方法参数是一个简单类型参数(8种基本 + 8种包装 + Stringg)时, #{}里面可以随便写,但是推荐写方法形参
//删除
@Delete("delete from user where id = #{id}")
void delete(Integer id);
测试
@Test
public void testDelete() throws IOException {
//1. 使用mybatis将user对象保存到数据库(步骤不重要, 不用记)
//1-1 读取配置文件,读成一个输入流
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//1-2 创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//1-3 获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//1-4 获取UserMapper对象,调用方法
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.delete(1);
//1-5 提交事务
sqlSession.commit();
//1-6 释放资源
sqlSession.close();
}
抽取工具类 util类
上面所有重复代码都可以直接调用工具类,较少代码的重复性
package com.itheima.util;
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 java.io.InputStream;
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory;
//静态代码块
static {
try {
//读取配置文件,读成数据流
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取sqlSession
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
//提交事务和释放资源
public static void close(SqlSession sqlSession) {
if (sqlSession != null) {
//提交事务(mybatis默认情况下是不会自动提交事务)
sqlSession.commit();
//释放资源
sqlSession.close();
}
}
}
利用工具类增删改一起写在一个测试类里
package com.itheima.test;
import com.itheima.domain.User;
import com.itheima.mapper.UserMapper;
import com.itheima.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class UserMapperTest {
/**
*添加数据
*/
@Test
public void testSave() {
//获取sqlSession
SqlSession sqlSession = MyBatisUtil.getSqlSession();
//获取UserMapper对象,调用方法
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//准备一个User对象,保存
User user = new User();
user.setName("张三");
user.setAge(18);
user.setGender(1);
user.setPhone("13800138000");
userMapper.save(user);
//保存之后,打印出user中得id
System.out.println(user);
//提交事务,释放资源
MyBatisUtil.close(sqlSession);
}
/**
*修改数据
*/
@Test
public void testUpdate() {
//获取sqlSession
SqlSession sqlSession = MyBatisUtil.getSqlSession();
//获取UserMapper对象,调用方法
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//准备一个User对象,必须包含id
User user = new User();
user.setName("李四");
user.setAge(20);
user.setGender(1);
user.setPhone("13700137000");
user.setId(1);
userMapper.update(user);
//提交事务,释放资源
MyBatisUtil.close(sqlSession);
}
/**
*修改数据
*/
@Test
public void testDelete() {
//获取sqlSession
SqlSession sqlSession = MyBatisUtil.getSqlSession();
//获取UserMapper对象,调用方法
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.delete(1);
//提交事务,释放资源
MyBatisUtil.close(sqlSession);
}
}