1. 程式人生 > >Mybatis學習總結四之基於註解的單表CRUD操作

Mybatis學習總結四之基於註解的單表CRUD操作

先認識一下註解概念:

定義:註解(Annotation),也叫元資料。一種程式碼級別的說明。它是JDK1.5及以後版本引入的一個特性,與類、介面、列舉是在同一個層次。它可以宣告在包、類、欄位、方法、區域性變數、方法引數等的前面,用來對這些元素進行說明,註釋。

作用分類:

①編寫文件:通過程式碼裡標識的元資料生成文件【生成文件doc文件】

② 程式碼分析:通過程式碼裡標識的元資料對程式碼進行分析【使用反射】

③編譯檢查:通過程式碼裡標識的元資料讓編譯器能夠實現基本的編譯檢查

MyBatis提供了哪些註解呢?

[email protected]
[email protected]

[email protected]
[email protected]

介面去編寫具體的實現類程式碼,這個具體的實現類由MyBatis幫我們動態構建出來,我們只需要直接拿來使用即可。

通過一個案例我們來了解一下註解的簡單使用

前面我們講過:Mybatis學習總結二之基於 XML 的單表CRUD操作:https://blog.csdn.net/qq_38720976/article/details/84488353

我們對比學習

1. UserMapper介面,在此實現註解

我們不需要用介面去編寫具體的實現類程式碼,這個具體的實現類由MyBatis幫我們動態構建出來,我們只需要直接拿來使用即可。

package com.aiit.dao;

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.aiit.pojo.User;

public interface UserMapper {
	//public void getAll();
	@Select("SELECT * FROM tbl_user WHERE tbl_user.id=#{id}")
	 public User selectOne(int id);
	@Select("SELECT * FROM tbl_user")
     public List<User> selectAll(); 
	@Insert("INSERT INTO tbl_user(tbl_user.name,tbl_user.age,tbl_user.address,tbl_user.birth) \r\n" + 
			"		VALUES(#{name},#{age},#{address},#{birth})")
     public int insertOne(User user);
	@Update("update tbl_user set tbl_user.address = #{address} where id = #{id}")
     public int updateOne(User user);
	@Delete("delete from tbl_user where id = #{id}")
     public int deleteOne(int id);
}

2.定義一個使用者類 User

package com.aiit.pojo;

import java.util.Date;

public class User {
  
private int id;
   private String name;
   private int age;
   private String address;
   private Date birth;
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 int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public String getAddress() {
	return address;
}
public void setAddress(String address) {
	this.address = address;
}
public Date getBirth() {
	return birth;
}
public void setBirth(Date birth) {
	this.birth = birth;
}
public User(int id, String name, int age) {
	super();
	this.id = id;
	this.name = name;
	this.age = age;
}
public User() {
	super();
}
public User(int id, String name, int age, String address, Date birth) {
	super();
	this.id = id;
	this.name = name;
	this.age = age;
	this.address = address;
	this.birth = birth;
}

   
@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + ", birth=" + birth + "]";
	}


}

3.主配置檔案mybatis.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>    
     <environments default="development">
         <environment id="development">
             <transactionManager type="JDBC"/>
             <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.jdbc.Driver" />
				<!-- 資料庫連線URL-->
				<property name="url" value="jdbc:mysql://localhost:3306/mysqljdbc?characterEncoding=utf-8" />
				<!-- 資料庫使用者名稱和密碼 -->
				<property name="username" value="root" />
				<property name="password" value="" />
             </dataSource>    
         </environment>
     </environments>
     
     <!-- 在配置檔案中 關聯包下的實體類的對映檔案-->
      <mappers>
         <mapper class="com.aiit.dao.UserMapper"/>
     </mappers>
</configuration>

4.單元測試類TestMyBatisDemo.java

package com.aiit.test;

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

import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
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.aiit.dao.UserMapper;
import com.aiit.pojo.User;

class JUnitTest {
	static UserMapper  userDaoProxy;
	static SqlSession session;
	@BeforeAll
	static void setUpBeforeClass() throws Exception {
		String resource="mybatis.cfg.xml";
		InputStream inputStream = JUnitTest.class.getClassLoader().getResourceAsStream(resource);
		SqlSessionFactory factory = new  SqlSessionFactoryBuilder().build(inputStream);
		session = factory.openSession();
		userDaoProxy = session.getMapper(UserMapper.class);
	}

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

	@BeforeEach
	void setUp() throws Exception {
	}

	@AfterEach
	void tearDown() throws Exception {
	}

	@Test
	void select() {
		//單個查詢
		User user1=userDaoProxy.selectOne(1);
		System.out.println(user1);
	}
	@Test
	void selectALL() {
		//查詢所有
		List<User> users = userDaoProxy.selectAll();
		for(User user : users ) {
			System.out.println(user.getId()+" , "+user.getName()+" , "+user.getAge()+" , "+user.getAddress()+" , "+user.getBirth());
		}
	}
	@Test
	void insert() {
		//插入
		String string = "2016-10-24";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			User user2 = new User("beifang", 15, "Chain",sdf.parse(string));
			int insert=  userDaoProxy.insertOne(user2);
			System.out.println("插入成功"+insert);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
	}
	@Test
	void update() {
		//修改
		User user3 = new User(16, "中國");
		int update = userDaoProxy.updateOne(user3);
		System.out.println("修改成功"+update);

	}
	@Test
	void delete() {
		//刪除
		int delete= userDaoProxy.deleteOne(17);
		System.out.println("刪除成功"+delete);
	}

}