mybatis 基礎詳解
阿新 • • 發佈:2017-12-27
batis 添加用戶 主鍵 actor cor @override iba 基本功 ide
轉 https://www.cnblogs.com/Mr-Kenson/p/8124680.html
mybatis 是一個開源的 用於對數據庫操作的框架, 讀者基本都大體了解其基本功能, 我就不多解釋了 直接上demo吧。
我用的是maven管理包, 如下
<dependencies> <dependency> <groupId>org.springFramework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.8.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.4</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>3.3.1</version> </dependency> </dependencies>
如果不是用的maven管理包, 也可以找下列包進行導入, 一下是javaWeb項目的目錄結構,在這裏我主要是用maven來做,其實都一樣的。
導好包之後呢,我們就要開始做mybatis項目了。
-- 1:在src下寫入配置文件sqlMapConfig.xml,可以參照下方
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 屬性定義 加載一個properties文件 在 properties標簽 中配置屬性值 --> <properties resource="db.properties"> <!-- <property name="" value=""/> --> </properties> <!-- 定義 別名 --> <typeAliases> <!-- 單個別名的定義 alias:別名,type:別名映射的類型 --> <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> --> <!-- 批量別名定義 指定包路徑,自動掃描包下邊的pojo,定義別名,別名默認為類名(首字母小寫或大寫) --> <package name="cn.itcast.mybatis.po"/> </typeAliases> <!-- 和spring整合後 environments配置將廢除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理--> <transactionManager type="JDBC" /> <!-- 數據庫連接池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!--加載mapper映射 如果將和spring整合後,可以使用整合包中提供的mapper掃描器,此處的mappers不用配置了。 --> <mappers> <!-- 通過resource引用mapper的映射文件 --> <mapper resource="sqlmap/User.xml" /> <!-- <mapper resource="mapper/UserMapper.xml" /> --> <!-- 通過class引用mapper接口 class:配置mapper接口全限定名 要求:需要mapper.xml和mapper.java同名並且在一個目錄 中 --> <!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> --> <!-- 批量mapper配置 通過package進行自動掃描包下邊的mapper接口, 要求:需要mapper.xml和mapper.java同名並且在一個目錄 中 --> <package name="cn.itcast.mybatis.mapper"/> </mappers> </configuration>
-- 2: 配置完sqlMapConfig之後我們就先把實體類弄好吧。 src下創建一個實體類
import java.util.Date; public class User { private Integer id; private String username; private String sex; private Date birthday; private String address; 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 getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address + "]"; } }
-- 3: 然後我們就開始寫映射文件了
<?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"> <!-- nameSpace 命名空間為了對sql進行隔離, 方便管理 後面 這個屬性值有其他的作用 --> <mapper namespace="test"> <!-- id 唯一標識 標識一個statement 我們將select、 insert... 稱為statement #{id} : 標識一個占位符 如果#{}要傳入一個簡單類型(基本類型), {}中的值 任意 parameterType : 是參數的類型 通過#{} 來接受ParamterType輸入參數 resultType: 結果類型: 指定映射的單條記錄 javabean 類型 --> <select id="findUserById" parameterType="int" resultType="com.weibang.mybatis.beans.User"> SELECT * FROM user WHERE id=#{id} </select> <!-- 根據用戶名模糊稱來查詢數據 ${} 標識sql的的拼接, 通過這個東西修飾的, 會不加任何修飾拼接在sql中 --> <select id="findUserByName" parameterType="String" resultType="com.weibang.mybatis.beans.User"> SELECT * FROM user WHERE username LIKE ‘%${value}%‘ </select> <!-- 添加用戶 接受簡單參數(基本類型)的時候 名字隨意, 接受引用類型的時候,名字要與javabean類型一致 --> <insert id="InsertUser" parameterType="com.weibang.mybatis.beans.User"> <!-- 需求: User 對象插入到數據中之後, 新記錄的主鍵要通過User對象返回,通過user獲取主鍵值 裏面定義了獲取主鍵的sql, 當 Insert語句執行完之後,就會執行selectKey中的東西,就能獲取自增的主鍵 order:用來確定什麽時候進行獲取主鍵 兩個值, 一個befer 一個after keyProperty: 要將主鍵值付給哪個屬性 resultType: SELECT LAST_INSERT_ID() 的結果類型 為int 所以填int就可以了 --> <selectKey keyProperty="id" order="AFTER" resultType="int"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO user (username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address}) </insert> <!-- mysql 的UUID生成主鍵 <insert id="InsertUser" parameterType="com.weibang.mybatis.beans.User"> <selectKey keyProperty="id" order="AFTER" resultType="String"> SELECT UUID() </selectKey> INSERT INTO user (username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address}) </insert> --> <!-- 用戶刪除 --> <delete id="deleteUser" parameterType="int"> delete from user where id = #{id} </delete> <!-- 用戶更新 要求: 要求傳入的user中必須要包括一個id 如果沒有id 那麽就全部更新了 --> <update id="updateUser" parameterType="com.weibang.mybatis.beans.User"> update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id = #{id} </update> </mapper>
-- 4: 映射文件寫好了之後, 我們其實就可以進行測試了, 我們這裏用的是junit測試
import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; 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; import org.junit.Before; import org.junit.Test; import com.weibang.mybatis.beans.User; public class First_test { private SqlSessionFactory sqlsessionFactory; // 創建會話工廠 @Before public void init() throws IOException { // 創建會話工廠 // 配置文件(sqlMapConfig.xml) String resource = "SqlMapConfig.xml"; // 將配置文件加載到輸入流中 InputStream inputStream = Resources.getResourceAsStream(resource); // 創建會話工廠 sqlsessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testFindById() { // 通過sqlsessionFactory來創建sqlsession SqlSession sqlsession = sqlsessionFactory.openSession(); // 第一個參數: statement的位置,等於namespace+statement的ID // 第二個參數: 傳入的參數 User user = null; try { user= sqlsession.selectOne("test.findUserById", 1); }catch(Exception e) { e.printStackTrace(); } finally { // 關閉sqlsession sqlsession.close(); } System.out.println(user); } /**測試: 根據名字模糊查詢*/ @Test public void testFindByName()throws Exception { SqlSession sqlsession = sqlsessionFactory.openSession(); List<User> user = null; try { user = sqlsession.selectList("test.findUserByName", "小明"); }catch(Exception e) { e.printStackTrace(); } finally { sqlsession.close(); } System.out.println(user); } /** * mybatis 插入 並且獲取插入的主鍵值 */ @Test public void testInsertUser() { SqlSession sqlsession = sqlsessionFactory.openSession(); User user = new User(); user.setUsername("kenson2"); user.setBirthday(new Date()); user.setSex("1"); user.setAddress("江西南昌"); int a = 0; try { a= sqlsession.insert("test.InsertUser", user); }catch(Exception e) { e.printStackTrace(); } finally { sqlsession.commit(); sqlsession.close(); } System.out.println("受影響的行數:"+a); System.out.println("返回的主鍵值 "+user.getId()); } /** * 測試 根據id刪除用戶 */ @Test public void testDelete() { SqlSession sqlsession = sqlsessionFactory.openSession(); int row=0; try { row =sqlsession.delete("test.deleteUser", 31); sqlsession.commit(); } catch (Exception e) { // TODO: handle exception }finally { sqlsession.close(); } System.out.println("已經刪除的行數:"+row); } /** * 測試更新操作 */ @Test public void testUpdate() { SqlSession sqlsession = sqlsessionFactory.openSession(); User user = new User(); user.setId(32); user.setUsername("kangcheng"); user.setBirthday(new Date()); user.setSex("1"); user.setAddress("福建"); int row =0; try { row= sqlsession.update("test.updateUser", user); sqlsession.commit(); } catch (Exception e) { // TODO: handle exception }finally { sqlsession.close(); } System.out.println("已經更新了:"+row+"行"); } }
OK 到這裏 我們mybatis的簡單增刪查改就已經完成了, 對了 數據庫要自己建表哦。
mybatis 基礎詳解