JDBChtml
Mysqljava
Java基礎mysql
Mavengit
Junit程序員
框架:是有配置文件的。最好的方式:看官網文檔github
簡介
什麼是 MyBatis?sql
MyBatis 是一款優秀的持久層框架 它支持定製化 SQL、存儲過程以及高級映射。 MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。 MyBatis 可使用簡單的 XML 或註解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)爲數據庫中的記錄。
如何得到MyBatis?數據庫
Maven倉庫 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> github:https://github.com/mybatis/mybatis-3/releases 中文文檔:https://mybatis.org/mybatis-3/zh/index.html
數據持久化apache
持久化就是將程序的數據在持久狀態和瞬時狀態轉化的過程 內存:斷電即失 數據庫(JDBC),io文件持久化。 生活中:冷藏、罐頭。
爲何須要持久化?session
有一些對象,不能讓他丟掉。
Dao層、Service層、Controller層…
完成持久化工做的代碼塊 層界限十分明顯
幫助程序員將數據存入到數據庫中。 方便 傳統的JDBC代碼太複雜了。簡化、框架、自動化。 不用Mybatis也能夠。更容易上手。技術沒有高低之分 優勢: 簡單易學 靈活 sql和代碼的分離,提升了可維護性。 提供映射標籤,支持對象與數據庫的orm字段關係映射 提供對象關係映射標籤,支持對象關係組建維護 提供xml標籤,支持編寫動態sql。
最重要的一點:使用的人多!
Spring
SpringMVC
SpringBoot
思路:搭建環境–>導入Mybatis–>編寫代碼–>測試!
搭建數據庫
CREATE DATABASE mybatis; use mybatis; CREATE TABLE user( id INT(20) not null PRIMARY KEY, name VARCHAR(30) DEFAULT NULL, pwd VARCHAR(30) DEFAULT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO user (id,name,pwd) VALUES (1,'浴血','123456'), (2,'張三','123456'), (3,'李四','123890')
新建項目
新建一個普通的maven項目 刪除src目錄 導入maven依賴
以後創建maven的父工程與子工程
<?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.yuxue</groupId> <artifactId>Mybatis-study</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--> <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> <!--log4j--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>
子工程
<?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>Mybatis-study</artifactId> <groupId>com.yuxue</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mybatis-01</artifactId>
<?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核心配置文件--> <configuration> <!--environments配置環境組--> <!--default默認環境--> <environments default="development"> <!--environment單個環境--> <environment id="development"> <!--transactionManager配置事務管理器--> <transactionManager type="JDBC"/> <!--配置鏈接池--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> </configuration>
package com.yuxue.utils; 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.IOException; import java.io.InputStream; /** * @author yuxue * sqlSessionFactory --> sqlSession */ public class MybatisUtils { 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 命令所需的全部方法。 // 你能夠經過 SqlSession 實例來直接執行已映射的 SQL 語句。 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
package com.yuxue.pojo; 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; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
package com.yuxue.dao; import com.yuxue.pojo.User; import java.util.List; public interface UserMapper { //查詢全部用戶 List<User> getUserList(); }
<?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接口--> <mapper namespace="com.yyz.dao.UserMapper"> <select id="getUserList" resultType="com.yyz.pojo.User"> select * from mybatis.user </select> </mapper>
<!--每個Mapper.xml都須要在Mybatis核心配置文件中註冊--> <mappers> <mapper resource="com/yyz/dao/UserMapper.xml"></mapper> </mappers>
<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>
使用juint進行測試
package com.yuxue.dao; import com.yuxue.pojo.User; import com.yuxue.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserMapperTest { @Test public void test(){ //第一步:得到SqlSession對象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //執行SQL UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } //關閉SqlSession sqlSession.close(); } }
可能會遇到的問題: 配置文件沒有註冊 綁定接口錯誤 方法名不對 返回類型不對 Maven導出資源問題
以上就是咱們所寫的第一個Mybatis程序
namespace中的包名要和dao/mapper接口的包名保持一致
<mapper namespace="com.yuxue.dao.UserMapper">
選擇查詢語句;如下在select當中的參數很是重要
id:就是對應的namespace中的方法名;
resultType:Sql語句執行的返回值!
parameterType:參數類型!
編寫接口
package com.yuxue.dao; import com.yuxue.pojo.User; import java.util.List; public interface UserMapper { //根據id查詢用戶 User getUserById(int id); }
編寫對應的mapper中的sql語句
<select id="getUserById" resultType="com.yuxue.pojo.User" parameterType="int"> select * from mybatis.user where id = #{id}; </select>
測試
@Test public void getUserById(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); sqlSession.close(); }
注意點:增刪改須要提交事務
resource綁定mapper,須要使用路徑! 程序配置文件必須符合規範 NullPointerException,沒有註冊到資源 輸出的xml文件中存在中文亂碼問題 maven資源沒有導出問題