它是咱們軟件開發中的一套解決方案,不一樣的框架解決的是不一樣的問題。使用框架的好處:框架封裝了不少的細節,使開發者可使用極簡的方式實現功能。大大提升開發效率php
- UI(表現層):與用戶交互的界面。用於接收用戶輸入的數據和顯示處理後用戶須要的數據。
- BLL(業務邏輯層):UI層和DAL層之間的橋樑。實現業務邏輯。業務邏輯具體包含:驗證、計算、業務規則等等。
- DAL(數據訪問層/持久層):與數據庫打交道。主要實現對數據的增、刪、改、查。將存儲在數據庫中的數據提交給業務層,同時將業務層處理的數據保存到數據庫。
- Entity(實體類):貫穿於三層,在三層之間傳遞數據;實現面向對象思想中的"封裝"(將數據表中的字段封裝爲類中的屬性)。
- 參考:blog.csdn.net/hanxuemin12…
參考:www.cnblogs.com/whgk/p/6435…html
- JDBC技術:Connection;PreparedStatement;ResultSet
- Spring的JdbcTemplate:Spring中對jdbc的簡單封裝
- Apache的DBUtils:它和Spring的JdbcTemplate很像,也是對Jdbc的簡單封裝
- 以上這些都不是框架:JDBC是規範;Spring的JdbcTemplate和Apache的DBUtils都只是工具類。沒有全面地解決問題。
一、數據庫連接建立、釋放頻繁形成系統資源浪費從而影響系統性能,若是使用數據庫連接池可解決此問題。 二、Sql 語句在代碼中硬編碼,形成代碼不易維護,實際應用 sql 變化的可能較大,sql 變更須要改變 java 代碼。 三、使用 preparedStatement 向佔有位符號傳參數存在硬編碼,由於 sql 語句的 where 條件不必定,可能多也可能少,修改 sql 還要修改代碼,系統不易維護。 四、對結果集解析存在硬編碼(查詢列名),sql 變化致使解析代碼變化,系統不易維護,若是能將數據庫記錄封裝成 pojo 對象解析比較方便。java
- mybatis是一個持久層框架,用java編寫的。它封裝了jdbc操做的不少細節,使開發者只須要關注sql語句自己,而無需關注註冊驅動,建立鏈接等繁雜過程它使用了ORM思想實現告終果集的封裝。
- ORM:Object Relational Mappging 對象關係映射,簡單的說,就是把數據庫表及字段和實體類及實體類的屬性對應起來讓咱們能夠操做實體類就實現操做數據庫表。
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(32) NOT NULL COMMENT '用戶名稱',
`birthday` datetime default NULL COMMENT '生日',
`sex` char(1) default NULL COMMENT '性別',
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龍'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龍'),(45,'傳智播客','2018-03-04 12:04:06','男','北京金燕龍'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小馬寶莉','2018-03-08 11:44:00','女','北京修正');
複製代碼
1. 建立maven工程並導入座標mysql
<?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.ow</groupId>
<artifactId>mybatis01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
複製代碼
2. 建立實體類和dao的接口 程序員
public class User implements Serializable{
//實體類中的屬性需和數據庫表中的字段一一對應
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
//省略get/set方法,和toString方法(alt+insert)
複製代碼
public interface IUserDao {
// 查詢返回獲得的全部符合條件的實體類
List<User> findAll();
}
複製代碼
3. 建立Mybatis的主配置文件(SqlMapConifg.xml)sql
<?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>
<!-- 配置 mybatis 的環境 -->
<environments default="mysql">
<!-- 配置 mysql 的環境 -->
<environment id="mysql">
<!-- 配置事務的類型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置鏈接數據庫的信息:用的是數據源(鏈接池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatistest?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 告知 mybatis 映射配置的位置,,映射配置文件指的是每一個dao的配置文件 -->
<mappers>
<!-- 這裏配置的是接口IUserDao的配置文件 -->
<mapper resource="com/ow/dao/IUserDao.xml"/>
</mappers>
</configuration>
複製代碼
4. 編寫log4j文件(log4j.properties)數據庫
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=G:\\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
複製代碼
5. 建立映射配置文件(IUserDao.xml)apache
<?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指的是dao接口的全限定類名-->
<mapper namespace="com.ow.dao.IUserDao">
<!--配置查詢全部 其中id不能亂寫必須是dao接口中的方法名稱 resultType寫的是實體類的全路徑-->
<select id="findAll" resultType="com.ow.domain.User">
select * from user
</select>
</mapper>
複製代碼
6. 編寫測試文件session
public class MybatisTest {
public static void main(String[] args)throws Exception {
//1.讀取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.建立 SqlSessionFactory 的構建者對象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用構建者建立工廠對象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生產 SqlSession 對象
SqlSession session = factory.openSession();
//5.使用 SqlSession 建立 dao 接口的代理對象
IUserDao userDao = session.getMapper(IUserDao.class);
//6.使用代理對象執行查詢全部方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
//7.釋放資源
session.close();
in.close();
}
}
複製代碼
- 把IUserDao.xml移除,
- 在dao接口的方法上使用@Select註解,而且指定SQL語句
![]()
- 同時須要在SqlMapConfig.xml中的mapper配置時,使用class屬性指定dao接口的全限定類名。
![]()
歡迎關注個人公衆號,瞭解一個學設計卻作了運營最後成了數據分析師並努力成爲大數據工程師的女程序員的成長之路。mybatis