1、匯入pojo類
2、匯入依賴
<?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">
<parent>
<artifactId>hanjiaxiaozhi_parent</artifactId>
<groupId>cn.hanjiaxiaozhi</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>MyBatis_test</artifactId>
<!--指定java專案的打包方式-->
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
</dependencies>
</project>
3、新增日誌配置檔案
log4j.rootLogger=DEBUG,A1
log4j.logger.com.taotao = DEBUG
log4j.logger.org.mybatis = DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
4、新增jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/day11_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
jdbc.username=root
jdbc.password=root
5、編寫mybatis全域性配置檔案(cv)
<?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"/>
<!--執行環境可以配置多個, default指定預設使用哪個-->
<environments default="development">
<!--配置環境, id是這個環境的唯一標識-->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--3 指定所有的mapper檔案-->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
6、編寫對映檔案 XxxMpper.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">
<!--
定義所有用到的sql語句 和 對映關係
namespace : 當前這個配置檔案的唯一標識, 自定義, 但是不能和其他配置檔案namespace重複
-->
<mapper namespace="userMapper">
<!--
定義一條sql語句, 其實就是一個 statement
select 代表是查詢語句, 與其類似的還有 insert, update, delete等
id : 這條sql語句的唯一標識,自定義,但是不能和其他sql語句重複
parameterType: sql語句需要的引數型別, 需要寫 類的全路徑
resultType: sql語句返回的結果型別
-->
<select id="queryById" parameterType="java.lang.Long" resultType="cn.hanjiaxiaozhi.pojo.User">
<!--這裡寫具體的sql語句, #{}是佔位符, 編譯時會被替換成?, 然後注入真實引數-->
select * from tb_user where id=#{id}
</select>
</mapper>
7、編寫測試程式碼
package cn.hanjiaxiaozhi.b_mybatis_start;
import cn.hanjiaxiaozhi.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 java.io.InputStream;
public class HelloMyBatis {
public static void main(String[] args) throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
User user = sqlSession.selectOne("userMapper.queryById", 1L);
System.out.println(user);
}
}
7、測試結果
2019-10-08 20:18:43,805 [main] [userMapper.queryById]-[DEBUG] ==> Preparing: select * from tb_user where id=?
2019-10-08 20:18:43,820 [main] [userMapper.queryById]-[DEBUG] ==> Parameters: 1(Long)
2019-10-08 20:18:43,836 [main] [userMapper.queryById]-[DEBUG] <== Total: 1
User [id=1, userName=null, password=123456, name=張三, age=30, sex=1, birthday=Wed Aug 08 00:00:00 CST 1984, created=Fri Sep 19 16:56:04 CST 2014, updated=Sun Sep 21 11:24:59 CST 2014]
8、入門程式執行流程圖
流程總結:
- 編寫配置檔案(全域性配置檔案mybatis-config.xml和所有的mapper.xml對映檔案)
- a) 簡單來說:就是準備JDBC連線引數以及要用到的Sql語句
- 載入配置,建立SqlSessionFactory
- a) 這裡獲取連線引數,獲取Sql,對Sql進行預編譯,形成statement
- 通過SqlSessionFactory建立SqlSession
- a) 這裡就是呼叫了連線引數,連線資料庫,形成會話
- 通過SqlSession執行statement,實現CRUD
- a) 給前面編譯好的statement設定Sql引數,然後執行
- 通過SqlSession提交事務
- 通過SqlSession關閉會話
9、問題: userName為null的問題
- 分析: User物件的屬性userName 和 tb_user表 的欄位 user_name不一致
- 解決方案1:
這種方案可以解決,但是比較麻煩,不方便後期維護.
- 結果