MyBatis源码- SqlSession门面模式 selectList 源码解析
生活随笔
收集整理的這篇文章主要介紹了
MyBatis源码- SqlSession门面模式 selectList 源码解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- Pre
- 工程概覽
- pom.xml
- mybatis-config.xml
- UserMapper
- 測試類
- selectList 源碼解析
- 附
- SQL
- log4j.properties
- app.properties
- User
Pre
如果MyBatis的基礎用法還不熟悉,31篇入門博客拿走不謝
戳戳戳 —> https://blog.csdn.net/yangshangwei/category_7205317.html
工程概覽
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.artisan</groupId><artifactId>mybatisSource</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.17</version><scope>runtime</scope></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/test/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build></project>mybatis-config.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><properties resource="app.properties"></properties><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings><typeAliases></typeAliases><environments default="dev"><environment id="dev"><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><mappers><package name="com.artisan"/></mappers> </configuration>UserMapper
package com.artisan;import com.artisan.bean.User; import org.apache.ibatis.annotations.Select;public interface UserMapper {@Select({"select * from users where id = #{id}"})User selectByid(Integer id); }測試類
基類
import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before;/*** 基類*/ public class BaseTest {public SqlSessionFactory factory;public Configuration configuration; @Beforepublic void inin(){// 獲取構建器SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();// 解析xml ,構建會話工廠factory = factoryBuilder.build(SqlSessionTest.class.getResourceAsStream("/mybatis-config.xml"));// 獲取 configuration 這個大管家configuration = factory.getConfiguration();} }SqlSessionTest 測試類
package com.artisan;import com.artisan.bean.User; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.SqlSession; import org.junit.Test;import java.util.List;public class SqlSessionTest extends BaseTest{private MappedStatement ms;@Testpublic void sqlSessionTest(){// 獲取statement SQL映射ms = configuration.getMappedStatement("com.artisan.UserMapper.selectByid");// 開啟會話 第一個參數 執行器類型 第二個參數 是否自動提交SqlSession sqlSession = factory.openSession(ExecutorType.SIMPLE, true);// 門面模式 屏蔽了底層調用的復雜用 統一對接sqlSessionList<User> users = sqlSession.selectList(ms.getId(), 1);System.out.println(users.get(0));} }測試結果:
selectList 源碼解析
附
SQL
/* Navicat MySQL Data TransferSource Server : localhost_root Source Server Version : 80011 Source Host : 127.0.0.1:3306 Source Database : artisanTarget Server Type : MYSQL Target Server Version : 80011 File Encoding : 65001Date: 2020-06-14 00:46:05 */SET FOREIGN_KEY_CHECKS=0;-- ---------------------------- -- Table structure for `users` -- ---------------------------- DROP TABLE IF EXISTS `users`; CREATE TABLE `users` (`id` int(11) NOT NULL,`name` varchar(255) DEFAULT NULL,`age` varchar(255) DEFAULT NULL,`sex` varchar(255) DEFAULT NULL,`email` varchar(255) DEFAULT NULL,`phoneNumber` varchar(255) DEFAULT NULL,`createTime` date DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ---------------------------- -- Records of users -- ---------------------------- INSERT INTO `users` VALUES ('1', 'artisan', '11', 'male', '123@qq.com', '12345', '2020-06-04');log4j.properties
### set log levels ### log4j.rootLogger = DEBUG ,stdout### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c:%L - %m%napp.properties
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/artisan?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT jdbc.username=root jdbc.password=root default.environment=devUser
package com.artisan.bean;import java.util.Date;public class User implements java.io.Serializable {private Integer id;private String name;private String age;private String sex;private String email;private String phoneNumber;private Date createTime;public User() {}public User(Integer id, String name) {this.id = id;this.name = name;}....省略 set/get .... }總結
以上是生活随笔為你收集整理的MyBatis源码- SqlSession门面模式 selectList 源码解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tomcat - 模拟Tomcat的we
- 下一篇: MyBatis源码-解读Executor