基于Mybatis实现CRUD操作过程解析(xml方式)

1、环境搭建

1.1 表结构

create table user (
 id int primary key auto_increment,
 username varchar(20) not null,
 birthday date,
 sex char(1) default '男',
 address varchar(50)
);

insert into user values (null, '孙悟空','1980-10-24','男','花果山水帘洞');
insert into user values (null, '白骨精','1992-11-12','女','白虎岭白骨洞');
insert into user values (null, '猪八戒','1983-05-20','男','福临山云栈洞');
insert into user values (null, '蜘蛛精','1995-03-22','女','盤丝洞');

1.2 创建项目

导入如下jar

  • mybatis框架包
  • 数据库驱动包
  • log4j日志包
  • junit单元测试包

1.3 准备配置文件

在src下准备配置文件:sqlMapConfig.xml




  
  
    
      
      
      
      
        
        
        
        
      
    
  

在 src 下准备配置文件:log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout

# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

2-增删改查源码

1.1 执行结果

1.2 User类代码

import java.sql.Date;

/**
 用户实体类对象 */
public class User {

  private Integer id;  
  private String username;
  private Date birthday;
  private String sex;
  private String address;

  public User() {
  }

  public User(Integer id, String username, Date birthday, String sex, String address) {
    this.id = id;
    this.username = username;
    this.birthday = birthday;
    this.sex = sex;
    this.address = address;
  }

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public Date getBirthday() {
    return birthday;
  }

  public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }

  public String getSex() {
    return sex;
  }

  public void setSex(String sex) {
    this.sex = sex;
  }

  public String getAddress() {
    return address;
  }

  public void setAddress(String address) {
    this.address = address;
  }

  @Override
  public String toString() {
    return "User{" +
        "id=" + id +
        ", username='" + username + '\'' +
        ", birthday=" + birthday +
        ", sex='" + sex + '\'' +
        ", address='" + address + '\'' +
        '}';
  }
}

1.3 UserMapper接口代码

package com.vg.dao;

import com.vg.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
/**
 * 数据访问层接口:对用户进行增删改查操作
 */
public interface UserMapper {
	/**
	 * 添加用户
	 */
	int addUser(User user);
	/**
	 * 根据id删除用户
	 */
	void deleteUser(Integer id);
	/**
	 * 通过id修改用户信息
	 */
	/**
	 * 修改用户信息
	 */
	void updateUser(User user);
	/**
	 * 查询所有用户
	 */
	List findAllUsers();
	/**
	 * 根据id查询用户
	 */
	User findUserById(int id);

	/**
	 * 根据用户名模糊查询用户
	 */
	List findUsersByName(String username);
	/**
	 * 根据姓名和性别查询用户数据(姓名使用模糊查询)
	 */

	/**
	 * 根据用户名称模糊查询用户
	 */
}
}

1.4 UserMapper.xml接口映射文件





  

  
  

  

  

  
    insert into user values(null,#{username},#{birthday},#{sex},#{address});
  

  
    update user set username = #{username},
    birthday = #{birthday},sex = #{sex}, address = #{address}
  where id = #{id}
  

  
    delete from user where id = #{id}
  

1.5 在主配置文件中加载接口映射文件


   
    
    

1.6 测试类代码

package com.vg.test;

import com.vg.dao.UserMapper;
import com.vg.entity.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

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

/**
 * 测试类
 */
public class TestUserMapper {
	private static SqlSessionFactory sqlSessionFactory =null;
	private SqlSession sqlSession =null;
	private UserMapper userMapper =null;

	// 该方法在所有测试方法执行之前执行1次
	@BeforeClass
	public static void init() throws Exception {
		// 1. 通过Resources类,加载sqlMapConfig.xml,得到文件输入流对
		InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
		// 2. 实例化会话工厂创建类SqlSessionFactoryBuilder对象
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		// 3. 根据字节输入流获取SqlSessionFactory对象
		sqlSessionFactory = builder.build(in);
	}
	// 该方法会在每个测试方法执行之前执行1次
	@Before
	public void before(){
		// 4. 获取SqlSession对象,等价连接对象
		// true:事务自动提交,false:不自动提交,默认值
		sqlSession = sqlSessionFactory.openSession();
		// 5. 创建接口 实现类对象
		userMapper = sqlSession.getMapper(UserMapper.class);

	}
	/**
	 * 测试方法:通过用户名模糊查询用户
	 */
	@Test
	public void testAddUser() throws Exception{
		// 1. 获得接口代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		// 2. 创建User对象
		User u = new User();
		u.setUsername("如来佛祖111");
		u.setBirthday(Date.valueOf("1980-01-20"));
		u.setAddress("西天灵山");
		u.setSex("男");
		// 3. 保存用户信息
		int row = userMapper.addUser(u);
		System.out.println("row = " + row);
		// 4. 手动提交事务
		sqlSession.commit();
	}
	/**
	 * 测试方法:通过用户名模糊查询用户
	 */
	@Test
	public void testFindUserByName() throws Exception{
		List userList = userMapper.findUsersByName("%精%");
		for (User user : userList) {
			System.out.println(user);
		}
	}

	/**
	 * 测试方法:查询所有用户
	 */
	@Test
	public void testFindAllUsers() throws Exception{
		List userList = userMapper.findAllUsers();
		for (User user : userList) {
			System.out.println(user);
		}
	}

	/**
	 * 根据id查询用户
	 * @throws Exception
	 */
	@Test
	public void testFindUserById()throws Exception{
		// 6. 调用接口的方法根据id查询用户
		User user = userMapper.findUserById(1);
		System.out.println("user = " + user);

	}
	@Test
	public void testUpdateUser()throws Exception{
		// 创建用户对象
		User user = new User(
				6,
				"牛魔王",
				Date.valueOf("1998-02-20"),
				"妖",
				"牛魔洞");
		// 更新用户
		userMapper.updateUser(user);

		// 提交事务
		sqlSession.commit();
	}
	@Test
	public void testDeleteUser()throws Exception{
		// 1. 获得接口代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		// 2. 根据id删除用户
		userMapper.deleteUser(6);
		// 3. 提交事务
		sqlSession.commit();
	}
	@After
	public void after() {
		// 7. 关闭会话,释放资源。

		sqlSession.close();
	}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(基于Mybatis实现CRUD操作过程解析(xml方式))