myBatis:註解-普通增刪改查
阿新 • • 發佈:2018-11-08
註解也是mybatis的特色之一,可以簡化大量的檔案配置。
接下來,對一個表進行增刪改查操作
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>MybatisSelect</groupId> <artifactId>MybatisSelect</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>MybatisSelect Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.43</version> </dependency> </dependencies> <build> <finalName>MybatisSelect</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.0.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.20.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.0</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
以後的依賴檔案pom.xml無需配置Java檔案的資源載入。
Mapper對映檔案被註解替代。
<?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> <typeAliases> <package name="com.hc.model"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/cn?characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper class="com.hc.mapper.UserMapper"/> <mapper class="com.hc.mapper.PersonMapper"/> <mapper class="com.hc.mapper.CardMapper"/> <mapper class="com.hc.mapper.AuthorMapper"/> <mapper class="com.hc.mapper.BookMapper"/> <mapper class="com.hc.mapper.CourseMapper"/> <mapper class="com.hc.mapper.StudentMapper"/> </mappers> </configuration>
依次是別名、資料庫、Mapper配置
Mapper從resource變成了class
同樣:
從前所習慣的entity變為model
dao介面變成了Mapper
package com.hc.model; public class User { private int userId; private String userName; public User() { } public User(String userName) { this.userName = userName; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
User物件的封裝
package com.hc.mapper;
//import org.apache.ibatis.annotations.CacheNamespace;
import com.hc.model.User;
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 java.util.List;
//@CacheNamespace 快取
public interface UserMapper {
@Update("update User set userName=#{userName} where userId=#{userId}")
public void updateUser(User user);
@Delete("delete from User where userId=#{userId}")
public void deleteUser(int userId);
@Insert("insert into User(userName) values(#{userName})")
public void insertUser(User user);
@Select("select * from User")
public List<User> allUser();
@Select("select * from User where userId=#{userId}")
public User selectUser(int userId);
@Select("select * from User where userName like concat('%',#{userName},'%')")
public List<User> likeUser(String userName);
}
@CacheNamespace 快取:二級快取,實踐
直接在介面上註解SQL
#{ }:依舊是佔位符
@select、@update:操作型別
concat:拼接
以上方式的前提條件必須是物件與表一一對應,即物件的屬性與表的欄位相同,這是個好習慣,開發也會更便捷
否則:
需要手動配置
@Select("select * from Author")
@Results({
@Result(id=true,property = "autId",column = "autId"),//id=true
@Result(property = "books",column = "autId",many = @Many(select = "com.hc.mapper.BookMapper.selectBookByAutId"))
})
public List<Author> allAuthor();
Results:結果集
Result:結果
主鍵需要id=true
property:物件屬性
column :表字段
宣告物件的某個屬性與表的某個欄位是關聯的
此種註解,也被稱為面向介面程式設計
package com.hc.test;
import com.hc.mapper.UserMapper;
import com.hc.model.User;
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;
public class TestUser {
private SqlSession session;
private UserMapper userMapper;
@Before
public void before() {
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(getClass().getClassLoader().getResourceAsStream("myBatis-config.xml"));
session = factory.openSession();
userMapper = session.getMapper(UserMapper.class);
}
@Test
public void test() {
User user=new User("戰國七雄昂");
user.setUserId(6);
userMapper.updateUser(user);
// userMapper.deleteUser(1);
// for (User user : userMapper.likeUser("l")) {
// System.out.println(user.getUserId() +"\t"+ user.getUserName());
// }
// User user=new User("戰國");
// userMapper.insertUser(user);
// for (User user : userMapper.allUser()) {
// System.out.println(user.getUserId() +"\t"+ user.getUserName());
// }
// User user=userMapper.selectUser(1);
// System.out.println(user.getUserId() +"\t"+ user.getUserName());
}
@After
public void after() {
session.commit();
session.close();
}
}
單元測試
比以前的開發更為簡便。
再加上Spring後,會更加簡捷。