日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

利用Mybatis对数据库进行增删改查操作

發布時間:2024/8/23 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用Mybatis对数据库进行增删改查操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • mybatis模糊查找
    • 先來了解一下 #{}和${}的使用
    • parameterType和resultType的使用
    • selectOne和selectList的使用
    • mysql自增主鍵返回
      • 方法一:mysql的函數函數返回
    • 方法二:定義useGeneratedKeys為true返回
    • Mysql使用 uuid實現主鍵
    • 看到UUID和自增長的id想必大家想了解它們的區別?
      • 增刪改查操作
        • 目標對象:
        • xml數據源配置
        • mybatis xml映射文件配置
        • 測試類

mybatis模糊查找

先來了解一下 #{}和${}的使用

#{}表示一個占位符號,通過#{}可以實現preparedStatement向占位符中設置值,自動進行java類型和jdbc類型轉換。#{}可以有效防止sql注入。 #{}可以接收簡單類型值或pojo屬性值。 如果parameterType傳輸單個簡單類型值,#{}括號中可以是value或其它名稱。#{}默認加單引號

${}表示拼接sql串,通過${}可以將parameterType 傳入的內容拼接在sql中且不進行jdbc類型轉換, ${}可以接收簡單類型值或pojo屬性值,如果parameterType傳輸單個簡單類型值,${}括號中只能是value**。${}默認不加單引號

1.查詢sql:

SELECT * FROM `user` WHERE username LIKE '%王%'

2.在User.xml配置文件中添加如下內容:

<!-- 如果傳入的參數是簡單數據類型,${}里面必須寫value --><select id="queryUserByUsername2" parameterType="string"resultType="cn.itcast.mybatis.pojo.User">SELECT * FROM `user` WHERE username LIKE '%${value}%'</select>
  • 測試程序
    MybatisTest中添加測試方法如下:
  • @Test public void testQueryUserByUsername2() throws Exception {// 4. 創建SqlSession對象SqlSession sqlSession = sqlSessionFactory.openSession();// 5. 執行SqlSession對象執行查詢,獲取結果User// 查詢多條數據使用selectList方法List<Object> list = sqlSession.selectList("queryUserByUsername2", "王");// 6. 打印結果for (Object user : list) {System.out.println(user);}// 7. 釋放資源sqlSession.close(); }

    parameterType和resultType的使用

    parameterType:

    指定輸入參數類型,mybatis通過ognl從輸入對象中獲取參數值拼接在sql中。

    resultType:

    指定輸出結果類型,mybatis將sql查詢結果的一行記錄數據映射為resultType指定類型的對象。如果有多條數據,則分別進行映射,并把對象放到容器List中

    selectOne和selectList的使用

    selectOne:查詢一條記錄

    User user = openSession.selectOne("queryUserById", 1);

    selectList可以查詢一條或多條記錄。

    List<User> user = openSession.selectList("queryUserByName", "hexiang");

    記住:查詢操作openSession不需要提交事務,而如果是增刪改需要openSession.commit()來提交事務

    mysql自增主鍵返回

    方法一:mysql的函數函數返回

    LAST_INSERT_ID():是mysql的函數,返回auto_increment自增列新記錄id值。

    <!-- 保存用戶 --> <insert id="saveUser" parameterType="cn.itcast.mybatis.pojo.User"><!-- selectKey 標簽實現主鍵返回 --><!-- keyColumn:主鍵對應的表中的哪一列 --><!-- keyProperty:主鍵對應的pojo中的哪一個屬性 --><!-- order:設置在執行insert語句前執行查詢id的sql,孩紙在執行insert語句之后執行查詢id的sql --><!-- resultType:設置返回的id的類型 --><selectKey keyColumn="id" keyProperty="id" order="AFTER"resultType="int">SELECT LAST_INSERT_ID()</selectKey>INSERT INTO `user`(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address}) </insert>

    方法二:定義useGeneratedKeys為true返回

    <!-- 插入數據:返回記錄主鍵id值 --> <insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id">insert into stu (name,age) values (#{name},#{age}) </insert>

    獲取新添加記錄主鍵字段值

    Integer rows = sqlSession.getMapper(StuMapper.class).insertOneTest(student); System.out.println("rows = " + rows); // 添加操作返回記錄數 System.out.println("id = " + student.getId()); // 執行添加操作之后通過Java對象獲取主鍵屬性值

    推薦用方式二

    Mysql使用 uuid實現主鍵

    需要增加通過select uuid()得到uuid值,注意這里使用的order是“BEFORE”

    <!-- 保存用戶 --> <insert id="saveUser" parameterType="cn.itcast.mybatis.pojo.User"><!-- selectKey 標簽實現主鍵返回 --><!-- keyColumn:主鍵對應的表中的哪一列 --><!-- keyProperty:主鍵對應的pojo中的哪一個屬性 --><!-- order:設置在執行insert語句前執行查詢id的sql,孩紙在執行insert語句之后執行查詢id的sql --><!-- resultType:設置返回的id的類型 --><selectKey keyColumn="id" keyProperty="id" order="BEFORE"resultType="string">SELECT LAST_INSERT_ID()</selectKey>INSERT INTO `user`(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address}) </insert>

    看到UUID和自增長的id想必大家想了解它們的區別?

    uuid是按照字符型存儲(可以用string類型),正常自增長用的id是int類型占四個字節,當數據量非常大的時候就可以提現出id和uuid之間的區別,假設用500萬個數據來模擬的話,id可以相對uuid節省2.5G空間,詳細區別,可以問度娘.

    增刪改查操作

    新建的項目中的列表用到的文件是User.java(目標對象)、TestDemo1.java(測試類)、SqlMapConfig.xml(數據庫連接池配置)、User.xml(數據庫增刪查改配置)、jdbc.properties(配置信息:賬戶密碼等)、log4j.properties(控制臺打印日志):

    目標對象:

    User.java

    package com.firtDay.sqlMapconFig;import java.io.Serializable;public class User implements Serializable {@Overridepublic String toString() {return "User [_name=" + _name + ", _money=" + _money + "]";}private Integer id;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}private String _name;private int _money;public String get_name() {return _name;}public void set_name(String _name) {this._name = _name;}public int get_money() {return _money;}public void set_money(int _money) {this._money = _money;}}

    xml數據源配置

    SqlMapConfig.xml

    <?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="jdbc.properties"></properties> <typeAliases> <!-- 給User類取別名 --><!-- <typeAlias type="com.firtDay.sqlMapconFig.User" alias="User"/> --><!-- 取別名以及其子包下所有類的別名,避免多個類都需要配置代碼太多,利用包默認取包下類中所定義的名字 --><package name="com.firtDay.sqlMapconFig"/> </typeAliases><!-- 和spring整合后 environments配置將廢除 --><environments default="development"><environment id="development"><!-- 使用jdbc事務管理 --><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><!-- 加載映射文件的時候用到 --><mappers><!-- <mapper class="com.mapper.mapper"/> 使用這種方式加載mapper.xml必須把該xml文件放在mapper包下才能并且與mapper類名相同加載出來 。<package name=""/>package同理,用分最多的是package避免配置多個麻煩--><mapper resource="User.xml"/><mapper resource="mapper.xml"/> <!-- <package name="com.mapper"/> package用法,只需要把xml文件放在該mapper包下就會被掃描到,名稱沒有要求--></mappers> </configuration>

    mybatis xml映射文件配置

    User.xml

    <?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,因為多個數據庫都會用到queryUserById方法因此為了區分我們所調用的是哪個數據庫中方法,因此設置名稱空間來區別開來,調用方式:test.queryUserById。 --> <mapper namespace="test"><!-- id="方法名" parameterType="參數類型" --><select id="queryUserById" parameterType="Integer"resultType="com.firtDay.sqlMapconFig.User">SELECT * FROM `t_user` WHERE id = #{id}</select><!-- like "%"#{v}"%"防SQL注入、默認不會自動添加單引號 '${value}'相反 --><select id="queryUserByName" parameterType="String"resultType="com.firtDay.sqlMapconFig.User">SELECT * FROM `t_user` WHERE _name like '%${value}%'</select><!-- 添加用戶 --><insert id="addUser" parameterType="com.firtDay.sqlMapconFig.User"><!-- 獲取主鍵 keyProperty="對應的主鍵的對象",resultType="主鍵數據類型",order="after:表示在下面insert語句后面執行,在mysql中是先插入再生成主鍵而Oracle中是先出主鍵在插入值因此用before"--><selectKey keyProperty="id" resultType="Integer" order="AFTER">select LAST_INSERT_ID()</selectKey>INSERT INTO t_user(_name,_money) values (#{_name},#{_money})</insert><update id="updateUser" parameterType="com.firtDay.sqlMapconFig.User">UPDATE t_user set _name = #{_name},_money = #{_money} WHERE id = #{id}</update><delete id="deleteUserById" parameterType="Integer">delete from t_user where id = #{id} </delete> </mapper>

    測試類

    TestDemo1.java

    package com.test;import java.io.InputStream; 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.firtDay.sqlMapconFig.User;public class TestDemo1 {private SqlSessionFactory sqlSessionFactory=null;@Beforepublic void testDemo() throws Exception{// 1. 創建SqlSessionFactoryBuilder對象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();String url="SqlMapConfig.xml";InputStream resource = Resources.getResourceAsStream(url);this.sqlSessionFactory = sqlSessionFactoryBuilder.build(resource);}@Testpublic void testDemo2(){SqlSession openSession = sqlSessionFactory.openSession();User user = openSession.selectOne("queryUserById", 1);System.out.println(user);openSession.close();}@Testpublic void testDemo3(){SqlSession openSession = sqlSessionFactory.openSession();List<User> user = openSession.selectList("queryUserByName", "hexiang");for (User user2 : user) {System.out.println(user2);}openSession.close();} @Testpublic void testDemo4(){SqlSession openSession = sqlSessionFactory.openSession();User user = new User();user.set_name("hha");user.set_money(1000);int insert = openSession.insert("addUser", user);//返回值為影響的行數System.out.println(insert);openSession.commit();//需要提交事務System.out.println("id:"+user.getId());openSession.close();}//更新數據@Testpublic void testDemo5(){SqlSession openSession = sqlSessionFactory.openSession();User user = new User();user.setId(9);user.set_name("111xxxoooo");user.set_money(1000);int update = openSession.update("updateUser", user);openSession.commit();openSession.close();}//刪除數據 @Testpublic void testDemo6(){SqlSession openSession = sqlSessionFactory.openSession();User user = new User();openSession.update("deleteUserById", 9);openSession.commit();openSession.close();} }

    總結

    以上是生活随笔為你收集整理的利用Mybatis对数据库进行增删改查操作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。