Mybatis使用SqlSession发送SQL实现数据的CRUD

                                       以mysql数据库为例,该数据库中存在表user_info,该表存放用户信息

要操作数据库中的表,必须编写一个实体类UserInfo,该类的属性包含表中所有的列,为了方便,该实体类只引用id、userName、password、regDate实体类UserInfo的代码如下

UserInfo.java

package com.mybatis.entity;

import java.util.Date;

public class UserInfo {
	private int id;
	private String userName;
	private String password;
	private Date regDate;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Date getRegDate() {
		return regDate;
	}
	public void setRegDate(Date regDate) {
		this.regDate = regDate;
	}
	public UserInfo() {
		super();
		// TODO Auto-generated constructor stub
	}
	public UserInfo(String userName, String password, Date regDate) {
		super();
		this.userName = userName;
		this.password = password;
		this.regDate = regDate;
	}
	@Override
	public String toString() {
		return "UserInfo [id=" + id + ", userName=" + userName + ", password="
				+ password + ", regDate=" + regDate + "]";
	}

}

有了实体类还不能实现对数据库数据的操作,必须配置映射文件,将数据库user_info表和实体类UserInfo形成映射关系,并在映射文件中编写相应的sql语句, select * from user_info where id=#{id} insert into user_info(userName,password,regDate) values(#{userName},#{password},#{regDate}) update user_info set userName=#{userName},password=#{password},regDate=#{regDate} where id=#{id} delete from user_info where id=#{id}

有了实体类和映射文件外,还需要编写全局配置文件,该文件用于连接数据库、进行数据库参数设置、设置类的别名、设置日志方式、引入映射文件,编写完全局配置文件后,mybatis就可以通过全局配置文件找到相应的映射文件。 

mybatis-config.xml

 
 
 




   



  

    
      
        
          
          
          
          
        
      
   
  


    
  
 

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/zhang?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=zwj19970923

其中db.properties是我们自己编写的properties文件,里面存放有关数据库的配置属性,这样我们可以通过修改该文件来修改对数据库的参数配置,达到方便的目的。

编写单元测试,使用SqlSession实现对user_info表数据的CRUD

package com.mybatis.test;

import static org.junit.Assert.*;

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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.mybatis.entity.UserInfo;

public class MyBatisTest {

	private SqlSessionFactory sqlSessionFactory=null;
    private SqlSession session=null;
	@Before
	public void start(){
		try{
		String resource="mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource); 
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		session=sqlSessionFactory.openSession();
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
	
	
	@Test
	public void testAddUserInfo() { //添加数据
	    UserInfo ui=new UserInfo("mybatis1","123",new Date());
	    session.insert("addUserInfo", ui);
	}
	
	@Test
	public void testGetUserInfoById(){ //根据id查询数据
		UserInfo ui=(UserInfo)session.selectOne("findUserInfoById", 62);
		System.out.println(ui.toString());
	}
	
	@Test
	public void testGetAllUserInfo(){ //查询所有数据
		List uiList=session.selectList("findAllUserInfo");
		System.out.println(uiList.size());
	}
	
	@Test
	public void testUpdateUserInfo(){ //更新数据
		//获取要修改的UserInfo对象
		UserInfo ui=(UserInfo)session.selectOne("findUserInfoById",62);
		ui.setUserName("mybatis-2");
		session.update("updateUserInfo", ui);
	}
	
	@Test
	public void testDeleteUserInfo(){ //删除数据
		int result=session.delete("deleteUserInfo", 62);
		System.out.println(result);
	}
	

	@After
	public void destroy(){
		session.commit();
		session.close();
	}

}

执行testAddUserInfo函数后,表user_info添加了一条新纪录,在控制台输出一个整数,表示影响表中的记录数,这里只是向表插入一条记录,因此影响记录数为1,通过配置日志文件,我们还可以在控制台查看sql语句的执行情况,如下图。

 

执行testGetUserInfoById函数后,查询id为62的用户信息,在user_info表中id为62的用户信息就是刚刚我们插入的用户信息,执行后控制台应输出用户的基本信息

可见查询的用户信息就是刚刚插入的用户信息 

执行testGetAllUserInfo函数,使用SqlSession的selectList方法,返回一个List对象,该列表对象中每一个数据项的类型都是UserInfo,列表对象保存着所有的UserInfo对象,user_info表中的记录如下所示,执行完后在控制台输出该表应有的记录总数。

Mybatis使用SqlSession发送SQL实现数据的CRUD_第1张图片

控制台的输出结果,总记录数是10。

Mybatis使用SqlSession发送SQL实现数据的CRUD_第2张图片

执行testUpdateUserInfo实现对数据的跟新,将刚插入的数据进行更新,用selectOne进行数据的定位,确认需要更改的数据后再使用update更新数据,执行函数后刚刚插入的用户数据的userName应改变为mybatis-2,更新影响的记录数为1,控制台和数据表记录如下

Mybatis使用SqlSession发送SQL实现数据的CRUD_第3张图片

执行testDeleteUserInfo删除刚插入的数据,执行后控制台输出影响的记录数为1, 而且数据表user_info中mybatis-2的数据将会被删除

对此,使用SqlSession发送SQL实现数据的CRUD已经基本完成了!

 

 

 

 

 

你可能感兴趣的:(Mybatis使用SqlSession发送SQL实现数据的CRUD)