MyBatis学习总结(四)---基于注解方式实现CRUD操作

       在最初设计时,MyBatis是一个XML驱动的框架。配置信息是基于XML的,而且映射语句也是定义在XML中的。所以之前基本都采用XML的方式来配置信息,而到了MyBatis3,有新的可用的选择了。MyBatis3构建在基于全面而且强大的Java配置API之上。这个配置API是基于XML的MyBatis配置的基础,也是新的基于注解配置的基础。注解提供了一种简单的方式来实现简单映射语句,而不会引入大量的开销。

         回顾基于XML方式实现CRUD操作,可看:https://blog.csdn.net/qq_40348465/article/details/84309345

        基于注解方式实现CRUD操作示例:

        1.项目目录如:

       

         2.定义sql映射的接口,如下:

          这是基于注解的方式,所以需要建立一个接口,并在定义的方法上配置上应有的注解,注解中含有sql语句,需要提示的是这个接口不需要类去实现它

package com.mybatisstudy.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.mybatisstudy.model.User;

public interface IUserDao {
	@Select("SELECT * FROM user ;")
	public List<User> getAllUser();
	
	@Select("SELECT * FROM user where id = #{id} ;")
	public User getUserById(int id);
	
	@Insert("INSERT INTO user(id,name,sex,age) VALUES(#{id},#{name},#{sex},#{age});")
	public int addUser(User user);
	
	@Update("UPDATE user SET age=#{age} ,name=#{name}  WHERE id=#{id} ;")
	public int updateUser(User user);
	
	@Delete("DELETE FROM user WHERE id=#{id};")
	public int deleteUser(int id);
	
}

           3.在MyBatis的xml配置文件中注册这个映射接口,如:

          

<mappers>
	    <!-- 配置实体映射文件 -->
		<mapper class="com.mybatisstudy.mapper.IUserDao" />
	</mappers>

       

<?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>
    <!-- 引用并使用db.properties -->
    <properties resource="db.properties" />
    
    <!-- environments:信息配置的是连接数据库的(数据源的)一些参数,如用户名,密码等,MyBatis数据库操作的session就是根据这些信息初始化的-->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<!-- 数据源配置 -->
			<dataSource type="POOLED">
			    <!-- 数据库驱动 -->
				<property name="driver" value="${driver}" />
				<!-- 数据库连接URL  -->
				<property name="url" value="${url}"/>
				<!-- 数据库用户名和密码 -->
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
   <!-- mappers:配置的是一个个Mapper文件,这些文件来约束数据库的信息(Relationship) 和 对象(Object)的信息映射(Mapper);它负责完成对象和数据库表的映射,是ORM最具体的配置-->
<!-- <mappers>
	    配置实体映射文件
		<mapper resource="com/mybatisstudy/mapper/userMap.xml" />
	</mappers> -->
	
	<!-- 改为用注解的方式,需要注册IUserDao映射接口 -->
	<mappers>
	    <!-- 配置实体映射文件 -->
		<mapper class="com.mybatisstudy.mapper.IUserDao" />
	</mappers>
</configuration>

      4.单元测试类如下:

       

package com.mybatisstudy.test;

import static org.junit.jupiter.api.Assertions.*;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import com.mybatisstudy.mapper.IUserDao;
import com.mybatisstudy.model.User;
import com.mybatisstudy.util.MybatisUtil;

class TestUserDao {
	static IUserDao userDao;
	static SqlSession session;

	@BeforeAll
	static void setUpBeforeClass() throws Exception {
		session = MybatisUtil.getSession();
		userDao = session.getMapper(IUserDao.class);
	}

	@AfterAll
	static void tearDownAfterClass() throws Exception {
		session.close();
	}

	@BeforeEach
	void setUp() throws Exception {

	}

	@AfterEach
	void tearDown() throws Exception {
		session.commit();
	}

	@Test
	void testGetAllUser() {
		List<User> users = userDao.getAllUser();
		System.out.println(users);
	}

	@Test
	void testGetUserById() {
		session = MybatisUtil.getSession();
		userDao = session.getMapper(IUserDao.class);
		User user = userDao.getUserById(1001);
		System.out.println(user);
	}

	@Test
	void testAddUser() {
		User user = new User(1003, "小杰", "男", 20);
		int line = userDao.addUser(user);
		// 使用断言
		// assertEquals 如果预期值与真实值相等,则运行success,反之Failure
		Assert.assertEquals(1, line);

	}

	@Test
	void testUpdateUser() {
		User user = new User(1003, "小明", "男", 21);
		int line = userDao.updateUser(user);
		Assert.assertEquals(1, line);
	}

	@Test
	void testDeleteUser() {
		int userId = 1003;
		int line = userDao.deleteUser(userId);
		Assert.assertEquals(1, line);
	}

}

      5.MybatisUtil类(用于产生sqlsession)如下:

       

package com.mybatisstudy.util;

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

public class MybatisUtil {
   static SqlSessionFactory factory;
   
   static {
	   String resource = "mybatisconf.xml";
	   try {
		   if(factory==null) {
			   factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource));
		   }
	   }catch(IOException e) {
		   e.printStackTrace();
	   }
   }
   
   public static  SqlSession getSession() {
	   return factory.openSession();
   }
   
}

      6.数据库信息的配置文件 db.properties文件如下:

      

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatisstudy?useUnicode=true&characterEncoding=utf8
username=root
password=

     7.User实体类如下:

     

package com.mybatisstudy.model;

public class User {
	private int id;
	private String name;
	private String sex;
	private int age;

	public User() {
		super();
	}

	public User(String name, String sex, int age) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public User(int id, String name, String sex, int age) {
		super();
		this.id = id;
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public int getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

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

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "[id:" + id + ",name:" + name + ",sex:" + sex + ",age:" + age + "]";
	}

}

猜你喜欢

转载自blog.csdn.net/qq_40348465/article/details/84328247