Mybatis實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例(CRUD)
什么是 MyBatis?
MyBatis 是支持普通 SQL 查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。 MyBatis 消除了幾乎所有的 JDBC 代碼和參數(shù)的手工設(shè)置以及對(duì)結(jié)果集的檢索。MyBatis 可以使用簡(jiǎn)單的XML 或注解用于配置和原始映射,將接口和 Java 的 POJO(Plain Old Java Objects,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。
MyBatis下載:https://github.com/mybatis/mybatis-3/releases
Mybatis實(shí)例
對(duì)一個(gè)User表的CRUD操作:
User表:
-- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', 'summer', '30', 'shanghai'); INSERT INTO `user` VALUES ('2', 'test2', '22', 'suzhou'); INSERT INTO `user` VALUES ('3', 'test1', '29', 'some place'); INSERT INTO `user` VALUES ('4', 'lu', '28', 'some place'); INSERT INTO `user` VALUES ('5', 'xiaoxun', '27', 'nanjing');
在Src目錄下建一個(gè)mybatis的xml配置文件Configuration.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> <!-- mybatis別名定義 --> <typeAliases> <typeAlias alias="User" type="com.mybatis.test.User"/> </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://127.0.0.1:3306/mybatis" /> <property name="username" value="root"/> <property name="password" value="admin"/> </dataSource> </environment> </environments> <!-- mybatis的mapper文件,每個(gè)xml配置文件對(duì)應(yīng)一個(gè)接口 --> <mappers> <mapper resource="com/mybatis/test/User.xml"/> </mappers> </configuration>
定義User mappers的User.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="com.mybatis.test.IUserOperation"> <!-- select語(yǔ)句 --> <select id="selectUserByID" parameterType="int" resultType="User"> select * from `user` where user.id = #{id} </select> <!-- 定義的resultMap,可以解決類(lèi)的屬性名和數(shù)據(jù)庫(kù)列名不一致的問(wèn)題--> <!-- <resultMap type="User" id="userResultMap"> <id property="id" column="user_id" /> <result property="userName" column="user_userName" /> <result property="userAge" column="user_userAge" /> <result property="userAddress" column="user_userAddress" /> </resultMap> --> <!-- 返回list的select語(yǔ)句,注意 resultMap的值是指向前面定義好的 --> <!-- <select id="selectUsersByName" parameterType="string" resultMap="userResultMap"> select * from user where user.userName = #{userName} </select> --> <select id="selectUsersByName" parameterType="string" resultType="User"> select * from user where user.userName = #{userName} </select> <!--執(zhí)行增加操作的SQL語(yǔ)句。id和parameterType分別與IUserOperation接口中的addUser方法的名字和參數(shù)類(lèi)型一致。 useGeneratedKeys設(shè)置為"true"表明要MyBatis獲取由數(shù)據(jù)庫(kù)自動(dòng)生成的主鍵;keyProperty="id"指定把獲取到的主鍵值注入到User的id屬性--> <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into user(userName,userAge,userAddress) values(#{userName},#{userAge},#{userAddress}) </insert> <update id="updateUser" parameterType="User" > update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id} </update> <delete id="deleteUser" parameterType="int"> delete from user where id=#{id} </delete> </mapper>
配置文件實(shí)現(xiàn)了接口和SQL語(yǔ)句的映射關(guān)系。selectUsersByName采用了2種方式實(shí)現(xiàn),注釋掉的也是一種實(shí)現(xiàn),采用resultMap可以把屬性和數(shù)據(jù)庫(kù)列名映射關(guān)系定義好,property為類(lèi)的屬性,column是表的列名,也可以是表列名的別名!
User類(lèi)的定義:
package com.mybatis.test; public class User { private int id; private String userName; private int userAge; private String userAddress; 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 int getUserAge() { return userAge; } public void setUserAge(int userAge) { this.userAge = userAge; } public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this.userAddress = userAddress; } @Override public String toString(){ return this.userName+" "+this.userAge+" "+this.userAddress; } }
IUserOperaton定義:
package com.mybatis.test; import java.util.List; public interface IUserOperation { public User selectUserByID(int id); public List<User> selectUsersByName(String userName); public void addUser(User user); public void updateUser(User user); public void deleteUser(int id); }
IUserOperation為操作接口,函數(shù)名和mybatis的xml配置文件中的操作id名對(duì)應(yīng)。
測(cè)試類(lèi)Test:
package com.mybatis.test; import java.io.Reader; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class Test { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader("Configuration.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlSessionFactory getSession() { return sqlSessionFactory; } public void getUserByID(int userID) { SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session .getMapper(IUserOperation.class); User user = userOperation.selectUserByID(userID); if (user != null) { System.out.println(user.getId() + ":" + user.getUserName() + ":" + user.getUserAddress()); } } finally { session.close(); } } public void getUserList(String userName) { SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session .getMapper(IUserOperation.class); List<User> users = userOperation.selectUsersByName(userName); for (User user : users) { System.out.println(user.getId() + ":" + user.getUserName() + ":" + user.getUserAddress()); } } finally { session.close(); } } /** * 增加后要commit */ public void addUser() { User user = new User(); user.setUserAddress("place"); user.setUserName("test_add"); user.setUserAge(30); SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session .getMapper(IUserOperation.class); userOperation.addUser(user); session.commit(); System.out.println("新增用戶(hù)ID:" + user.getId()); } finally { session.close(); } } /** * 修改后要commit */ public void updateUser() { SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session .getMapper(IUserOperation.class); User user = userOperation.selectUserByID(1); if (user != null) { user.setUserAddress("A new place"); userOperation.updateUser(user); session.commit(); } } finally { session.close(); } } /** * 刪除后要commit. * * @param id */ public void deleteUser(int id) { SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session .getMapper(IUserOperation.class); userOperation.deleteUser(id); session.commit(); } finally { session.close(); } } public static void main(String[] args) { try { Test test = new Test(); // test.getUserByID(1); // test.getUserList("test1"); // test.addUser(); // test.updateUser(); // test.deleteUser(6); } catch (Exception e) { System.out.println(e.getMessage()); } } }
代碼下載:MyBaitsSimpleDemo_jb51.rar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Mybatis實(shí)現(xiàn)增刪改查(CRUD)實(shí)例代碼
- Spring Boot整合Mybatis并完成CRUD操作的實(shí)現(xiàn)示例
- Spring boot整合Mybatis實(shí)現(xiàn)級(jí)聯(lián)一對(duì)多CRUD操作的完整步驟
- 基于Mybatis-Plus的CRUD的實(shí)現(xiàn)
- MyBatis Plus配置日志CRUD的使用詳解
- MybatisPlus,無(wú)XML分分鐘實(shí)現(xiàn)CRUD操作
- Mybatis-Plus 通用CRUD的詳細(xì)操作
- mybatisplus?復(fù)合主鍵(多主鍵)?CRUD示例詳解
- MyBatis實(shí)現(xiàn)CRUD的示例代碼
相關(guān)文章
Java SMM框架關(guān)聯(lián)關(guān)系映射示例講解
SSM框架是spring MVC ,spring和mybatis框架的整合,是標(biāo)準(zhǔn)的MVC模式,將整個(gè)系統(tǒng)劃分為表現(xiàn)層,controller層,service層,DAO層四層,使用spring MVC負(fù)責(zé)請(qǐng)求的轉(zhuǎn)發(fā)和視圖管理,spring實(shí)現(xiàn)業(yè)務(wù)對(duì)象管理,mybatis作為數(shù)據(jù)對(duì)象的持久化引擎2022-08-08解決HttpServletResponse和HttpServletRequest取值的2個(gè)坑
這篇文章主要介紹了解決HttpServletResponse和HttpServletRequest取值的2個(gè)坑問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Java實(shí)現(xiàn)LRU緩存的實(shí)例詳解
這篇文章主要介紹了Java實(shí)現(xiàn)LRU緩存的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-08-08SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)和異步調(diào)用
這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)和異步調(diào)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04