封面:洛小汐
做者:潘潘java
在理解中執行,在執行中理解,學習技術也循此道。mysql
上一篇文章 《Mybatis系列全解(二):Mybatis簡介與環境搭建》 ,咱們對 Mybatis 作了初步講解,並搭建了一套基本環境,共同完成了一次查詢操做。因此本篇文章咱們在此基礎上,繼續拓展了插入、修改、刪除三種操做,把咱們的CRUD基礎操做進行完善。git
一、Mybatis查詢操做回顧github
二、插入操做sql
三、修改操做數據庫
四、刪除操做apache
五、總結緩存
默認已安裝 Java 開發環境、Mysql數據庫、Maven 環境。微信
Mybatis 的查詢分爲7個步驟:session
一、建立 maven 工程
二、添加 MyBatis 倉庫座標(非maven項目則引入jar包)
三、建立user數據表
四、編寫User實體類
五、編寫映射文件UserMapper.xml
六、編寫核心文件SqlMapConfig.xml
七、編寫測試類
一、建立 maven 工程
二、添加 MyBatis 倉庫座標
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <!--mybatis座標--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mysql驅動座標--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> <scope>runtime</scope> </dependency> <!--單元測試座標--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--日誌座標--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> </dependencies>
三、建立user數據表
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `birthday` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
四、編寫User實體類
package com.panshenlian.pojo; /** * @Author: panshenlian * @Description: 用戶實體 * @Date: Create in 2:08 2020/11/28 */ public class User { private int id; private String username; private String password; private String birthday; public int getId() { return id; } public void setId(int 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; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", birthday='" + birthday + '\'' + '}'; } }
五、編寫映射文件UserMapper.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="userMapper"> <select id="findAll" resultType="com.panshenlian.pojo.User"> select * from User </select> </mapper>
六、編寫核心文件SqlMapConfig.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" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <mapper resource="/UserMapper.xml" /> </mappers> </configuration>
七、編寫測試類
package com.panshenlian.service; import com.panshenlian.pojo.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 org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; /** * @Author: panshenlian * @Description: 體驗測試類 * @Date: Create in 2:21 2020/11/28 */ public class MybatisTest { @Test public void testQueryUser01() throws IOException { //加載核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 得到sqlSession工廠對象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //得到sqlSession對象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 執行sql語句 List<User> userList = sqlSession.selectList("userMapper.findAll"); // 打印結果 for (User user : userList) { System.out.println(user); } // 釋放資源 sqlSession.close(); } }
最終經過 Junit 單元測試,運行結果符合預期:
工程結構參考:
Mybatis的插入數據操做,咱們一共須要兩步:
<!-- 插入用戶操做 --> <insert id="insertUser" parameterType="com.panshenlian.pojo.User" > insert into user(username,password,birthday) values ( #{username}, #{password},#{birthday}) </insert>
@Test public void testInsertUser01() throws IOException { //加載核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 得到sqlSession工廠對象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //得到sqlSession對象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 準備插入數據庫的對象 User insertUser = new User(); insertUser.setBirthday("2020-12-01"); insertUser.setUsername("panpan"); insertUser.setPassword("888"); // 執行sql語句 int rows = sqlSession.insert("userMapper.insertUser",insertUser); // 打印結果 System.out.println(rows); // 提交事務 sqlSession.commit(); // 釋放資源 sqlSession.close(); }
注意:當 sqlSession 執行插入、更新、刪除操做時,須要提交事務,若是 openSession() 的時候使用無參構造函數,那麼須要手動調用 commit() 進行事務提交,對應的插入、更新、刪除操做才最終執行成功,若是是使用 openSession(true) 來打開session ,那麼則表示事務自動提交,無需手工再調用 commit() 。
插入操做時,在映射文件中咱們沒有配置 resultType參數,即返回結果類型咱們沒有配置,Mybatis 默認返回 int 類型,表示插入操做影響的記錄數。
上例插入操做執行結果爲:1 ,表示插入成功,影響記錄數量爲1條。
插入操做注意問題
一、插入語句使用 insert 標籤
二、在映射文件中使用 parameterType 屬性指定要插入的數據類型
三、Sql語句中使用#{實體屬性名}方式引用實體中的屬性值
四、插入操做使用的API是sqlSession.insert(「命名空間.id」,實體對象);
五、插入操做涉及數據庫數據變化,因此要使用sqlSession對象顯示的提交事務,即sqlSession.commit()
Mybatis的修改數據操做,同插入操做,也是須要兩步:
<!-- 修改用戶操做 --> <insert id="updateUser" parameterType="com.panshenlian.pojo.User" > update user set username =#{username} where id = #{id} </insert>
@Test public void testUpdateUser01() throws IOException { //加載核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 得到sqlSession工廠對象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //得到sqlSession對象 SqlSession sqlSession = sqlSessionFactory.openSession(); User updateUser = new User(); updateUser.setUsername("新的用戶名PanPan"); updateUser.setId(1); // 執行sql語句 int rows = sqlSession.update("userMapper.updateUser",updateUser); // 打印結果 System.out.println(rows); // 提交事務 sqlSession.commit(); // 釋放資源 sqlSession.close(); }
執行結果以下,成功修改 id =1 的數據記錄,新用戶名爲 新的用戶名PanPan
修改操做注意問題
一、修改語句使用update標籤
二、修改操做使用的API是sqlSession.update(「命名空間.id」,實體對象);
Mybatis的刪除數據操做,同以上插入與修改操做,也是須要兩步:
<!-- 刪除用戶操做 --> <insert id="deleteUser" parameterType="com.panshenlian.pojo.User" > delete from user where id=#{id} and username = #{username} </insert>
@Test public void testDeleteUser01() throws IOException { //加載核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 得到sqlSession工廠對象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //得到sqlSession對象 SqlSession sqlSession = sqlSessionFactory.openSession(); User deleteUser = new User(); deleteUser.setUsername("新的用戶名PanPan"); deleteUser.setId(1); // 執行sql語句 int rows = sqlSession.delete("userMapper.deleteUser",deleteUser); // 打印結果 System.out.println(rows); // 提交事務 sqlSession.commit(); // 釋放資源 sqlSession.close(); }
執行結果以下,成功刪除 id =1 ,username=新的用戶名PanPan的數據記錄。
刪除操做注意問題
一、刪除語句使用 delete 標籤
二、Sql語句中使用#{實體屬性名}引用傳遞的對象屬性
三、刪除操做使用的API是sqlSession.delete(「命名空間.id」,Object);
刪除操做也能夠經過執行id的方式進行刪除,例如在映射文件中把參數設置爲parameterType="java.lang.Integer",實際 API 是sqlSession.delete("命名空間.id",1);
咱們經過本文介紹,基本掌握了 Mybatis 最基礎的 CRUD 操做,後續,咱們逐步深刻。
本篇完,本系列下一篇咱們講《 Mybatis系列全解(四):XML配置文件與API介紹 》。
BIU ~ 文章持續更新,微信搜索「潘潘和他的朋友們」第一時間閱讀,隨時有驚喜。本文會在 GitHub https://github.com/JavaWorld 收錄,熱騰騰的技術、框架、面經、解決方案,咱們都會以最美的姿式第一時間送達,歡迎 Star。