先認識一下註解概念:
定義:註解(Annotation),也叫元數據。一種代碼級別的說明。它是JDK1.5及以後版本引入的一個特性,與類、接口、枚舉是在同一個層次。它可以聲明在包、類、字段、方法、局部變量、方法參數等的前面,用來對這些元素進行說明,註釋。
作用分類:
①編寫文檔:通過代碼裏標識的元數據生成文檔【生成文檔doc文檔】
② 代碼分析:通過代碼裏標識的元數據對代碼進行分析【使用反射】
③編譯檢查:通過代碼裏標識的元數據讓編譯器能夠實現基本的編譯檢查
MyBatis提供了哪些註解呢?
1.@Insert
2.@Delete
3.@Select
4.@update
接口去編寫具體的實現類代碼,這個具體的實現類由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);
}
}