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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatis学习笔记(3)-入门程序一

發布時間:2025/7/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis学习笔记(3)-入门程序一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

mybatis學習筆記(3)-入門程序一

標簽: mybatis


[TOC]


工程結構

在IDEA中新建了一個普通的java項目,新建文件夾lib,加入jar包,工程結構如圖。

  • log4j.properties
# Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
  • SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!-- 和spring整合后 environments配置將廢除--><environments default="development"><environment id="development"><!-- 使用jdbc事務管理,事務控制由mybatis--><transactionManager type="JDBC" /><!-- 數據庫連接池,由mybatis管理--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://120.25.162.238:3306/mybatis001?characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="123" /></dataSource></environment></environments></configuration>

映射文件

  • sqlmap/User.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//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,稱為statement的id將sql語句封裝到mappedStatement對象中,所以將id稱為statement的idparameterType:指定輸入參數的類型#{}標示一個占位符,#{value}其中value表示接收輸入參數的名稱,如果輸入參數是簡單類型,那么#{}中的值可以任意。resultType:指定sql輸出結果的映射的java對象類型,select指定resultType表示將單條記錄映射成java對象--><select id="findUserById" parameterType="int" resultType="com.iot.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="com.iot.mybatis.po.User">SELECT * FROM user WHERE username LIKE '%${value}%'</select></mapper>

在sqlMapConfig.xml中加載User.xml

<!-- 加載映射文件--> <mappers><mapper resource="sqlmap/User.xml"/> </mappers>

程序代碼

  • po類User.java
package com.iot.mybatis.po;import java.util.Date;/*** Created by Administrator on 2016/2/21.*/ public class User {//屬性名要和數據庫表的字段對應private int id;private String username;// 用戶姓名private String sex;// 性別private Date birthday;// 生日private String address;// 地址public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", sex=" + sex+ ", birthday=" + birthday + ", address=" + address + "]";} }
  • 測試代碼
package com.iot.mybatis.first;import com.iot.mybatis.po.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.List;/*** Created by Administrator on 2016/2/23.*/ public class MybatisFirst {//根據id查詢用戶信息,得到一條記錄結果@Testpublic void findUserByIdTest() throws IOException{// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);//創建會話工廠,傳入mybatis配置文件的信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通過工廠得到SqlSessionSqlSession 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();}// 根據用戶名稱模糊查詢用戶列表@Testpublic void findUserByNameTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 創建會話工廠,傳入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通過工廠得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// list中的user和映射文件中resultType所指定的類型一致List<User> list = sqlSession.selectList("test.findUserByName", "小明");System.out.println(list);sqlSession.close();}}

輸出:

  • findUserByIdTest()
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. DEBUG [main] - PooledDataSource forcefully closed/removed all connections. DEBUG [main] - PooledDataSource forcefully closed/removed all connections. DEBUG [main] - PooledDataSource forcefully closed/removed all connections. DEBUG [main] - PooledDataSource forcefully closed/removed all connections. DEBUG [main] - Opening JDBC Connection DEBUG [main] - Created connection 1857815974. DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6ebc05a6] DEBUG [main] - ==> Preparing: SELECT * FROM user WHERE id=? DEBUG [main] - ==> Parameters: 1(Integer) DEBUG [main] - <== Total: 1 User [id=1, username=王五, sex=2, birthday=null, address=null] DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6ebc05a6] DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@6ebc05a6] DEBUG [main] - Returned connection 1857815974 to pool.
  • findUserByNameTest()
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. DEBUG [main] - PooledDataSource forcefully closed/removed all connections. DEBUG [main] - PooledDataSource forcefully closed/removed all connections. DEBUG [main] - PooledDataSource forcefully closed/removed all connections. DEBUG [main] - PooledDataSource forcefully closed/removed all connections. DEBUG [main] - Opening JDBC Connection DEBUG [main] - Created connection 1596467899. DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5f282abb] DEBUG [main] - ==> Preparing: SELECT * FROM user WHERE username LIKE '%小明%' DEBUG [main] - ==> Parameters: DEBUG [main] - <== Total: 3 [User [id=16, username=張小明, sex=1, birthday=null, address=河南鄭州], User [id=22, username=陳小明, sex=1, birthday=null, address=河南鄭州], User [id=25, username=陳小明, sex=1, birthday=null, address=河南鄭州]] DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5f282abb] DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@5f282abb] DEBUG [main] - Returned connection 1596467899 to pool.

總結

  • parameterType

在映射文件中通過parameterType指定輸入參數的類型

  • resultType

在映射文件中通過resultType指定輸出結果的類型

  • #{}和${} #{}表示一個占位符號; ${}表示一個拼接符號,會引起sql注入,所以不建議使用

  • selectOne和selectList selectOne表示查詢一條記錄進行映射,使用selectList也可以使用,只不過只有一個對象 selectList表示查詢出一個列表(參數記錄)進行映射,不嗯能夠使用selectOne查,不然會報下面的錯:

org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3

作者@brianway更多文章:個人網站 | CSDN | oschina

轉載于:https://my.oschina.net/brianway/blog/625244

總結

以上是生活随笔為你收集整理的mybatis学习笔记(3)-入门程序一的全部內容,希望文章能夠幫你解決所遇到的問題。

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