MyBatis入門教程(基于Mybatis3.2)

?

MyBatis和Hibernate一樣都是基于ORM的關系型數據庫框架

ORM工具的基本思想:

1.從配置文件(通常是XML配置文件中)得到 sessionfactory. 2. sessionfactory?產生 session 3. session中完成對數據的增刪改查和事務提交等. 4. 在用完之后關閉session

5.java對象和數據庫之間有做mapping的配置文件,也通常是xml文件。

?

?

MyBatis 是支持 普通 SQL 查詢 , 存儲過程 和 高級映射 的優秀持久框架。MyBatis 消除了幾乎所有的 JDBC 代碼和參數的手工設置以及對結果集的檢索封裝。

?

本文就一個demo的形式,講訴MyBatis的數據庫操作過程,新建一個web項目,項目結構如圖:

我們需要準備mybatis3.2.jar和mysql的jar,日志輸出的jar根據自己項目的需要

?

?

新建數據庫,數據表是users,設置id為主鍵,同時自動增長

?

?

新建一個資源文件config

編寫數據庫配置信息文件db.properties:

driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/db_mysql?useUnicode\=true&characterEncoding\=utf-8
username=root
password=111

?

?

?

編寫pojo類:

package com.mybatis.entity;public class User {/** ID*/private int id;/** 用戶姓名 */private String name;/** age*/private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", age=" + age + "]";}}

?

?

?

編寫pojo類對應的mapper文件:

<?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,namespace的值習慣上設置成包名+sql映射文件名,這樣就能夠保證namespace的值是唯一的 
-->
<mapper namespace="com.mybatis.mapper.userMapper"><!-- 在select標簽中編寫查詢的SQL語句, 設置select標簽的id屬性為findById,id屬性值必須是唯一的,不能夠重復parameterType可以在MyBatis的配置文件里設置,也可以直接用包名+類名--><insert id="save" parameterType="User">insert into users(id,name,age) value(#{name},#{age})</insert><update id="update" parameterType="User">update users set name=#{name},age=#{age} where id=#{id}</update><delete id="delete" parameterType="int">delete from users where id=#{id}</delete><select id="findById" parameterType="int" resultType="User">select * from users where id=#{id}</select><select id="findAll" resultType="User">select * from users</select>
</mapper>

?

?

然后,在編寫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" />  <!-- 實體類,簡稱 -設置別名 --><typeAliases><typeAlias alias="User" type="com.mybatis.entity.User" /></typeAliases><!-- 讀取db.properties里的數據,進行數據庫配置 --><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}" /><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><!-- 注冊userMapper.xml文件 --><mappers><mapper resource="com/mybatis/mapper/userMapper.xml"/></mappers></configuration>

?

?

測試類:

import java.io.Reader;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 com.mybatis.entity.User;public class Test {public static void main(String[] args) {String resource = "mybatis-config.xml";try{//加載Mybatis的配置文件Reader reader = Resources.getResourceAsReader(resource);//構建sqlSession的工廠SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//創建可以執行sql的SqlSessionSqlSession session = sessionFactory.openSession();//映射sql的標志字符串String statement = "com.mybatis.mapper.userMapper.findById";//執行查詢返回id為1的User對象User user = session.selectOne(statement,1);System.out.println(user);}catch (Exception e) {e.printStackTrace();}}
}

然后,可以編寫日志文件,進行日志輸出

log4j.properties\uFF0C
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

運行測試類,可以輸出,說明我們的mybatis搭建好了,可以進行數據庫操作

?

?

需要注意的:

為了統一編碼,建議新建數據庫時設置成utf-8的

還有測試時,那個id一定要和userMapper.xml里的id對應,mybatis是根據這個id調用sql函數的哦

配置mybatis文件時,一定要注意順序,一般都是先配置別、數據庫配置、然后mapper文件注冊的

?

?

轉載于:https://www.cnblogs.com/mzq123/p/5450632.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271855.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271855.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271855.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

程序員效率:畫流程圖常用的工具

1、VisioVisio是Windows操作系統下運行的流程圖和矢量繪圖軟件&#xff0c;它屬于Office辦公軟件的一部分。特點&#xff1a;內置大量的模板方便使用&#xff0c;界面簡潔操作方便&#xff0c;功能十分全面&#xff0c;因為屬于office系列可以很方便和word辦公軟件結合起來使用…

如何實現數組和 List 之間的轉換?

數組轉 List&#xff1a;使用 Arrays. asList() 進行轉換。 List 轉數組&#xff1a;使用 List 自帶的 toArray() 方法

java同事不寫泛型_跳了一次JAVA泛型擦除的坑

記錄一下今天在幫同事解決使用spring參數注入問題的時候由于對泛型的理解不到位而遇到的坑。如下代碼所示&#xff1a;RequestMapping(value"saveAll")public ResponseMsg saveAll(List rules){Rule rulerules.get(0); //這行代碼在測試的時候報錯了......}這段代碼的…

程序員職場:擁有一個學位將會在你的職業生涯中更加順利!

1、作為程序員為什么要擁有學位&#xff1f;很多情況下&#xff0c;作為程序員&#xff0c;學位是進入大公司的敲門磚。現在很多大的科技公司&#xff0c;學位是硬性要求。一般都是本科以上的學歷&#xff0c;甚至有的必須是碩士以上學歷。如果你的學歷達不到&#xff0c;基本上…

集合和數組的區別

集合和數組的區別 數組是固定長度的&#xff1b;集合可變長度的。 數組可以存儲基本數據類型&#xff0c;也可以存儲引用數據類型&#xff1b;集合只能存儲引用數據類型。 數組存儲的元素必須是同一個數據類型&#xff1b;集合存儲的對象可以是不同數據類型。

程序員常見的職業病有哪些?

程序員是一個久坐的行業&#xff0c;基本上一天有十幾個小時需要坐在電腦旁邊&#xff0c;隨之而來會給我們這些廣大的程序員朋友們身體健康帶來了很大的隱患。作為一名優秀的程序員&#xff0c;愛護自己的身體也是非常重要的&#xff0c;畢竟身體是革命的本錢嘛。今天主要給大…

java文件流null_JAVA 獲取資源文件對象為NULL

今天&#xff0c;寫一個添加背景音樂的方法時&#xff0c;在導入當前文件夾下的音樂時中始終出現,以下的異常&#xff0c;Exception in thread "main" java.lang.NullPointerException文件存儲位置存放在當前的modlue目錄下,格式為wav.源代碼private void playBGM(){…

iOS數據持久化

TODO&#xff1a;數據持久化 CoreData FMDB Sqlite3 歸檔解檔 plist NSUserDefault轉載于:https://www.cnblogs.com/newhope/p/5382034.html

程序員如何快速消除自己的知識短板?

在程序員的職業生涯當中&#xff0c;知識短板將會是你職業生涯發展的瓶頸。只要你能夠消除這些短板&#xff0c;這對你的職業發展會大有裨益。本篇文章主要給大家分享一下如何解決自己工作當中的知識短板。希望對大家能有些幫助。1、關于知識短板的概念理解我個人認為所謂的知識…

HashMap默認大小和擴容后的大小

put添加的元素Entry就是數組中的元素&#xff0c;每個Map.Entry其實就是一個key-value對&#xff0c;它持有一個指向下一個元素的引用&#xff0c;這就構成了鏈表。 創建HashMap對象默認情況下&#xff0c;數組大小為16。 開始擴容的大小原來的數組大小*loadFactor。 擴容后…

swift函數

1、函數定義格式&#xff1a;func 函數名(形參列表) ->返回值類型{//函數體}形參列表的格式&#xff1a;形參名1&#xff1a;形參類型&#xff0c;形參名2&#xff1a;形參類型&#xff0c;....如&#xff1a;func max(nun:Int, num:Int) ->Int{return 0;}2、無返回值的…

java 解密后為空_java RSA加密解密

該工具類中用到了BASE64&#xff0c;需要借助第三方類庫&#xff1a;javabase64-1.3.1.jar注意&#xff1a;RSA加密明文最大長度117字節&#xff0c;解密要求密文最大長度為128字節&#xff0c;所以在加密和解密的過程中需要分塊進行。RSA加密對明文的長度是有限制的&#xff0…

程序員效率:職業倦怠的理解

作為程序員保持高效的工作效率最大的挑戰之一就是身體和心理上產生的倦怠。這個是非常常見的&#xff0c;比如剛開始你自己做一個新項目的時候&#xff0c;項目剛開始&#xff0c;我們總是充滿激情、精力旺盛。大多數情況隨著時間的推移&#xff0c;我們的激情慢慢減退&#xf…

OnItemClickListener,OnScrollListener應用

OnItemClickListener&#xff1a;處理視圖中單個條目的點擊事件 OnScrollListener:監聽滾動的變化&#xff0c;可以用于視圖在滾動中加載數據 OnItemClickListener&#xff1a;實現AdapterView.OnItemClickListener接口&#xff0c;別忘記在MainActivity中調用listView.setOnIt…

Mysql 多實例multi_mysqld_multi多實例運行

mysqld_multi多實例運行2016-05-04 TsengYia126.com http://tsengyia.blog.chinaunix.net#################################################################系統環境&#xff1a;RHEL 6.7 [2.6.32-573.el6.x86_64]軟件環境&#xff1a;mysql-server-5.1.73-5.el6_6.x86_64m…

HashMap和ArrayList初始大小和擴容后的大小

創建HashMap對象默認情況下&#xff0c;數組大小為16。 開始擴容的大小原來的數組大小*loadFactor。 擴容后大小是原來的2倍&#xff0c;其中加載因子loadFactor的默認值為0.75&#xff0c;這個參數可以再創建對象時在構造方法中指定。 例如&#xff1a; 16*0.7512&#xf…

程序員效率:如何合理的分解任務

有這樣一句名言&#xff1a;要吃掉一頭大象&#xff0c;每次吃一口。—— 克雷頓艾布拉姆斯&#xff08;Creighton Abrams&#xff09;這句名言給我們的啟示就是&#xff1a;看起來非常艱巨的任務&#xff0c;不能一蹴而就&#xff0c;需要進行任務分解&#xff0c;一步一步把它…

linux安裝nagios客戶端

( 安裝到 被監控的機器上)新增用戶和組 useradd nagiosgroupadd nagcmd usermod -a -G nagcmd nagios (如果安裝中報沒有c編譯器&#xff0c;就 yum install gcc) 下載nagios插件 wget http://sourceforge.net/projects/nagiosplug/files/nagiosplug/1.4.15/nagios-plugins-1.4…

鍵值的 key 和 value 允許為null嗎

總結&#xff1a; HashMap對象的key、value值均可為null。HahTable對象的key、value值均不可為null。兩者的的key值均不能重復&#xff0c;若添加key相同的鍵值對&#xff0c;后面的value會自動覆蓋前面的value&#xff0c;但不會報錯。 例子 可以看到添加key相同的鍵值對&am…

程序員:你的業余時間是怎么被浪費掉的?

作為一名程序員如何有效的管理自己的業余時間&#xff0c;會成為和別人拉開差距的重要因素。當然你不能把每天的每一分鐘都充分利用起來。這個目標不可能實現。我們可以做到的是找到自己在哪一方面浪費的時間最多&#xff0c;然后逐漸的去消除它。如果你可以消除掉一到兩個方面…