1.核心配置文件mybatis-config.xml
配置一些共用的全局配置東西
數據源,緩存,日誌,配置mapper文件路徑,等等
2.映射文件XXXMapper.xml
配置sql語句,輸入參數類型 返回結果集類型
3.SqlSessinoFactory(會話工廠)
經過加載核心配置文件的內容來建立會話(sqlSession)
4.sqlSession(會話)
經過會話中的方法來調用映射文件中的sql語句,就至關於能夠執行sql語句
5.Executor執行器(MyBatis框架內部的東西,框架會自動調用)
分基本執行器和緩衝執行器
當咱們執行SqlSession的時候,框架內部就會自動調用Executor
6.MapperStatement:
內部封裝對象
抽取映射文件xml中的內容(本來是string字符串)
抽取當中的sql語句,參數 返回集 轉換成相對應的java對象java
入門案例:查詢表中的某條數據 mysql
1.導入jar包
2.配置核心配置文件
3.編寫pojo類
對應關係:
表------------類
字段----------屬性
記錄----------對象
固然類中有屬性相對應的get/set方法
4.配置映射文件
5.測試使用sql
主要有:數據庫
java鏈接數據庫的jar包 mybatis的包其依賴包(能夠去mybaits官網下載)apache
通常放置在src路徑下緩存
<?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> <!--<!–指定日誌的具體實現–>--> <!--<settings>--> <!--<setting name="logImp1" value="LOG4J"/>--> <!--</settings>--> <!--環境配置 鏈接的數據庫--> <environments default="mysql"> <environment id="mysql"> <!--指定事務管理類型 type="JDBC"指直接簡單使用了JDBC的提交和回滾設置--> <transactionManager type="JDBC"/> <!--數據源配置,POOLED是JDBC鏈接對象的數據源鏈接池的實現--> <!--企業開發中不能這個鏈接池--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatisday01"/> <property name="username" value="root"/> <property name="password" value="123456789+0"/> </dataSource> </environment> </environments> <!--mappers標籤用於告訴mybatis框架去哪裏找持久化類的映射文件--> <mappers> <mapper resource="com/kylin/mapper/UserMapper.xml"/> </mappers> </configuration>
對應關係:
表------------類
字段----------屬性
記錄----------對象
固然類中有屬性相對應的get/set方法session
package com.kylin.Pojo; import java.util.Date; public class User { private String id; //在樣例中時而是String,時而是int,記得根據需求改變 private String username; private Date birthday; private String sex; private String address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getId() { return id; } public void setId(String id) { this.id = id; } }
<?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是命名空間,是一個mapper映射文件的惟一標識符,爲了更好的定位 命名方式:包名+sql映射文件名 --> <mapper namespace="com.kylin.mapper.UserMapper"> <!-- id:該sql語句惟一標識符 parameterType:指定傳入參數類型 resuletType:返回結果集類型 #{} 佔位符 至關於jdbc中的? ~~若是傳入的是基本類型(long double int boolean.....)~~裏面的參數名能夠隨便取 可是比較合適的化,就是是什麼參數就寫什麼名 若是傳入的是String的花 裏面的取值應該是_parameter 好比下面的 id=${_parameter} --> <!--查詢單條記錄--> <!--注意: id屬性是String類型 --> <select id="findUserById" parameterType="java.lang.String" resultType="com.kylin.Pojo.User"> SELECT * FROM user WHERE id=${_parameter} </select> <!--select * from user where username like '%王%';--> <!--查詢符合條件的多個用戶 若是是返回的是集合,resultType中的類型是集合的反泛型具體指代的類型 ${} 拼接符 會有sql注入的風險 慎重使用 總結: = 用佔位符#{} like 用拼接符${} 裏面參數名必定要用value --> <!--查詢多條記錄--> <select id="findUserByUsername" parameterType="java.lang.String" resultType="com.kylin.Pojo.User"> select * from user where username like '%${value}%'; </select> <!--插入單條記錄--> <!--insert into user(id,username,birthday,sex,address)values("2","kengken",'2009-06-08 23:53:17',"男","廣州");--> <!-- 若是傳入的是javabean類型(pojo類型) 那麼佔位符#{}中的變量名必須對應 javabean中對應的屬性名 有時候須要返回數據庫自增主鍵,可使用mysql的函數:select LAST_INSERT_ID() --> <!--id屬性是int類型而且主鍵使用了auto_increment自增,使用mysql的LAST_INSERT_ID()--> <insert id="insertIntoUser" parameterType="com.kylin.Pojo.User"> <!-- keyProperty 將返回的自增主鍵放到傳入參數的id中保存 order 至關於insert語句的執行順序 在INSERT語句執行以前是before,在INSERT語句執行以後執行是after resultType: 就是keyProperty中屬性的類型 在這裏就是id類型 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert> <!--id屬性是string類型 使用mysql自帶的函數uuid();來返回一個隨即的字符串 注意:這裏在插入數據的時候須要id字段,它的流程是:先查詢了以後返回到user對象的id屬性中, 就至關因而幫咱們作了 setId部分的操做 --> <insert id="insertIntoUser2" parameterType="com.kylin.Pojo.User"> <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> SELECT uuid() </selectKey> INSERT INTO user(id,username,birthday,sex,address) VALUES (#{id},#{username},#{birthday},#{sex},#{address}) </insert> <!--刪除單行記錄--> <!--delete from user where id=?--> <delete id="deleteUserById" parameterType="java.lang.String"> delete from user where id=#{id} </delete> <!--更新某行記錄--> <!--update user set username=${username} where id=${id}--> <update id="updateUserById" parameterType="com.kylin.Pojo.User"> update user set username=#{username} where id=#{id} </update> <!--關於參數的類型的選擇方式 若是傳的是一個參數的話,那麼就直接寫其類型 可是若是是多個參數的話,那麼傳的參數就是javabean類型,注意這時候佔位符裏面的參數要和javabean對象的屬性相匹配 --> </mapper>
package com.kylin.Test; import com.kylin.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.Date; import java.util.List; public class Tone { @Test //查詢單條記錄 public void f1() throws IOException { //讀取核心配置文件 //這裏面的resources是mybatis框架裏面的類 String resource="config/mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); //建立SqlSessionFactory SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //開啓會話 SqlSession sqlSession=sqlSessionFactory.openSession(); //所調用的sql語句:namespace.myqsl的id //2個參數 第一個是sql語句 第二個是參數 能夠是各類類型 int double String ...等等 User user=sqlSession.selectOne("com.kylin.mapper.UserMapper.findUserById","150620004"); System.out.println(user.getId()); System.out.println(user.getUsername()); } @Test //查詢多條記錄 public void f2() throws IOException { String resource="config/mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); List<User> userList=sqlSession.selectList("com.kylin.mapper.UserMapper.findUserByUsername","王"); // System.out.println(userList); for (User u:userList){ System.out.println(u.getUsername()); } } @Test //插入單條記錄--主鍵爲int類型,插入後返回自增主鍵 public void f3() throws IOException { String resource="config/mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); //2個參數,第一個參數對應相匹配的映射文件中的sql語句,第二個參數對應插入的javabean對象 User user=new User(); System.out.println(user.getId()); user.setUsername("kylin"); user.setAddress("廣州大學"); user.setBirthday(new Date()); user.setSex("男"); sqlSession.insert("com.kylin.mapper.UserMapper.insertIntoUser",user); //提交事務 沒有提交事務的化 數據庫那邊並不會更新 //mybatis會自動開啓事務,可是並不會幫咱們提交事務;因此須要咱們手動提交事務 sqlSession.commit(); //查看是否會返回自增的主鍵 System.out.println(user.getId()); sqlSession.close(); } @Test //插入單條記錄,使用mysql自帶的uuid()函數來插入id屬性 public void f4() throws IOException { String resource="config/mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); User user=new User(); user.setUsername("xxx"); user.setBirthday(new Date()); user.setAddress("gzhu"); user.setSex("男"); System.out.println(user.getId()); sqlSession.insert("com.kylin.mapper.UserMapper.insertIntoUser2",user); System.out.println(user.getId()); sqlSession.commit(); sqlSession.close(); } @Test //經過id刪除某行記錄 public void f5() throws IOException { String resource="config/mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); sqlSession.delete("com.kylin.mapper.UserMapper.deleteUserById","1"); sqlSession.commit(); sqlSession.close(); } @Test
//經過id修改某行記錄 public void f6() throws IOException { String resource="config/mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); User user=new User(); user.setUsername("zhuoqilin"); user.setId("2"); sqlSession.update("com.kylin.mapper.UserMapper.updateUserById",user); sqlSession.commit(); sqlSession.close(); } }
本篇文章主要介紹了使用mybatis框架來實現基本的增刪改查操做,須要注意的是映射文件中的parameterType的設置以及resultType的設置,具體的設置都在映射文件中以註解的方式寫出,另外須要關注的就是主鍵的自增還有uuid()函數的使用.mybatis