MyBatis01基於配置的CRUD操作
阿新 • • 發佈:2020-07-26
- 建立Maven工程
- 匯入依賴
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
- 建立資料庫
CREATE TABLE `user` (
`id` int NOT NULL,
`username` varchar(32) DEFAULT NULL,
`password` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
)
- 編寫實體類
package blog.mybatis.domain; public class User { private Integer id; private String username; private String password; public Integer getId() { return id; } public void setId(Integer 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; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
- 建立資料庫配置檔案db.properties
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8&serverTimezone=GMT%2B8
username = root
password = 123456
- 建立MyBatis主配置檔案SqlMapConfig.xml
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- mybatis的主配置檔案 --> <configuration> <!-- 載入類路徑下的屬性檔案 --> <properties resource="db.properties"/> <!-- 配置環境 --> <environments default="mysql"> <!-- 配置mysql的環境 --> <environment id="mysql"> <!-- 配置事務型別 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置資料來源(連線池) --> <dataSource type="POOLED"> <!-- 配置連線資料庫的4個基本資訊 --> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 指定對映配置檔案的位置,對映配置檔案指的是每個dao獨立的配置檔案 --> <mappers> <package name="blog.mybatis.dao"/> </mappers> </configuration>
- 編寫UserDao
package blog.mybatis.dao;
import blog.mybatis.domain.User;
import java.util.List;
/**
* 使用者持久層介面
*/
public interface UserDao {
/**
* 查詢所有
* @return
*/
List<User> findAll();
/**
* 新增使用者
*/
void saveUser(User user);
/**
* 更新使用者
* @param user
*/
void updateUser(User user);
/**
* 刪除使用者
* @param userId
*/
void deleteUser(Integer userId);
/**
* 根據id查詢使用者資訊
* @param userId
* @return
*/
User findById(Integer userId);
/**
* 根據名稱模糊查詢
* @param username
* @return
*/
List<User> findByName(String username);
}
- UserDao對映配置檔案UserDao.xml
<?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="blog.mybatis.dao.UserDao">
<!-- 查詢所有 -->
<select id="findAll" resultType="blog.mybatis.domain.User">
select * from user
</select>
<!-- 儲存使用者 -->
<insert id="saveUser" parameterType="blog.mybatis.domain.User">
<!-- 配置插入操作後,獲取插入資料的id -->
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id()
</selectKey>
insert into user(username,password)values(#{username},#{password})
</insert>
<!-- 更新使用者 -->
<update id="updateUser" parameterType="blog.mybatis.domain.User">
update user set username=#{username}, password=#{password} where id=#{id}
</update>
<!-- 刪除使用者 -->
<delete id="deleteUser" parameterType="Integer">
delete from user where id = #{uid}
</delete>
<!-- 根據id查詢使用者 -->
<select id="findById" parameterType="INT" resultType="blog.mybatis.domain.User">
select * from user where id = #{uid}
</select>
<!-- 根據名稱模糊查詢使用者資訊 -->
<select id="findByName" parameterType="string" resultType="blog.mybatis.domain.User">
select * from user where username like #{name}
</select>
</mapper>
- 測試
package blog.mybatis.Test;
import blog.mybatis.dao.UserDao;
import blog.mybatis.domain.User;
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 java.io.InputStream;
import java.util.List;
public class Test {
private InputStream in;
private SqlSession sqlSession;
private UserDao userDao;
@org.junit.Before
public void init() throws Exception {
//1.讀取配置檔案,生成位元組輸入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.獲取SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.獲取SqlSession物件
sqlSession = factory.openSession();
//4.獲取dao的代理物件
userDao = sqlSession.getMapper(UserDao.class);
}
@org.junit.After
public void destroy() throws Exception {
//提交事務
sqlSession.commit();
//6.釋放資源
sqlSession.close();
in.close();
}
/**
* 測試查詢所有
* @throws Exception
*/
@org.junit.Test
public void testFindAll() {
//5.執行查詢所有方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
/**
* 測試儲存操作
*/
@org.junit.Test
public void testSave() {
User user = new User();
user.setUsername("Tom");
System.out.println("儲存操作之前:" + user);
//5.執行儲存方法
userDao.saveUser(user);
System.out.println("儲存操作之後:" + user);
}
/**
* 測試更新操作
*/
@org.junit.Test
public void testUpdate() {
User user = new User();
user.setId(3);
user.setUsername("Jerry");
//5.執行更新方法
userDao.updateUser(user);
}
/**
* 測試刪除操作
*/
@org.junit.Test
public void testDelete() {
//5.執行刪除方法
userDao.deleteUser(3);
}
/**
* 測試根據id查詢操作
*/
@org.junit.Test
public void testFindById() {
//5.執行根據id查詢使用者方法
User user = userDao.findById(1);
System.out.println(user);
}
/**
* 測試模糊查詢操作
*/
@org.junit.Test
public void testFindByName() {
//5.執行模糊查詢方法
List<User> users = userDao.findByName("%M%");
for (User user : users) {
System.out.println(user);
}
}
}