您好,登錄后才能下訂單哦!
1.MyBatis是什么?
MyBatis是一個支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數據庫中的記錄。MyBatis讓程序員將主要精力放在sql上,通過MyBatis提供的映射方式,自由靈活生成(半自動化,大部分需要程序員編寫sql)滿足需要sql語句。
2.MyBatis的框架結構
3.MyBatis的配置文件
<?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> <!-- 加載屬性文件 --> <properties resource="db.properties"> <!--properties中還可以配置一些屬性名和屬性值 --> <!-- <property name="jdbc.driver" value=""/> --> </properties> <!-- 全局配置參數,需要時再設置 --> <!-- <settings> </settings> --> <!-- 別名定義 --> <typeAliases> <!-- 針對單個別名定義 type:類型的路徑 alias:別名 --> <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> --> <!-- 批量別名定義 指定包名,mybatis自動掃描包中的po類,自動定義別名,別名就是類名(首字母大寫或小寫都可以) --> <package name="cn.itcast.mybatis.po"/> </typeAliases> <!-- 和spring整合后 environments配置將廢除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理,事務控制由mybatis--> <transactionManager type="JDBC" /> <!-- 數據庫連接池,由mybatis管理--> <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> <!-- 加載 映射文件 --> <mappers> <mapper resource="sqlmap/User.xml"/> <!--通過resource方法一次加載一個映射文件 --> <!-- <mapper resource="mapper/UserMapper.xml"/> --> <!-- 通過mapper接口加載單個 映射文件 遵循一些規范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個目錄 中 上邊規范的前提是:使用的是mapper代理方法 --> <!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> --> <!-- 批量加載mapper 指定mapper接口的包名,mybatis自動掃描包下邊所有mapper接口進行加載 遵循一些規范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個目錄 中 上邊規范的前提是:使用的是mapper代理方法 --> <package name="cn.itcast.mybatis.mapper"/> </mappers> </configuration>
4.映射文件
<?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進行分類化管理,理解sql隔離 注意:使用mapper代理方法開發,namespace有特殊重要的作用 --> <mapper namespace="test"> <!-- 在 映射文件中配置很多sql語句 --> <!-- 需求:通過id查詢用戶表的記錄 --> <!-- 通過 select執行數據庫查詢 id:標識 映射文件中的 sql 將sql語句封裝到mappedStatement對象中,所以將id稱為statement的id parameterType:指定輸入 參數的類型,這里指定int型 #{}表示一個占位符號 #{id}:其中的id表示接收輸入 的參數,參數名稱就是id,如果輸入 參數是簡單類型,#{}中的參數名可以任意,可以value或其它名稱 resultType:指定sql輸出結果 的所映射的java對象類型,select指定resultType表示將單條記錄映射成的java對象。 --> <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User"> SELECT * FROM USER WHERE id=#{value} </select> <!-- 根據用戶名稱模糊查詢用戶信息,可能返回多條 resultType:指定就是單條記錄所映射的java對象 類型 ${}:表示拼接sql串,將接收到參數的內容不加任何修飾拼接在sql中。 使用${}拼接sql,引起 sql注入 ${value}:接收輸入 參數的內容,如果傳入類型是簡單類型,${}中只能使用value --> <select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User"> SELECT * FROM USER WHERE username LIKE '%${value}%' </select> <!-- 添加用戶 parameterType:指定輸入 參數類型是pojo(包括 用戶信息) #{}中指定pojo的屬性名,接收到pojo對象的屬性值,mybatis通過OGNL獲取對象的屬性值 --> <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"> <!-- 將插入數據的主鍵返回,返回到user對象中 SELECT LAST_INSERT_ID():得到剛insert進去記錄的主鍵值,只適用與自增主鍵 keyProperty:將查詢到主鍵值設置到parameterType指定的對象的哪個屬性 order:SELECT LAST_INSERT_ID()執行順序,相對于insert語句來說它的執行順序 resultType:指定SELECT LAST_INSERT_ID()的結果類型 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address}) <!-- 使用mysql的uuid()生成主鍵 執行過程: 首先通過uuid()得到主鍵,將主鍵設置到user對象的id屬性中 其次在insert執行時,從user對象中取出id屬性值 --> <!-- <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> SELECT uuid() </selectKey> insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address}) --> </insert> <!-- 刪除 用戶 根據id刪除用戶,需要輸入 id值 --> <delete id="deleteUser" parameterType="java.lang.Integer"> delete from user where id=#{id} </delete> <!-- 根據id更新用戶 分析: 需要傳入用戶的id 需要傳入用戶的更新信息 parameterType指定user對象,包括 id和更新信息,注意:id必須存在 #{id}:從輸入 user對象中獲取id屬性值 --> <update id="updateUser" parameterType="cn.itcast.mybatis.po.User"> update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id} </update> </mapper>
其中pojo對象的屬性為:
//屬性名和數據庫表的字段對應
private int id;
private String username;// 用戶姓名
private String sex;// 性別
private Date birthday;// 生日
private String address;// 地址
//以及屬性的get,set方法
5.使用方法
// mybatis配置文件 String resource = "SqlMapConfig.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); // 創建會話工廠,傳入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 通過工廠得到SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 通過SqlSession操作數據庫 // 第一個參數:映射文件中statement的id,等于=namespace+"."+statement的id // 第二個參數:指定和映射文件中所匹配的parameterType類型的參數 // sqlSession.selectOne結果 是與映射文件中所匹配的resultType類型的對象 // selectOne查詢出一條記錄 User user = sqlSession.selectOne("test.findUserById", 1); System.out.println(user); // 釋放資源 sqlSession.close();
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。