国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 使用Mybatis對數據庫進行單表操作的實現示例

使用Mybatis對數據庫進行單表操作的實現示例

2020-08-09 20:45cing_self Java教程

這篇文章主要介紹了使用Mybatis對數據庫進行單表操作的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

簡介

該篇文章主要是介紹如何使用MyBatis對Mysql數據庫進行單表操作(對于mybatis的下載以及配置文件的作用和具體信息,我在上一篇文章中也已經提到了),使用的環境如下:

  • JDK版本:1.8
  • 編譯器:IDEA2019
  • JDBC版本:8.0.18
  • mybatis版本:3.5.3

配置文件

首先需要有兩個配置文件,一個是configuration.xml文件,配置的是連接數據庫的環境以及對于mapper.xml文件的映射,還有另一個文件就是mapper.xml,這個文件主要是用來寫sql語句的

configuration.xml文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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>
  <environments default="e1">
    <environment id="e1">
      <transactionManager type="JDBC"></transactionManager>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/bank?serverTimezone=CST"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
    <environment id="e2">
      <transactionManager type=""></transactionManager>
      <dataSource type=""></dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="mapper/UserMapper.xml"></mapper>
  </mappers>
</configuration>

mapper.xml文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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="dao.UserDao">
  <insert id="insert">
    INSERT ATM VALUES(#{account}, #{password}, #{balance})
  </insert>
  <update id="update">
    update atm set account=#{account},password=#{password},balance=#{balance} where account=#{account};
  </update>
  <delete id="delete">
    DELETE FROM ATM WHERE account=#{account};
  </delete>
 
  <select id="selectAll" resultType="domain.User">
    SELECT *FROM atm;
  </select>
 
  <select id="getTotalCount" resultType="integer">
    SELECT COUNT(*) FROM atm;
  </select>
  <select id="gettotal" resultType="hashmap">
    select count(*),max(balance) from atm;
  </select>
 
 
  <select id="selectAllByAcc" resultType="domain.User">
    SELECT *FROM atm order by ${flag} ${order};
  </select>
</mapper>

具體操作

具體操作看如下代碼,我對代碼都進行了一定的注釋,并結合mapper.xml文件一起看

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
public class UserDao {
 
  //增加一條記錄,user對象是我創建的實體類
    //mapper.xml文件的sql語句如下:
    //update atm set account=#{account},password=#{password},balance=#{balance} where account=#{account};
    //#{key}中的key要和實體類user的屬性名一致
    //如果傳遞的是基本數據類型或者String,且#{key}只有一個,那么名字可以不一致
    //如果傳入的是map集合,#{key}中的key要和map集合里的key一致
  public void insert(User user){
    //MYBATIS操作流程
    //獲取工廠Builder對象
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    //獲取configuration.xml配置文件的輸入流
    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml");
    //builder根據is獲取SqlSessionFactory工廠對象
    SqlSessionFactory factory = builder.build(is);
    //獲取SqlSession對象
    SqlSession sqlSession = factory.openSession();
    //執行sql語句操作
      //insert是在mapper.xml下,insert標簽的id名
      //user是我要插入的數據(動態操作),替換掉sql語句的#{}
    sqlSession.insert("insert", user);
 
    sqlSession.commit();
  }
 
  //改:修改記錄,user是要修改的數據
    //mapper.xml文件的sql語句如下:
    //update atm set account=#{account},password=#{password},balance=#{balance} where account=#{account};
  public void update(User user){
    //MYBATIS操作流程
    //獲取工廠Builder對象
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    //獲取configuration.xml配置文件的輸入流
    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml");
    //builder根據is獲取SqlSessionFactory工廠對象
    SqlSessionFactory factory = builder.build(is);
    //獲取SqlSession對象
    SqlSession sqlSession = factory.openSession(true);
    //執行sql語句操作
    sqlSession.update("update",user);
  }
  
  //刪除:根據account刪除
  //mapper.xml的sql語句如下:
    // DELETE FROM ATM WHERE account=#{account};
  public void delete(String account){
    //MYBATIS操作流程
    //獲取工廠Builder對象
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    //獲取configuration.xml配置文件的輸入流
    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml");
    //builder根據is獲取SqlSessionFactory工廠對象
    SqlSessionFactory factory = builder.build(is);
    //獲取SqlSession對象
    SqlSession sqlSession = factory.openSession(true);
    //執行sql語句操作
    sqlSession.update("delete",account);
  }
  
  
  //===============================查詢====================================
  //查詢:查找記錄總條數以及balance的最大值
  //sql語句如下:select count(*),max(balance) from atm;
  //select標簽上的resultType表示的是返回值,指的是一條記錄的類型,最后包裹成list集合
    //我這里用的hashMap
  public List<Map<String, Object>> gettotal(){
    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    SqlSession sqlSession = factory.openSession(true);
    return sqlSession.selectList("gettotal");
  }
  
  //查詢:獲取總記錄數
  //sql語句: SELECT COUNT(*) FROM atm;
  //resultType類型:integer
  public Integer getTotalCount(){
    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    SqlSession sqlSession = factory.openSession(true);
    return sqlSession.selectOne("getTotalCount");
  }
  
  //查詢:獲取表格的所有記錄
  //sql語句:SELECT *FROM atm;
  //resultType類型:domain.User (如果是自己寫的實體類,需要類名的具體路徑,除非做了配置)
  public List<User> selectAll(){
    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    SqlSession sqlSession = factory.openSession(true);
    return sqlSession.selectList("selectAll");
  }
 
  //查詢:查詢所有該表所有記錄,并根據flag列進行order排序
      //flag不確定,order可能是升序也可能是降序(由調用這個方法的用戶決定)
  //sql語句: SELECT *FROM atm order by ${flag} ${order};
    //這里用的是${}而不是#{}
    //#{}和${}的區別:
    //#{}:當我們的動態參數是用作條件的時候我們用這個,比如說account=#{key}
    //${}:當我們的動態參數表示的是一個普通字符串,比如說表名、列名或者關鍵字我們用這個
  //resultType:domain.User(domain包下的User類)
  public List<User> selectAllByAcc(String flag, String order){
    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    SqlSession sqlSession = factory.openSession(true);
    Map<String, Object> map = new HashMap<>();
    map.put("flag", flag);
    map.put("order", order);
    return sqlSession.selectList("selectAllByAcc", map);
  }
}

關于單表操作的底層原理

這里我簡單提一下關于增刪改查操作的底層原理,以查詢操作為例,查詢操作和增刪改操作的主要區別在于sql語句的不同以及查詢操作有返回值,所以底層還需要處理返回值

例如:sqlSession.selectOne(sql,obj)

1)首先,底層需要根據configuration.xml,找到mysql的驅動類driver,加載驅動
2)根據configuration.xml文件,找到連接MySQL數據庫的url,user,password,獲取連接Connection
3)參考configuration.xml配置文件,找到mapper.xml文件,從而找到sql語句,創建狀態參數PreparedStatement
4)解析sql語句,把#{key}或者${key}轉換成?的形式,并記錄key的名字,根據傳遞過來的obj匹配key,如果傳遞過來的是domain實體對象,通過反射獲取domain實體中的所有屬性,根據屬性名字去匹配key,然后調用狀態參數的setObject方法對?進行復制(其他類型的對象也基本如此)
5)執行SQL操作,獲取結果集
6)分析ResultType屬性,獲取返回值類型,通過反射創建對象,遍歷結果集,將結果集包裝成返回值類型的對象
基本的流程大概就是這樣,本篇文章主要是對單表操作進行介紹,下一篇文章會介紹如果是多表,該如何進行操作

到此這篇關于使用Mybatis對數據庫進行單表操作的實現示例的文章就介紹到這了,更多相關Mybatis 數據庫單表操作內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家! 

原文鏈接:https://segmentfault.com/a/1190000023536481

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩高清电影 | 中文字幕 在线观看 | 激情网页 | 久久99精品国产麻豆婷婷洗澡 | 久久伊99综合婷婷久久伊 | 久久久午夜爽爽一区二区三区三州 | 婷婷综合 | 精品久久一二三区 | 99久久久成人国产精品 | 欧美日韩国产三级 | 狠狠干av | 色播视频网站 | 欧美日韩精品 | 美欧一级片 | 精品国产青草久久久久福利 | 久久综合狠狠综合久久综合88 | 久久久久国产精品免费免费搜索 | 中文字幕国产在线视频 | 最近免费中文字幕在线视频2 | 日韩一区在线视频 | 国产成人高清精品免费5388 | 日韩欧美在线观看一区二区三区 | 中文字幕亚洲欧美日韩在线不卡 | 亚洲天堂免费在线 | 欧美成人区 | 欧美一区免费 | 91精品国产综合久久久久久丝袜 | 欧美日韩在线视频免费 | 日韩av在线影院 | 国产天天操| 欧美一区二区三区在线看 | 中文字幕1区2区3区 日韩免费高清视频 | 91精品视频导航 | 中文字幕日本一区二区 | 在线免费观看av电影 | 黄色免费在线网站 | 色播久久 | 国产精品一区二区三区免费 | 国产超碰人人爽人人做人人爱 | 亚洲电影免费 | 国产视频一区二区三区在线观看 |