1、MyBatis框架
????MyBatis是一個優(yōu)秀的數(shù)據(jù)持久層框架,在實體類和SQL語句之間建立映射關系影锈,是一種半自動化的ORM實現(xiàn)娃磺。其封裝性要低于Hibernate(全自動化框架),性能優(yōu)越徽职,并且小巧象颖,簡單,易學姆钉,應用也越來越廣泛说订。
????1.1、MyBatis框架的優(yōu)點
????(1)MyBatis是最簡單的持久化框架潮瓶,簡單易學陶冷。
????(2)MyBatis相當靈活,不會對應用程序或者數(shù)據(jù)庫的設計有影響毯辅,SQL寫在XML里埂伦,從程序代碼中徹底分離,既降低耦合度思恐,又便于統(tǒng)一管理與優(yōu)化沾谜。
????(3)提供XML標簽,支持編寫動態(tài)SQL語句壁袄。
????(4)提供映射標簽类早,支持對象與數(shù)據(jù)庫的ORM字段關系映射。
????1.2嗜逻、MyBatis框架的缺點
????(1)SQL語句的編寫工作量大涩僻,對開發(fā)人員編寫SQL語句的功底又一定的要求。
????(2)SQL語句依賴于數(shù)據(jù)庫,導致數(shù)據(jù)庫移植性差逆日,不能隨意更改數(shù)據(jù)庫嵌巷。
2、搭建MyBatis
?? ??以下環(huán)境的搭建和配置都是基于IDEA編輯器下的Maven項目室抽,數(shù)據(jù)庫使用的是MySql搪哪。
????2.1、在pom.xml中添加驅(qū)動的jar包(mysql.jar和mybatis.jar包)
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
</dependencies>
????2.2坪圾、在resources資源庫中創(chuàng)建MyBatis的核心配置文件mybatis-config.xml
<?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多套運行環(huán)境-->
<environments default="development">
<environment id="development">
<!--配置事務管理晓折,采用JDBC的事務管理-->
<transactionManager type="JDBC"/>
<!--POOLED:mybatis自帶的數(shù)據(jù)源-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/> <!--加載mysql驅(qū)動:com.mysql.jdbc.Driver-->
<property name="url" value="${url}"/><!--指定連接的數(shù)據(jù)庫路徑:jdbc:mysql://localhost:3306/數(shù)據(jù)庫名-->
<property name="username" value="${username}"/><!--數(shù)據(jù)庫配置時的用戶名-->
<property name="password" value="${password}"/><!--數(shù)據(jù)庫配置時的密碼-->
</dataSource>
</environment>
</environments>
<!--指定mapper.xml文件的路徑(maven項目是從resources源文件下找資源)-->
<mappers>
<mapper resource="包名/mapper文件名"></mapper>
</mappers>
</configuration>
????2.3、創(chuàng)建實體類
????2.4兽泄、創(chuàng)建接口類
????2.5漓概、添加mapper文件
?????注:在mapper文件中保存sql語句
<?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 表示命名空間,通常定義的格式是接口的完整路徑-->
<mapper namespace="接口的完整路徑">
<!--定義sql語句,sql語句結束后不要加分號-->
<!-- id是被調(diào)用的方法名 mapper文件中讀取參數(shù)的格式:#{屬性名} -->
<insert id="方法名">
//sql語句
</insert>
<!--查詢語句中需添加一個結果映射屬性:resultType="一般是結果類型的完整路徑"-->
<select id="方法名" resultType="查詢后返回值類型">
//sql語句
</select>
</mapper>
????2.6病梢、獲取SqlSession胃珍,創(chuàng)建測試類
//1.加載配置文件
Reader resourceAsReader=Resources.getResourceAsReader("mybatis-config.xml");
//2.創(chuàng)建SqlSessionFactoryBuilder對象
SqlSessionFactoryBuilder builder= new SqlSessionFactoryBuilder();
//3.得到session工廠
SqlSessionFactory factory=builder.build(resourceAsReader);
//4.得到session
SqlSession sqlSession= factory.openSession();
//5.調(diào)取sql語句,insert("方法的完整路徑"),路徑=namespace+id
int rs=sqlSession.insert("方法的完整路徑" 蜓陌,e);
//6.一般增觅彰、刪、改需提交事務才可以實現(xiàn)數(shù)據(jù)庫的更改
sqlSession.commit();
//7.關閉資源(放在finally中钮热,應該添加非空驗證)
sqlSession.close();
3填抬、MyBatis一個簡單的實現(xiàn)(實現(xiàn)用戶數(shù)據(jù)的添加)
????3.1、數(shù)據(jù)庫準備
?????創(chuàng)建一個數(shù)據(jù)庫名為test霉旗,表名為users
CREATE TABLE users(
id INT PRIMARY KEY,
NAME VARCHAR(20),
sex VARCHAR(20)
)
????3.2痴奏、項目整體架構
????3.3蛀骇、添加驅(qū)動的jar包
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
</dependencies>
????3.4厌秒、MyBatis的核心配置文件mybatis-config.xml
<environments default="development">
<environment id="development">
<!--配置事務管理,采用JDBC的事務管理-->
<transactionManager type="JDBC"/>
<!--POOLED:mybatis自帶的數(shù)據(jù)源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/> <!--加載mysql驅(qū)動:com.mysql.jdbc.Driver-->
<property name="url" value="jdbc:mysql://localhost:3306/test"/><!--指定連接的數(shù)據(jù)庫路徑:jdbc:mysql://localhost:3306/數(shù)據(jù)庫名-->
<property name="username" value="..."/><!--數(shù)據(jù)庫配置時的用戶名-->
<property name="password" value="..."/><!--數(shù)據(jù)庫配置時的密碼-->
</dataSource>
</environment>
</environments>
<!--指定mapper.xml文件的路徑(maven項目是從resources源文件下找資源)-->
<mappers>
<mapper resource="Mapper/UserDaoMapper.xml"></mapper>
</mappers>
????3.5擅憔、User實體類
package com.fan.entity;
public class User {
private Integer id;
private String name;
private String sex;
public User() {
}
public User(Integer id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
????3.6鸵闪、UserDao接口類
package com.fan.dao;
import com.fan.entity.User;
public interface UserDao {
//新增用戶
public int addUser(User user);
}
????3.7、UserMapper.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">
<mapper namespace="com.fan.dao.UserDao">
<insert id="addUser">
insert into users(id,name,sex) values(#{id},#{name},#{sex})
</insert>
</mapper>
????3.8暑诸、測試類
import com.fan.entity.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.IOException;
import java.io.Reader;
public class Demo1 {
public static void main(String[] args) {
Reader resourceAsReader=null;
SqlSession sqlSession=null;
try {
User user=new User(1,"張三","男");
resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(resourceAsReader);
sqlSession = factory.openSession();
int i = sqlSession.insert("com.fan.dao.UserDao.addUser", user);
sqlSession.commit();
System.out.println("插入成功"+i+"條");
} catch (IOException e) {
e.printStackTrace();
}finally {
if(sqlSession!=null){
sqlSession.close();
}
if(resourceAsReader!=null){
try {
resourceAsReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}