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>元素中的id表示唯一标识这条sql语句、parameterType表示输入该sql语句的参数类型、resultType表示返回结果类型,该类型可以是类的别名,也可以是类的全限命名,sql语句中的#{}表示参数,该参数内部字符必须和输入类型的类的属性一致,例如<insert>元素中的#{userName}和UserInfo中的属性userName字符串对应相同。

<?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">
<mapper namespace="com.mybatis.mybatis.UserInfoMapper">
   <!-- select元素查询数据 -->
   <select id="findUserInfoById" parameterType="int" resultType="UserInfo">
       select * from user_info where id=#{id}
   </select>
   <select id="findAllUserInfo" resultType="userInfo">
       select * from user_info
   </select>
   <!-- insert元素添加数据记录 -->
   <insert id="addUserInfo" parameterType="UserInfo">
       insert into user_info(userName,password,regDate) values(#{userName},#{password},#{regDate})
   </insert>
   <!-- update元素修改记录 -->
   <update id="updateUserInfo" parameterType="UserInfo">
       update user_info set userName=#{userName},password=#{password},regDate=#{regDate} where id=#{id}
   </update>
   <!-- delete元素删除记录 -->
   <delete id="deleteUserInfo" parameterType="int">
       delete from user_info where id=#{id}
   </delete>
</mapper>

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

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
"http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration> 
<!-- 加载属性文件 -->
<properties resource="db.properties"/>
<!-- 设置日志 -->
<settings>
   <setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!-- 设置类型别名 -->
<typeAliases>
  <typeAlias alias="UserInfo" type="com.mybatis.entity.UserInfo"/>
</typeAliases>
<environments default="development">    
 <environment id="development">     
  <transactionManager type="JDBC"/>      
  <dataSource type="POOLED">        
  <property name="driver" value="${jdbc.driver}"/>        
  <property name="url" value="${jdbc.url}"/>        
  <property name="username" value="${jdbc.username}"/>        
  <property name="password" value="${jdbc.password}"/>      
  </dataSource>    
 </environment>  
</environments>  

<!-- 引入映射文件 -->
<mappers>    
<mapper resource="com/mybatis/entity/UserInfoMapper.xml"/>  
</mappers> 
</configuration>

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<UserInfo> 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表中的记录如下所示,执行完后在控制台输出该表应有的记录总数。

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

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

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

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

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个开源的持久层框架,它可以帮助我们简化数据库操作的代码。下面是使用MyBatis实现CRUD的步骤: 1. 创建Maven项目,并添加MyBatis依赖。 2. 创建数据库表,并在数据库中插入一些测试数据。 3. 创建实体类,用于映射数据库表的字段。 4. 创建Mapper接口,定义数据库操作的方法。 5. 创建Mapper映射文件,配置SQL语句和参数映射。 6. 在配置文件中配置数据源和MyBatis的相关配置。 7. 编写测试类,调用Mapper接口中的方法进行数据库操作。 下面是一个使用Mapper映射文件实现增删改查的示例: 1. 创建Mapper接口: ```java public interface StudentMapper { // 根据学生id查询学生信息 Student getStudentById(int id); // 添加学生信息 void addStudent(Student student); // 更新学生信息 void updateStudent(Student student); // 根据学生id删除学生信息 void deleteStudent(int id); } ``` 2. 创建Mapper映射文件(studentMapper.xml): ```xml <mapper namespace="com.example.mapper.StudentMapper"> <!-- 根据学生id查询学生信息 --> <select id="getStudentById" resultType="com.example.entity.Student"> SELECT * FROM student WHERE id = #{id} </select> <!-- 添加学生信息 --> <insert id="addStudent"> INSERT INTO student(name, age) VALUES(#{name}, #{age}) </insert> <!-- 更新学生信息 --> <update id="updateStudent"> UPDATE student SET name = #{name}, age = #{age} WHERE id = #{id} </update> <!-- 根据学生id删除学生信息 --> <delete id="deleteStudent"> DELETE FROM student WHERE id = #{id} </delete> </mapper> ``` 3. 在配置文件中配置Mapper映射文件的路径: ```xml <configuration> <mappers> <mapper resource="com/example/mapper/studentMapper.xml"/> </mappers> </configuration> ``` 4. 编写测试类: ```java public class MyBatisTest { public static void main(String[] args) { // 创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); // 创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 获取Mapper接口的实例 StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); // 调用Mapper接口中的方法进行数据库操作 Student student = studentMapper.getStudentById(1); System.out.println(student); student.setName("Tom"); student.setAge(20); studentMapper.updateStudent(student); studentMapper.deleteStudent(2); sqlSession.commit(); sqlSession.close(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值