【Mybatis 之应用篇】1_Mybatis简介、第一个Mybatis程序和增删改查在Mybatis中的使用方式
文章目錄
- Mybatis
- 一、簡介
- 1.持久化
- 2.持久層
- 3.為什么需要Mybatis?
- 二、第一個Mybatis程序
- 1.創建一個數據庫
- 2.配置pom.xml文件
- 3.創建實體類
- 4.創建一個Mybatis工具類
- 5.創建一個UserDao接口
- 6.配置mybatis配置類
- 7.配置UserMapper.xml
- 8.測試類
- 三、核心CRUD(增刪改查)
- 1.namespace
- 2.增insert
- 3.刪delete
- 4.查select
- 5.改update
- 6.分析錯誤
- 7.萬能map
- 8.思考題
Mybatis
環境:
- JDK 1.8
- MySQL 5.6.39
- maven 3.3.39
- IDEA 2018
回顧
- JDBC
- MySQL
- java基礎
- Maven
- Junit
SMM框架:配置文件
一、簡介
- MyBatis 是一款優秀的持久層框架
- 它支持定制化 SQL、存儲過程以及高級映射。
- MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。
- MyBatis 可以使用簡單的 XML 或注解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄。
- MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis 。
- 2013年11月遷移到Github。
如何獲得Mybatis?
-
maven倉庫:
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version> </dependency> -
Github : https://github.com/mybatis/mybatis-3/releases
-
中文文檔:https://mybatis.org/mybatis-3/zh/index.html
1.持久化
數據持久化
- 持久化就是將程序的數據在持久狀態和瞬時狀態轉化的過程
- 內存:斷電即失
- 數據庫(Jdbc),io文件持久化。
- 生活:冷藏. 罐頭。
為什么需要需要持久化?
-
有一些對象,不能讓他丟掉。
-
內存太貴了
2.持久層
Dao層,Service層,Controller層….
- 完成持久化工作的代碼塊
- 層界限十分明顯。
3.為什么需要Mybatis?
- 幫助程序猿將數據存入到數據庫中。
- 方便
- 傳統的JDBC代碼太復雜了。簡化。框架。自動化。
- 不用Mybatis也可以。更容易上手。 技術沒有高低之分
- 優點:
- 簡單易學
- 靈活
- sql和代碼的分離,提高了可維護性。
- 提供映射標簽,支持對象與數據庫的orm字段關系映射
- 提供對象關系映射標簽,支持對象關系組建維護
- 提供xml標簽,支持編寫動態sql。
最重要的一點:使用的人多!
Spring SpringMVC SpringBoot
二、第一個Mybatis程序
1.創建一個數據庫
2.配置pom.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xutao</groupId><artifactId>Mybaitis</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>mybatis-01</module></modules><!--導入依賴--><dependencies><!--mysql驅動--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--mybatis--><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><!--junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies><!--文件資源過濾問題--><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build> </project>3.創建實體類
package entity;/*** @ClassName: User* @description:實體類* @author: FFIDEAL* @Date: 2020/5/14 16:08*/ public class User {private int id;private String name;private String pwd;public User() {}public User(int id, String name, String pwd) {this.id = id;this.name = name;this.pwd = pwd;}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 String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", pwd='" + pwd + '\'' +'}';} }4.創建一個Mybatis工具類
這個工具類就是為了獲得mybatis-config.xml配置文件,過程需要進行如下三部:①找到配置文件的地址;②讀取地址;③構造一個數據庫對話工廠(SqlSessionFactory),實例化數據庫對話工廠sqlSessionFactory,該對象可以調用包含了所有操作數據庫的命令的方法
/*** @ClassName: MybatisUtil* @description:* @author: FFIDEAL* @Date: 2020/5/14 16:09*/public class MybatisUtil {private static SqlSessionFactory sqlSessionFactory;static {try {//使用Mybatis第一步:獲取sqlSessionFactory對象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}//既然有了 SqlSessionFactory,顧名思義,我們就可以從中獲得 SqlSession 的實例了。// SqlSession 完全包含了面向數據庫執行 SQL 命令所需的所有方法。public static SqlSession getSqlSession() {return sqlSessionFactory.openSession();} }5.創建一個UserDao接口
import entity.User;import java.util.List;public interface UserDao {//獲取全部用戶List<User> getUserList(); }6.配置mybatis配置類
<?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核心配置文件--> <configuration><!--這是數據庫驅動配置--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!--每一個Mapper.xml都需要在Mybatis核心配置文件中注冊--><mappers><!--這是UserMapper在resources文件夾下的路徑,可以直接寫配置文件名--><!--<mapper resource="UserMapper.xml"/>--><!--當UserMapper在其他文件夾下時,則需要寫上路徑名,比如在到文件加下。(可以參考target中test中的路徑)--><mapper resource="dao/UserMapper.xml"/></mappers> </configuration>7.配置UserMapper.xml
在這里要注意的是mapper標簽的namespace名字,要加路徑和編號;select標簽中的id屬性要調用UserDao接口中的方法名,resultType則是返回類型
<?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=綁定一個對應的Dao/Mapper接口--> <mapper namespace="dao.UserDao"><!--select查詢語句--><select id="getUserList" resultType="entity.User">select * from mybatis.user</select> </mapper>8.測試類
@Test public void test(){//第一步:獲得SqlSession對象SqlSession sqlSession = MybatisUtils.getSqlSession();//方式一:getMapperUserDao userDao = sqlSession.getMapper(UserDao.class);List<User> userList = userDao.getUserList();for (User user : userList) {System.out.println(user);}//關閉SqlSessionsqlSession.close(); }三、核心CRUD(增刪改查)
1.namespace
namespace的報名要和Dao/mapper中的接口名一致
- id : 就是對應的namespace中的方法名;
- resultType:Sql語句執行的返回值!
- parameterType : 參數類型!
2.增insert
接口要根據id名到Mapper.xml文件中查詢到相關的SQL語句
在接口UserDao接口中的方法
//添加一個用戶,增刪改返回值可以用voidint insertUser(User user)在UserMapper.xml中的語句
<!--對象的屬性可以直接查詢--><insert id="insertUser" parameterType="entity.User">insert into mybatis.user(id, name, pwd) values (#{id},#{name},#{pwd})</insert>測試類中的方法
@Testpublic void testInsertUser(){SqlSession sqlSession = MybatisUtil.getSqlSession();UserDao mapper = sqlSession.getMapper(UserDao.class);int num = mapper.insertUser(new User(4, "王五", "123456"));if(num>0){System.out.println("插入成功");}//提交事務sqlSession.commit();sqlSession.close();}3.刪delete
接口要根據id名到Mapper.xml文件中查詢到相關的SQL語句
在接口UserDao接口中的方法
//根據id刪除用戶void deleteById(int id);在UserMapper.xml中的語句
<!--根據id刪除用戶--><delete id="deleteById" parameterType="int">delete from mybatis.user where id = #{id}</delete>測試類中的方法
@Testpublic void testDeleteById(){SqlSession sqlSession = MybatisUtil.getSqlSession();UserDao mapper = sqlSession.getMapper(UserDao.class);mapper.deleteById(2);//提交事務sqlSession.commit();sqlSession.close();}4.查select
接口要根據id名到UserMapper.xml文件中查詢到相關的SQL語句
<mapper namespace="dao.UserDao"></mapper>在接口UserDao接口中的方法
//獲取全部用戶List<User> getUserList();//根據id查詢用戶User getById(int id);在UserMapper.xml中的語句
<!--select查詢語句--><select id="getUserList" resultType="entity.User">select * from mybatis.user</select><!--根據id查詢用戶--><select id="getById" parameterType="int" resultType="entity.User">select * from mybatis.user where id = #{id}</select>測試類中的方法
@Test public void test(){//第一步:獲得SqlSession對象SqlSession sqlSession = MybatisUtil.getSqlSession();//方式一:getMapperUserDao userDao = sqlSession.getMapper(UserDao.class);List<User> userList = userDao.getUserList();for (User user : userList) {System.out.println(user);}//關閉SqlSessionsqlSession.close(); }@Test public void testGetById(){//從Mybatis工具類中獲得SqlSession實例SqlSession sqlSession = MybatisUtil.getSqlSession();//去找到接口,拿到對象UserDao sqlSessionMapper = sqlSession.getMapper(UserDao.class);//調用方法User user = sqlSessionMapper.getById(1);//查詢id為1的用戶System.out.println(user);//關閉實例,節約內存sqlSession.close();}5.改update
接口要根據id名到Mapper.xml文件中查詢到相關的SQL語句
在接口UserDao接口中的方法
//修改一個用戶的名字void updateUser(User user);在UserMapper.xml中的語句
<!--對象中的屬性,可以直接取出來,傳遞map的key--><update id="updateUser" parameterType="entity.User">update mybatis.user set name=#{name},pwd=#{pwd} where id = #{id};</update>測試類中的方法
@Testpublic void testUpdateUser(){SqlSession sqlSession = MybatisUtil.getSqlSession();UserDao mapper = sqlSession.getMapper(UserDao.class);mapper.updateUser(new User(3,"趙六","45454545"));sqlSession.commit();sqlSession.close();}注意:增刪改返回值可以用void,增刪改需要提交事務(commit)
6.分析錯誤
- 標簽不要匹配錯
- Mybatis-config中的resource 綁定mapper,需要使用路徑(斜杠)!
- 程序配置文件必須符合規范!
- NullPointerException,沒有注冊到資源!作用域問題
- 輸出的xml文件中存在中文亂碼問題!
- maven資源沒有導出問題!
7.萬能map
通過map只需要寫入需要的參數,如果參數是對象的話,則需要插入對象的所有信息
接口要根據id名到Mapper.xml文件中查詢到相關的SQL語句
在接口UserDao接口中的方法
//修改一個用戶的名字void updateUser(User user);在UserMapper.xml中的語句
<insert id="addUser" parameterType="map">insert into mybatis.user(id, name, pwd) values (#{userid},#{username},#{password})</insert>測試類中的方法
@Testpublic void testAddUser(){SqlSession sqlSession = MybatisUtil.getSqlSession();UserDao mapper = sqlSession.getMapper(UserDao.class);Map<String,Object> map = new HashMap<String, Object>();map.put("userid",5);map.put("username","陳七");map.put("password","23333");mapper.addUser(map);sqlSession.commit();sqlSession.close();}Map傳遞參數,直接在sql中取出key即可! 【parameterType=“map”】
對象傳遞參數,直接在sql中取對象的屬性即可!【parameterType=“Object”】
只有一個基本類型參數的情況下,可以直接在sql中取到!
多個參數用Map,或者注解!
8.思考題
模糊查詢怎么寫?
Java代碼執行的時候,傳遞通配符 % %
List<User> userList = mapper.getUserLike("%李%");在sql拼接中使用通配符!
select * from mybatis.user where name like "%"#{value}"%"總結
以上是生活随笔為你收集整理的【Mybatis 之应用篇】1_Mybatis简介、第一个Mybatis程序和增删改查在Mybatis中的使用方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【PTA】JAVA提交的一些注意点
- 下一篇: 【Mybatis 之应用篇】2_配置解析